Poprzedni dokument http://tgsoft.pl/Blog.aspx?id=59 opisuje dostęp do danych z systemu handlowego Sz@rk.Funkcja taka byłaby zupełnie nieprzydatna dla użytkowników innych systemów, którzy korzystają jednocześnie z Sz@rk CRM.
Również ten problem rozwiążemy za pomocą otwartej architektury systemu Sz@rk API.Wystarczy przygotować własny moduł TGSoft.Data.Extensions.dll, w którym zawarte będą nowe implementacje klas, "zasłaniające" oryginalną funkcjonalność Sz@rk.
Można zdefiniować własny dostęp do danych za pomocą bezpośredniego dostępu do bazy SQL, jednak należy pamiętać, że takie opcje nie będą działać w modelu pracy zdalnej (on-line) przez Internet, za wyjątkiem pracy przez zdalne pulpity.
W naszym przykładzie wykorzystujemy technologię middleware i gotowe serwisy, który zostały opracowane na potrzeby bezpośredniej współpracy z CDN Optima. Rozwiązanie pozwala na korzystanie z bazy OPTIMA na równi z bazami Sz@rk za pomocą serwera aplikacji Sz@rk Server.
Podgląd listy faktur bezpośrednio z CDN Optima.
Okno "Rejestry sprzedaży" traktuje załączone zewnętrzne dane jak własne, dlatego dostępne są wszystkie standardowe opcje Sz@rk. Dostępny jest również wbudowany generator raportów oraz nasze projekty wydruków. Przykład wydruku w/w danych wg projektu FastReport zapisany do formatu PDF bezpośrednio z programu.
Podgląd szczegółów Faktury VAT bezpośrednio z CDN Optima. Fakturę można też wydrukować za pomocą projektów Sz@rk.
Poniżej prezentujemy pełny kod klasy, która zmienia funkcjonalność naszego programu i pobiera dane bezpośrednio z CDN Optima za pomocą serwisów Sz@rk Server. Skompilowana biblioteka DLL z kodem źródłowym dostępna będzie w wersji instalacyjnej Sz@rk CRM.
using System;
using TGSoft.Data;
using TGSoft.Repository;
namespace TGSoft.Data.Extensions
{
public class Faktury : TGSoft.Data.Szark.Faktury
{
public Faktury(TypDokumentu typDokumentu)
: base(typDokumentu)
{
zrodloDanych = ZrodloDanych.Optima;
}
public override void OpenFaktury(object id_faktury, object id_kontrahenta,
int zakresProforma, object mag, object data1, object data2)
{
Mag = mag;
Data1 = data1;
Data2 = data2;
if (id_faktury != null)
{
DTFaktury.Where = "TrN_TrNId=@P0";
DTFaktury.Open(new object[] { id_faktury });
}
else
{
Controller.SetColumnProperties("kod", "Kod", 100);
Controller.SetColumnAlignmentLeft("kod");
Controller.SetColumnProperties("grupa", "Grupa", 80);
Controller.SetColumnAlignmentLeft("grupa");
if (id_kontrahenta != null)
{
DTFaktury.Where = "A.Trn_PodId=@P0 AND A.TrN_DataWys BETWEEN @P1 AND @P2 " +
"AND A.TrN_Anulowany=0";
DTFaktury.Open(new object[] { id_kontrahenta, data1, data2 });
}
else
{
DTFaktury.Where = "A.TrN_DataWys BETWEEN @P0 AND @P1 AND A.TrN_Anulowany=0";
DTFaktury.Open(new object[] { data1, data2 });
}
}
DTFaktury.SetPrimaryKey("TrN_TrNId");
}
protected override DADataTable GetTableFaktury()
{
if (typDokumentu == TypDokumentu.Faktura)
return new DADataTable(Services.Tables.CDN_RejestryFaktur, "", null);
else
return new DADataTable(Services.Tables.CDN_RejestryProforma, "", null);
}
protected override DADataTable GetTableVAT()
{
return new DADataTable(Services.Tables.CDN_RejestryFakturZapisyVAT, "TrV_TrNID=@P0",
new object[] { DTFaktury.GetID() });
}
protected override DADataTable GetTableZapisy()
{
return new DADataTable(Services.Tables.CDN_FakturaZapisy, "TrE_TrNId=@P0",
new object[] { DTFaktury.GetID() });
}
protected override DADataTableRecord GetTableNabywca()
{
return new DADataTableRecord(Services.Tables.CDN_FakturaNabywca, DTFaktury.GetID())
{ Alias = "A", PrimaryKey = "TrN_TrNId" };
}
protected override DADataTableRecord GetTableOdbiorca()
{
return new DADataTableRecord(Services.Tables.CDN_FakturaOdbiorca, DTFaktury.GetID())
{ Alias = "A", PrimaryKey = "TrN_TrNId" };
}
public override void FillRejestrySprzedazy(out DADataTable tableFaktury,
out DADataTable tableVat, out DADataTable tableSumy, object zakres)
{
string where = Optima.Where_RejestryFaktur(Data1, Data2, zakres);
string whereIN = Optima.WhereIN_RejestryFaktur(where);
tableFaktury = new DADataTable(Services.Tables.CDN_RejestryFaktur, where, null);
tableFaktury.Open();
tableVat = new DADataTable(Services.Tables.CDN_RejestryFakturZapisyVAT, whereIN, null);
tableVat.Open();
tableSumy = new DADataTable(Services.Tables.CDN_RejestryFakturSumyVAT, whereIN, null);
tableSumy.Open();
}
}
}