MEDULA VE ARRAY DEĞER GÖNDERİMİ

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
ZoRan
Üye
Mesajlar: 5
Kayıt: 06 Oca 2009 02:08

MEDULA VE ARRAY DEĞER GÖNDERİMİ

Mesaj gönderen ZoRan »

Merhaba Medula diye bişey çıktı karşıma ve programıma entegre etmem gerek WSDL,DVO bayağı cebelleştim, mantığını çözdüm ama bir yerde takıldım bana yardım edebilecek ustalara şimdiden teşekkür ederim.

Sorunum Şu:
Medula version 3 göre WSDL leri import ettim ve takipKodu alma silme kısımlarını yaptım oldu
ama HizmetKayitGirisiDVO da string ve integer gönderilen kısımlarda tamam ama Array gönderilen kısımlar mesela DigerIslemBilgileriDVO , MuayeneBilgileriDVO gibi alanlara kendi atnımladığım array ları atayamıyorum hata veriyor, DVO ların içersindeki değişkenlere atıyorum gene hata veriyor.

bahsettiğim sorunu aşacak küçük bir kod örneği gönderecek arkadaşlara teşekkür ederim.
karnavalvargel
Üye
Mesajlar: 1
Kayıt: 08 Oca 2009 05:43

Re: MEDULA VE ARRAY DEĞER GÖNDERİMİ

Mesaj gönderen karnavalvargel »

selam kardeş bende bu işle uğraşmaya başladım ama mantığını hala çözemedim eğer senin için bi mahsuru yoksa paylaşabilirmisin provizyon alma gönderme işlemleri nasıl oluyor 1 haftadır uğrasıyorum ama kayda değer bişi bulamaıdm tsk ederim
varyemez
Üye
Mesajlar: 262
Kayıt: 01 Oca 2009 11:00
Konum: Bursa
İletişim:

Re: MEDULA VE ARRAY DEĞER GÖNDERİMİ

Mesaj gönderen varyemez »

selam , ben de bu işle epey kafa yorduktan sonra şöyle bir formül kullanmaya karar verdim ve şimdi rahatım.
Bir defa WSDL THTTPRIO ile çalışmıyor ( yani array şekilleri) . bu Delphi deki bug dan kaynaklanıyor.. Delphi 7 de de Delphi 2007 dede başaramadım. sonunda THTTPReqResp kullanmaya karar verdim direkt. Yani gidecek olan bilgileri kendim XML formata dönüştürüp öyle post edip ve yine gelen XML stream i de parse etmek. Biraz zahmetli ama çözebildiğim için sevinçliyim yine de. POST edilecek yapı mesela şu şekildeydi:

Kod: Tümünü seç

   <DT>A</DT>
			<FR>8680007900019</FR>
			<TO>8680010000010</TO>
			<URUNLER>
				<URUN>
					<GTIN>08680007201246</GTIN>
					<BN>BN01</BN>
					<SN>ZK22</SN>
					<XD>2010-05-22</XD>
				</URUN>             <URUN>
					<GTIN>08680007201246</GTIN>
					<BN>BN01</BN>
					<SN>ZK22</SN>
					<XD>2010-05-22</XD>
				</URUN>
			</URUNLER>  
yani birden fazla sayıda ilacın barkod , serino, son kull. tarihi gibi bilgiler gönderilmesi gerekiyor ve gelen cevap bilgisi de yine böyle array tipte. Bunları cliendataset ten alıp gelen cevabı da yine datasete geçirdim. Bir deneyin , olmazsa kodları da yazarım buradan.. Ya da WSDL adresini verin onun üstünde örnek kod yazarız..
ZoRan
Üye
Mesajlar: 5
Kayıt: 06 Oca 2009 02:08

Re: MEDULA VE ARRAY DEĞER GÖNDERİMİ

Mesaj gönderen ZoRan »

TEST İÇİN WSDL linkleri aşağıda ancak şöyle bir sorun var Medula 2 de genel test için Kullanıcı adı,şifre ve tesis kodu veriliyordu ama Version 3 te yani aşağıdaki WSDL leri test edebilmek için gerçek bir sağlık kuruluşunun şifreleri ve diğer bilgileri gerekiyor. Alacağınız sağlık kuruluşunun sözleşme branşı ne ise sadece o branşlara ait bilgi gönderebiliyorsunuz aksi takdirde uyarı mesajı geliyor.

