Shop Notas de implementação (continuação) Em Resumo 1. 2. 3. 4. 5. 6. Criar o componente ShopClassLibrary com os diversos serviços de Acesso a Dados (implememtar todos os serviços) Criar um Web Site que será cliente do componente ShopClassLibrary Porque o Web Site vai utilizar serviços do componente é preciso adicionar ao Web Site uma referência ao componente No Web Site criado, no directório App_Data, adicionar a BD existente sales.mdb Atendendo ao pathname da BD actualizar no componente o valor da string de conexão à BD Criar as várias WebForms constituintes do site 1 Implementar na classe Customer o método public DataSet GetByID(string user, string pass, int clientID) { OleDbConnection conn = null; DataSet ds = null; try { // criar objecto de conexão à base de dados e abrir a conexão conn = new OleDbConnection(UtilDB.CONN); conn.Open(); // validar utilizador if (UtilDB.ValidateUser(conn, null, user, pass) !=ShopStatusEnum.OK) return null; // efectuar pesquisa ds = UtilDB.GetByID(conn, null, “Customers", “CustomerID", clientID); } catch (OleDbException ) { // tratar a excepção!!!! ….. } finally { // fechar a conexão if (conn.State == ConnectionState.Open) conn.Close(); } return ds; } 2 Interface associada à Pesquisa de Cliente por ID Pesquisar Cliente ClienteID Pesquisar O Cliente não existe Visible true or false 3 Página Pesquisa.aspx.cs public partial class PesquisarID : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { Label2.Visible = false; DetailsView1.Visible = false; } } protected void Button1_Click(object sender, EventArgs e) { DetailsView1.Visible = false; Label2.Visible = false; long idCustomer = long.Parse(TextBox1.Text); ICustomer customer = Factory.CreateCustomerService(); DataSet ds = customer.GetByID("Joao", "Joao", idCustomer); try { if (ds.Tables[0].Rows.Count != 0) { DetailsView1.Visible = true; DetailsView1.DataSource = ds; DetailsView1.DataBind(); } else Label2.Visible = true; } catch (System.Exception) { Label2.Visible = true; } } } 4 Implementar na classe Customer o método public long Add(string user, string pass, string name, string address, string phone, string fax, string email, out ShopStatusEnum status) { long customerID = -1; OleDbConnection conn = null; // validar dados de entrada if (name == null || name.Trim().Length == 0) { status = ShopStatusEnum.InvalidArgument; return -1; } try { // criar objecto de conexão à base de dados e abrir a conexão conn = new OleDbConnection(UtilDB.CONN); conn.Open(); // validar o utilizador status = UtilDB.ValidateUser(conn, null, user, pass); if (status != ShopStatusEnum.OK) return -1; 5 // criar comando SQL a executar string sqlCmd = "INSERT INTO Customers (Name, Address, PhoneNb, FaxNb, EMail) Values (?, ?, ?, ?, ?)"; OleDbCommand cmd = new OleDbCommand(sqlCmd, conn); cmd.Parameters.AddWithValue("name", name); if (address == null || address.Length == 0) cmd.Parameters.AddWithValue("address", DBNull.Value); else cmd.Parameters.AddWithValue("address", address); if (phone == null || phone.Length == 0) cmd.Parameters.AddWithValue("phone", DBNull.Value); else cmd.Parameters.AddWithValue("phone", phone); if (fax == null || fax.Length == 0) cmd.Parameters.AddWithValue("fax", DBNull.Value); else cmd.Parameters.AddWithValue("fax", fax); if (email == null || email.Length == 0) cmd.Parameters.AddWithValue("email", DBNull.Value); else cmd.Parameters.AddWithValue("email", email); // executar o comando // int insRows = cmd.ExecuteNonQuery( ); 6 // verificar o resultado if (insRows == 0) // não inseriu registo status = ShopStatusEnum.NOT_OK; else { // inseriu registo // obter novo código de id gerado pela BD OleDbCommand idCmd = new OleDbCommand( "SELECT @@IDENTITY", conn); customerID = (int)idCmd.ExecuteScalar(); status = ShopStatusEnum.Ok; } } catch (OleDbException ex) { // tratar a excepção!!!! status = ShopStatusEnum.ERROR; } finally { // fechar a conexão if (conn != null && conn.State == ConnectionState.Open) conn.Close( ); } return customerID; } 7 Implementar na classe Customer o método public DataSet getAll(string user, string pass) { OleDbConnection conn; ShopStatusEnum status; try { // criar objecto de conexão à base de dados e abrir a conexão conn = new OleDbConnection(UtilDB.CONN); conn.Open(); // validar o utilizador status = UtilDB.ValidateUser(conn, null, user, pass); if (status != ShopStatusEnum.OK) return null; DataSet ds = UtilDB.getAllFromTable(conn, "Customers"); return ds; } catch (System.Exception) { return null; } } 8 Interface associada à Inserção de Cliente Inserir Cliente Name Address Phone Fax Email Inserir Registo inserido / não inserido 9 protected void ButtonInserir_Click(object sender, EventArgs e) { try { ShopStatusEnum st; string user = "Joao"; string pass = "Joao"; string name = TextBox1.Text; string address = TextBox2.Text; string phone = TextBox3.Text; string fax = TextBox4.Text; string email = TextBox5.Text; ICustomer customer = Factory.CreateCustomerService(); long id = customer.Add(user, pass, name, address, phone, fax, email, out st); if (id == -1) { Label6.Text = "Registo Não Inserido"; Label6.Visible = true; } else { Label6.Text = "Registo Inserido. ID=“+id.ToString(); Label6.Visible = true; TextBox1.Text = ""; TextBox2.Text = ""; TextBox3.Text = ""; Textox4.Text = ""; Textox5.Text = ""; } } catch (SystemException) { } } 10 Interface associada a Encomenda de Cliente Venda Cliente Produto Quantidade Add Produtos Encomendados Fechar Facturta 11 Página Sales.aspx.cs public partial class Sales : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { ICustomer clientes = Factory.CreateCustomerService(); DataSet dsClientes = clientes.getAll("Joao", "Joao"); if (dsClientes != null) { DropDownList1.DataTextField = "Name"; DropDownList1.DataValueField = "CustomerID"; DropDownList1.DataSource = dsClientes; DropDownList1.DataBind(); } IProduct produtos = Factory.CreateProductService(); DataSet dsProdutos = produtos.GetAll("Joao", "Joao"); if (dsProdutos != null) { DropDownList2.DataTextField = "Description"; DropDownList2.DataValueField = "ProductID"; DropDownList2.DataSource = dsProdutos; DropDownList2.DataBind(); } GridView1.Visible = false; ISale2 sale = Factory.CreateSale2Service(); DataSet dsDetalhes = sale.CreateDetails("Joao", "Joao"); if (dsDetalhes == null) Label1.Text = dsDetalhes.Tables[0].TableName; dsDetalhes.Tables[0].Columns.Add("Produto"); Session["Detalhes"] = dsDetalhes; } 12 Evento associado a Adicionar linha encomenda protected void Button1_Click(object sender, EventArgs e) { string clienteID = DropDownList1.SelectedValue; string produtoID = DropDownList2.SelectedValue; string produtoname = DropDownList2.SelectedItem.Text; int qtd = int.Parse(TextBox1.Text); DataSet dsDetalhes = (DataSet)Session["Detalhes"]; DataRow dr = dsDetalhes.Tables[0].NewRow(); dr["ProductID"] = produtoID; dr["Quantity"] = qtd; dr["Produto"] = produtoname; dsDetalhes.Tables["SaleDetails"].Rows.Add(dr); GridView1.DataSource = dsDetalhes; GridView1.DataBind(); Session["Detalhes"] = dsDetalhes; GridView1.Visible = true; } 13 Evento associado a Fechar Encomenda protected void Button2_Click(object sender, EventArgs e) { DataSet dsDetalhes = (DataSet)Session["Detalhes"]; ISale2 sale = Factory.CreateSale2Service(); sale.Add("Joao", "Joao", 22, DateTime.Now, dsDetalhes); GridView1.Visible = false; Label1.Visible = false; Session["Detalhes"] = dsDetalhes; Button2.Visible = false; } 14 Implementar na classe Sales o método public DataSet CreateDetails(string User, string Pass) { OleDbConnection conn = null; DataSet ds; try { // criar objecto de conexão à BD e abrir a conexão conn = new OleDbConnection(UtilDB.CONN); conn.Open(); // validar o utilizador if (UtilDB.ValidateUser(conn, null, User, Pass) !=ShopStatusEnum.OK) return null; // criar o dataset ds = UtilDB.GetById(conn, null, "SaleDetails", "SaleID", -1); if (ds == null) return null; // configurar as colunas para utilização ds.Tables["SaleDetails"].Columns["SaleID"].AllowDBNull = true; } catch (OleDbException ex) { // tratar a excepção!!!! return null; } finally { // fechar a conexão if (conn.State == ConnectionState.Open) conn.Close(); } return ds; } 15