W poprzednim przykładzie zaprezentowaliśmy klasę SiOrder, z danymi wprowadzonymi bezpośrednio w kodzie projektu. Jednak w rzeczywistości zadanie będzie nieco trudniejsze, gdyż dane są dynamiczne i znajdują się w zewnętrznych źródłach innych systemów.
Sz@rk API zapewnia dostęp do klas .NET Framework oraz szeregu własnych bibliotek, które umożliwiają operowanie na zewnętrznych danych znajdujących się poza systemem Sz@rk. W przykładzie zaprezentujemy import zamówienia z bazy MS SQL Server systemu Sz@rk, pobierzemy dane kontrahenta bezpośrednio z tabeli klientów oraz kilka produktów z tabeli magazynu.
W celu dostosowania tego przykładu do własnych potrzeb wystarczy zmienić obydwa zapytania SQL oraz zmienić nazwy pól na własne.
Uwaga! Zastosowana biblioteka TGSoft.DB posiada również klasę MySql, którą posługujemy się analogiczne jak klasą MsSql użytą w przykładzie. Daje nam to możliwość integracji z większością sklepów internetowych opartych na bazie MySql.
Poniżej prezentujemy pełny kod C# do wykonania importu zamówienia z bazy SQL. Projekt dostępny jest w programie z listy przykładów do zaimportowania.
namespace Szark
{
using System;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
using TGSoft.UI;
using TGSoft.Data;
using TGSoft.DB;
using TGSoft.Utils;
public partial class Form1 : DevExpress.XtraEditors.XtraForm
{
private readonly GridController gc1;
private DataTable dtOrder;
private DataTable dtProducts;
public Form1(GridController sender)
{
this.InitializeComponent();
buttonLoad.Click += buttonLoad_click;
buttonSave.Click += buttonSave_click;
gc1 = sender;
}
public void Main()
{
this.ShowDialog();
}
private void buttonLoad_click(object sender, EventArgs e)
{
MsSql sql = new MsSql("localhost", "tgsoft1", "", "");
dtOrder = sql.GetSQLTable("SELECT * FROM kontrahenci WHERE id=15");
dtProducts = sql.GetSQLTable("SELECT TOP 5 * FROM gm_mater WHERE mag=1");
if (dtOrder.Rows.Count == 1 && dtProducts.Rows.Count > 0)
buttonSave.Enabled = true;
}
private void buttonSave_click(object sender, EventArgs e)
{
DataRow row = dtOrder.Rows[0];
ISiOrderList list = gc1.Host as ISiOrderList; // Dostęp do bieżącej listy w celu
// odczytu aktualnego id sklepu
SiOrder order = new SiOrder(list.Sklep.ToInt());
order.Order_id = order.GetLastOrder_id() + 1; // Id zamówienia w sklepie internetowym,
// w przykładzie odczytujemy ostatni nr z naszej bazy
order.Status_id = 1; // Status zamówienia
order.Payment_id = 1; // Sposób zapłaty
order.Shipping_id = 2; // Sposób dostawy
order.Shipping_cost = 10; // Koszt dostawy
order.Date = DateTime.Now; // Data zamówienia
order.Email = row["e_mail"].ToStr();
// Adres płatnika
order.Ba_company = row["skrot"].ToStr();
order.Ba_firstname = row["nazwa1"].ToStr();
order.Ba_lastname = row["nazwa2"].ToStr();
order.Ba_city = row["miasto"].ToStr();
order.Ba_postcode = row["kod_pocztowy"].ToStr();
order.Ba_street1 = row["ulica"].ToStr();
order.Ba_tax_id = row["nip"].ToStr();
order.Ba_phone = row["telefon_1"].ToStr();
order.Notes = "Test zamówienia Sz@rk API";
//Adres dostawy
order.Da_firstname = "Jan";
order.Da_lastname = "Kowalski";
order.Da_city = "Nowy Targ";
order.Da_postcode = "34-400";
order.Da_street1 = "Szaflarska 1";
order.Da_tax_id = "000-000-00-00";
order.Da_phone = "18 1234567";
foreach (DataRow r in dtProducts.Rows)
{
SiProduct product = order.NewProduct();
product.Name = r["nazwa1"].ToStr();
product.Code = r["symbol"].ToStr();
product.Price = r["cenazb1"].ToDecimal();
product.Quantity = 1; // Ilość
product.Discount_perc = 10; // Rabat %
product.Tax_value = r["podatek"].ToInt();
product.Unit = r["jm"].ToStr();
product.Pkwiu = r["sww"].ToStr();
product.Option = r["nazwa2"].ToStr();
product.Option2 = r["opis"].ToStr();
order.Add(product);
}
// Oblicza wartości zamówienia (Brutto, VAT, Total) na podstawie dodanych produktów
order.SUM();
if (order.Save() != null)
{
gc1.LoadData();
DialogResult = DialogResult.OK;
}
}
}
}