Merhaba, CANIAS içerisinde bir web servise erişme ihtiyacı olduğunda şöyle bir yöntem izlemiştim.
Başkalarının da işine yarayabilir diyerek paylaşıyorum.
Öncelikle CANIAS’la bir dış servisi doğrudan haberleştirmemekte fayda var.
O yüzden araya bir WCF Web Servis yazmıştım.
CANIAS, dışarı ile haberleşeceği zaman hep bu servis üzerinden gitmeliydi.
CANIAS uygulama sunucusu mümkün olduğunca dış dünyaya, güncellemelere kapalı bir şekilde ayarlanmalı.
Web Servisi çalıştırdığımız sunucu dışarıya açık olacak.
Bu servise bir tane operasyon ekliyoruz: Adı: “ErpOperasyon” olsun.
Erp’den gelen istekleri bu arkadaş karşılayacak.
Erp’den bir istek gelirken bu arkadaşa 3 parametre gönderecek:
1. Uid (Güvenlik sebebiyle eklediğimiz bir tekil Id değeri olsun.)
2. MetotAdi (Hangi alt metoda gitmek istediğimizi söyleyelim.)
3. StrXmlParam (Xml formatında hazırlanmış bir string.)
Aşağıdaki gibi bir yapıda olacak:
public string ErpOperasyon(string uId, string MetotAdi, string StrXmlParam)
{
string sonucXml = "";
if (uId == Sabitler.ErpUidDegeri) // Bu tip değerleri bir Sabitler Class'ında tutmakta fayda var.
{
XmlDocument xmlParam = new XmlDocument();
xmlParam.LoadXml(StrXmlParam);
XmlNodeList lstParam = xmlParam.SelectNodes("/KOK/P"); // Gönderdiğimiz string XML <KOK><P>aaa</P><P>bbb</P><P>ccc</P>......</KOK> şeklinde olmalı
switch (MetotAdi)
{
case Sabitler.KargolariGetir:
sonucXml = kargolariGetir(lstParam); // Bu metodun içerisini ilgili firmanın servisine göre yazmalıyız.
break;
case Sabitler.FaturalariGetir:
sonucXml = faturalariGetir(lstParam); // Bu metodun içerisini ilgili firmanın servisine göre yazmalıyız.
break;
......
....
...
default:
return sonucXml;
}
}
else
{
sonucXml = "<KOK>Yetkisiz Kullanici.</KOK>";
}
return sonucXml;
}
CANIAS tarafında da, tüm web servis işlemleri için kullanacağımız genel bir sınıf oluşturuyoruz: Adı “WSISLEMLERI” olsun.
Bu Class içinde bir metot oluşturuyoruz: “WCFSERVISCAGIR”.
Bu arkadaş da input olarak çağrılacak metot adını ve string olarak xml parametrelerini alacak.
Geriye de string olarak sonucu dönecek.
Aşağıdaki gibi bir yapıda olacak:
PARAMETERS:
STRING INPMETOTADI,
STRING INPSTRXMLPARAM;
LOCAL:
STRING PARAM1,
STRING PARAM2,
STRING PARAM3,
STRING PARAM4,
STRING OUTSTRXML;
PARAM1 = '50f84daf3a6dfd6a9f20c9f8ef428942';
PARAM2 = INPMETOTADI;
PARAM3 = INPPARAMETRELER;
PARAM4 = 'caniasws.proxyhost:192.168.???.???';
CALLWEBSERVICE 'http://WcfServisAdresi/ServiceAdi.svc?wsdl', 'ErpOperasyon' TO OUTSTRXML WITH PARAM1, PARAM2, PARAM3, PARAM4, PARAM5;
IF (SYS_STATUS) THEN
RETURN SYS_STATUSERROR;
ELSE
RETURN OUTSTRXML;
ENDIF;
Kargoları listeleyen bir ekran yaptığımızı düşünelim.
Sayfaya bir buton ekledik.
Başlangıç ve bitiş tarihlerini alsın ve “Ara” butonuna basınca kayıtları listelesin.
O butonun altına yazacağımız kod aşağıdakine benzer bir şey olmalı:
LOCAL:
STRING METOTADI,
STRING STRXMLPARAM,
STRING WEBSERVISSONUC,
WSISLEMLERI WSISLEM,
TABLE TMPTBL;
METOTADI = 'KargolariGetir'; /* Bu örneğimizde kargo firmasının servisini çağırıp belirli tarih aralığındaki gönderilerimizi listelediğimizi düşünelim. */
STRXMLPARAM = '<KOK><P>ArasKargo</P><P>01.01.2021</P><P>31.01.2021</P></KOK>'; /* İlk parametre kargo firması adı olsun, diğeri ikisi de başlangıç ve bitiş tarihleri olsun. */
WEBSERVISSONUC = WSISLEM.WCFSERVISCAGIR(METOTADI, STRXMLPARAM);
PARSEXML TEXT WEBSERVISSONUC INTO TMPTBL;
LOOP AT TMPTBL
BEGIN
......
....
..
ENDLOOP;
Selamlar.