Kısa Tanım:

Akış içerisindeki XmlSerialize() yapılmamış tablo bilgilerini farklı bir tabloya aktarma işlemidir.

Açıklama:

Akış içerisinde bulunan tablolardaki verilerin raporlanması talep edildiğinde tablo satır bilgilerine sql’ den ulaşabilmeniz için tabloların büyük metin değişkenlerine XmlSerialize() yöntemi ile atılması gerekmektedir. Fakat bu işlem yapılmamış ya da daha sonra yapılmış ise eski akışlardaki tablo satırları verilerini almak için bu kodlama yöntemi kullanılabilmektedir. Tablo verilerinin alındığı örnek akış,  https://docs.logo.com.tr/display/logoflow/06.+e-Fatura adresinden alınmıştır. Akış içerisindeki Açılır pencereden örnek efatura akışı seçilir ve seçilen efatura akışları içerisindeki grdInvoiceline tablosundaki satırları yeni bir tabloya atma işlemi yapar.

Akışı içeri aldığınızda Sql Bağlantı listesi ve Veri kaynağı düzenlenmelidir. Veri kaynağında NWFLOGMASTER tablosundaki FIRSTVERSIONSTORAGEID kullanılarak yayınlanmış bütün efatura akışlarını açılır listede gösterilmesi sağlanmıştır. Akışı içeri aldığınızda öncelikle bu iki bölümü kendi yapınıza göre düzenlemeniz gerekmektedir. FIRSTVERSIONID bilgisi NWFSTORAGE tablosundan da alınabilir.


Kod Örneği:

 string test="",siraNo="",malzemeHizmet="",MalzemeHizmetKodu="",MalzemeHizmetAciklama="",RowId="";
