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
Download

Implementar na classe Customer o método