Varyemez kardeş THTTPIO Çalışıyor senin yaptığın yöntemi denemedim ama bana bu yetiyor.


Hasta Kabul Süreci:
http://saglikt.sgk.gov.tr/medulaws/serv ... mleri.wsdl
Hizmet Kayıt Süreci:
http://saglikt.sgk.gov.tr/medulaws/serv ... mleri.wsdl
Faturalama Süreci:
http://saglikt.sgk.gov.tr/medulaws/serv ... mleri.wsdl
Yan Süreçler:
Rapor Bilgisi Kayıt :
http://saglikt.sgk.gov.tr/medulaws/serv ... mleri.wsdl
Yardımcı web servisler :
http://saglikt.sgk.gov.tr/medulaws/serv ... emler.wsdl
LifeTime
Üye
Mesajlar: 20
Kayıt: 09 Oca 2009 06:59

Re: MEDULA VE ARRAY DEĞER GÖNDERİMİ

Mesaj gönderen LifeTime »

varyemez yazdı:selam , ben de bu işle epey kafa yorduktan sonra şöyle bir formül kullanmaya karar verdim ve şimdi rahatım.
Bir defa WSDL THTTPRIO ile çalışmıyor ( yani array şekilleri) . bu Delphi deki bug dan kaynaklanıyor.. Delphi 7 de de Delphi 2007 dede başaramadım. sonunda THTTPReqResp kullanmaya karar verdim direkt. Yani gidecek olan bilgileri kendim XML formata dönüştürüp öyle post edip ve yine gelen XML stream i de parse etmek. Biraz zahmetli ama çözebildiğim için sevinçliyim yine de. POST edilecek yapı mesela şu şekildeydi:

Kod: Tümünü seç

   <DT>A</DT>
			<FR>8680007900019</FR>
			<TO>8680010000010</TO>
			<URUNLER>
				<URUN>
					<GTIN>08680007201246</GTIN>
					<BN>BN01</BN>
					<SN>ZK22</SN>
					<XD>2010-05-22</XD>
				</URUN>             <URUN>
					<GTIN>08680007201246</GTIN>
					<BN>BN01</BN>
					<SN>ZK22</SN>
					<XD>2010-05-22</XD>
				</URUN>
			</URUNLER>  
yani birden fazla sayıda ilacın barkod , serino, son kull. tarihi gibi bilgiler gönderilmesi gerekiyor ve gelen cevap bilgisi de yine böyle array tipte. Bunları cliendataset ten alıp gelen cevabı da yine datasete geçirdim. Bir deneyin , olmazsa kodları da yazarım buradan.. Ya da WSDL adresini verin onun üstünde örnek kod yazarız..
Selam Varyemez. Bende benzer bir problemle yakşık 15 gündür uğraşıyorum. Benimkisi İlaç Eczacılık Gn.Md. (iegm)'ne İlaç Takip Sistemi bünesinde yapılacak XML veri transferi. Yöntem aynı. Bir WDSL dökümanı var. Bunu Delphi de import ettim. Bana bir .PAS kodu üretti. Bunu Uses başlığı altında programıma dahil ettim Daha sonra tanımlı değişkene parametre olarak istenen bilgileri giriyorum ancak POST edemiyorum. Bana verilen bir kullanıcı adı, Parola ve GTIN numaraları var. Bunları kullanarak yapmaya çalıştım olmadı. Yardım edersen çok sevinirim.
varyemez
Üye
Mesajlar: 262
Kayıt: 01 Oca 2009 11:00
Konum: Bursa
İletişim:

Re: MEDULA VE ARRAY DEĞER GÖNDERİMİ

Mesaj gönderen varyemez »

Bu örnekte HTTPRIO kullanmadığımız için WSDL i import etmeye ve unit içinde kullanmaya gerek yok. ancak yine de import edip bir dosyaya saklamakta fayda var çünkü URL ve servis adlarını buradan alıyoruz. yukarıdaki örnek xml formatını mesela aşağıdaki kodlarla oluşturuyoruz.