double miktar=0,BirimFiyat=0,IskontoTutari=0,KdvOrani=0,KdvTutari=0,MalzemeHizmetTutari=0;
int instanceUniqueId=0,id=0;
try{
//AÇILIR PENCEREDE SEÇİLEN KAYITLAR DÖNDÜRÜLÜYOR
for (int i = 0; i <AkisListesi.Content.Items.Count; i++)
{
//AÇILIR LİSTEDEKİ HEM ID KOLONUNDAKİ VERİ HEM DE INSTANCEUNIQUEID BİLGİLERİ BİR DEĞİŞKENE ATILIYOR. PORTALDA GÖRÜLEN ID INSTANCEUNIQUEID DEĞİŞKENİDİR.
try{id=AkisListesi.Content.Items[i][AkisListesi_Columns.ID].ToInt();}catch{id=0;}
try{instanceUniqueId=AkisListesi.Content.Items[i][AkisListesi_Columns.INSTANCEUNIQUEID].ToInt();}catch{instanceUniqueId=0;}

//ID' YE GORE BUTUN VERİLER BUTUNDATA DEGISKENINE ALINIYOR.
var butunData = LFlowUtils.GetJobAllVariablesValue(id);

//BUTUNDATAYA ALINAN AKIŞ BİLGİLERİ ICERISINDE SADECE grdInvoiceLine TABLOSUNUN VERILERI BIR DEGISKENE ALINIYOR
var eFaturaDetay=(List<Dictionary<string, object>>)butunData["grdInvoiceLine"];
if(instanceUniqueId>0 && butunData.Assigned() && eFaturaDetay.Count>0)
{
//grdInvoiceLine TABLOSUNDAKİ KOLONLARIN BİLGİLERİ KOLON KOLON / SATIR SATIR DEĞİŞKENLERE AKTARILIYOR.
eFaturaDetay.ForEach(x=>
{x.ForEach(y=>{
if(y.Key == "grdInvoiceLine__SiraNo")
siraNo =  (y.Value.Assigned() ?  y.Value.ToString() : "");

if(y.Key == "grdInvoiceLine__MalzemeHizmet")
malzemeHizmet =  (y.Value.Assigned() ?  y.Value.ToString() : "");

if(y.Key == "grdInvoiceLine__MalzemeHizmetKodu")
MalzemeHizmetKodu =  (y.Value.Assigned() ?  y.Value.ToString() : "");

if(y.Key == "grdInvoiceLine__MalzemeHizmetAciklama")
MalzemeHizmetAciklama =  (y.Value.Assigned() ?  y.Value.ToString() : "");

if(y.Key == "RowId")
RowId =  (y.Value.Assigned() ?  y.Value.ToString() : "");

if(y.Key == "grdInvoiceLine__miktar")
miktar =  (y.Value.Assigned() ?  Convert.ToDouble(y.Value) : 0);

if(y.Key == "grdInvoiceLine__BirimFiyat")
BirimFiyat =  (y.Value.Assigned() ?  Convert.ToDouble(y.Value) : 0);

if(y.Key == "grdInvoiceLine__IskontoTutari")
IskontoTutari =  (y.Value.Assigned() ?  Convert.ToDouble(y.Value) : 0);

if(y.Key == "grdInvoiceLine__KdvOrani")
KdvOrani =  (y.Value.Assigned() ?  Convert.ToDouble(y.Value) : 0);

if(y.Key == "grdInvoiceLine__KdvTutari")
KdvTutari =  (y.Value.Assigned() ?  Convert.ToDouble(y.Value) : 0);

if(y.Key == "grdInvoiceLine__MalzemeHizmetTutari")
MalzemeHizmetTutari =  (y.Value.Assigned() ?  Convert.ToDouble(y.Value) : 0);

});
//SATIR VERİLERİ DEĞİŞKENE ATILDIKTAN SONRA TABLOYA AKTARILMASI İÇİN DICTIONARY DEĞİŞKENİ İLE SATIR OLARAK TABLOYA EKLENİYOR.
Dictionary<string, object> satir = new Dictionary<string, object>();
satir.Add(TabloVerileri_Columns.siraNo,siraNo);
satir.Add(TabloVerileri_Columns.malzemeHizmet,malzemeHizmet);
satir.Add(TabloVerileri_Columns.MalzemeHizmetKodu,MalzemeHizmetKodu);
satir.Add(TabloVerileri_Columns.MalzemeHizmetAciklama,MalzemeHizmetAciklama);
satir.Add(TabloVerileri_Columns.RowId,RowId);
satir.Add(TabloVerileri_Columns.miktar,miktar);
satir.Add(TabloVerileri_Columns.BirimFiyat,BirimFiyat);
satir.Add(TabloVerileri_Columns.IskontoTutari,IskontoTutari);
satir.Add(TabloVerileri_Columns.KdvOrani,KdvOrani);
satir.Add(TabloVerileri_Columns.KdvTutari,KdvTutari);
satir.Add(TabloVerileri_Columns.MalzemeHizmetTutari,MalzemeHizmetTutari);
satir.Add(TabloVerileri_Columns.INSTANCEUNIQUEID,instanceUniqueId);
satir.Add(TabloVerileri_Columns.LogMasterId,id);
TabloVerileri.Content.AddRow(satir);
//SATIR BURADA BİTİP DİĞER SATIRA GEÇİLİYOR.
});
}
//BUTUN İŞLEMLER BURADA BİTİYOR.
Durum.Value="İşlem Başarılı";
}}
//HATA OLDUĞUNDA ÖN YÜZE HATAYI GETİRMEDEN DURUM DEĞİŞKENİNE HATA EKLENİYOR.
catch(Exception Ex){Durum.Value="Hata="+Ex.Message.ToString();}

Akış Dosyası (.xnm):

Aşağıdaki dosyayı indirerek uygulamaya aktarabilirsiniz. İçeri aktarma işleminin nasıl yapıldığına dair bilgi için Aktar bölümünü inceleyebilirsiniz.

Akış İçerisindeki Tablo Satırlarını Kod İle Alma İşlemi.nxm