Kod: Tümünü seç

var
 Stream: TMemoryStream;
 StrStream: TStringStream;
XMLdata: TStringList;
xml1: Tstringlist;
begin
XMLData := Tstringlist.Create;
xml1:= tstringlist.Create;
XMLData.Clear;
form1.Table1.Open;
form1.Table1.First;
XMLData.Add('<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">');
 XMLData.Add('<SOAP-ENV:Body>');
 XMLData.Add('<m:EczaneMalAlimBildirim xmlns:m="http://its.iegm.gov.tr/bildirim/BildirimReceiver/v1/Alim/Eczane">');
 XMLData.Add('<DT>A</DT>');
 XMLData.Add('<FR>8680007900019</FR>');
 XMLData.Add('<TO>8680010000010</TO>');
 XMLData.Add('<URUNLER>');   // aşağıda veritabanı tablomuzdan karekod bilgilerini çekiyoruz
 while not TABLE1.Eof do
 begin
 XMLData.Add('<URUN>');
 XMLData.Add('<GTIN>'+ Form1.Table1GTIN.Value+'</GTIN>'); //barkod
 XMLData.Add('<BN>'+ Form1.Table1BN.Value+'</BN>');  // batch no
 XMLData.Add('<SN>'+ Form1.Table1SN.Value+'</SN>'); // seri no
 XMLData.Add('<XD>'+ form1.Table1XD.Value+'</XD>');  // son kull tar.   YYYY-MM-DD formda string
 XMLData.Add('</URUN>');
 table1.Next;
 end;
 //table1.Close;
 XMLData.Add('</URUNLER>');
 XMLData.Add('</m:EczaneMalAlimBildirim>');
 XMLData.Add('</SOAP-ENV:Body>');
 XMLData.Add('</SOAP-ENV:Envelope>');  // XML sonu
// memo1.Lines:=XMLData;


Bu XML verisini merak edip bir memo ya yazdırabilirsin.. sonra iş geliyor bunu POST etmeye...

Kod: Tümünü seç


stream:=tmemorystream.Create;
try
 HTTPReqresp1.URL:= 'http://212.174.130.240:8080/ITSWebServices/EczaneMalAlimReceiverService';  // bunu wsdl den aldık
 HTTPReqResp1.UseUTF8InHeader:=true;
 HTTPReqResp1.SoapAction:= 'EczaneMalAlimReceiverService';
 HTTPReqResp1.UserName:='balikliecz1';  //kullanıcı adı ve şifre
 HTTPReqresp1.Password:='şifrexxxxxx';

 HTTPReqresp1.Execute(XMLData.Text,Stream);  // burada oluşturduğumuz xml i post ediyoruz. cevap Stream içinde dönecek
 Strstream:= Tstringstream.Create('');
 try
  Strstream.CopyFrom(stream,0);
 Memo2.Text:= Strstream.DataString;   // gelen cevabı memo içinde görebilirsin.  bunu dosyaya yazdırıp sonra bir datasete alacaz
  xml1.Add(memo2.Text);
  xml1.SaveToFile('mal_alim_cevap.xml');  // gelen cevap bu dosyada
  finally
 strstream.Free;
 end;

finally
stream.Destroy;
end;
// bu xml i datasette görmek için kapatıp açmak yeterli
clientdataset1.Active:=false;

clientdataset1.Active:=true;
end;
bu da taslak görüntü. gelen cevaptaki uyarı kodlarına dikkat.
http://www.baliklieczanesi.com/alimbild.jpg

Kolay gelsin..
Ecz. Mehmet Turan Oruç
LifeTime
Üye
Mesajlar: 20
Kayıt: 09 Oca 2009 06:59

Re: MEDULA VE ARRAY DEĞER GÖNDERİMİ

Mesaj gönderen LifeTime »

Bu hızlı ve detaylı cevabınız için çok teşekkür ederim.
ZoRan
Üye
Mesajlar: 5
Kayıt: 06 Oca 2009 02:08

Re: MEDULA VE ARRAY DEĞER GÖNDERİMİ

Mesaj gönderen ZoRan »

MEDULA 3 te RaporBilgisiDVO ile gönderimin kodu lazım.
Cevapla