Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
NewMember
Üye
Mesajlar: 990 Kayıt: 29 Haz 2005 06:57
Konum: Bursa
Mesaj
gönderen NewMember » 28 Mar 2018 03:56
Arkadaşlar merhaba;
Yazılımımızda e reçete gönderimlerini normalde c# ile yazılmış bir uygulamadan gönderiyoruz.Ancak bir yazılımımızda delphiden göndermemiz gerekti.
Aşağıda kod örneği var.
Ama Showmessage den sonra access violation veriyor.Sanırım cevap nesnesi oluşmuyor.Yani gönderim oluşmuyor.
Bu konuyla ilgilenen arkadaşlardan yardım bekliyuorum.Örnekte imzası gönderim mevcut.Şimdilik bu yeterli.
Yardım edecek arkadaşlara şimdiden teşekkürler.
Not:TLS 1.2 ayarını delphi den yapılacak bir kod yada properties bulamadım.Ama gönderim yaptığımız pc windows 10.İnternet explorer seçeneklerinden sadece TLS 1.2 kullan işaretledik.
Kod: Tümünü seç
procedure TForm1.btnReceteGonderClick(Sender: TObject);
var
Servis: SaglikTesisiReceteIslemleri;
ReceteGondermeIstek: ereceteGirisIstekDVO;
IlacListesi: Array_Of_ereceteIlacDVO;
Sonuc: ereceteGirisResponse;
EreceteGirisNesnesi: ereceteGiris;
Ilac1, Ilac2: ereceteIlacDVO;
Recete: ereceteDVO;
cevap: ereceteGirisCevapDVO;
UserName: string;
Parola: string;
TesisKodu: integer;
doktorTcNo: integer;
TcNo: integer;
const
ReceteIslemleriServiceWS = 'https://medeczane.sgk.gov.tr/medula/eczane/saglikTesisiReceteIslemleriWS';
begin
UserName := 'XXX'; //Gerçekte doğru bilgiler gönderiliyor.
TesisKodu := 12345;//Gerçekte doğru bilgiler gönderiliyor.
Parola := 'XXXX';//Gerçekte doğru bilgiler gönderiliyor.
doktorTcNo := 12345;//Gerçekte doğru bilgiler gönderiliyor.
TcNo := 12345;//Gerçekte doğru bilgiler gönderiliyor.
HTTPRIO1.HTTPWebNode.GetHTTPReqResp.UserName := UserName;
HTTPRIO1.HTTPWebNode.GetHTTPReqResp.Password := Parola;
HTTPRIO1.HTTPWebNode.UseUTF8InHeader := True;
Servis := GetSaglikTesisiReceteIslemleri(False, ReceteIslemleriServiceWS, HTTPRIO1);
Ilac1 := ereceteIlacDVO.Create;
Ilac1.adet := 1;
Ilac1.barkod := 8699522095605;
Ilac1.ilacAdi := 'AUGMENTIN BID 625 MG 14 FILMTABLET';
Ilac1.kullanimDoz1 := 1;
Ilac1.kullanimDoz2 := 1;
Ilac1.kullanimPeriyotBirimi := 3;
Ilac1.kullanimSekli := 1;
Ilac1.kullanimPeriyot := 1;
IlacListesi := [Ilac1];
ReceteGondermeIstek := ereceteGirisIstekDVO.Create;
ReceteGondermeIstek.doktorTcKimlikNo := doktorTcNo;
ReceteGondermeIstek.tesisKodu := TesisKodu;
Recete := ereceteDVO.Create;
Recete.doktorBransKodu := 9999;
Recete.doktorTcKimlikNo := doktorTcNo;
Recete.tcKimlikNo := TcNo;
Recete.receteAltTuru := 1;
Recete.receteTuru := 1;
Recete.tesisKodu := TesisKodu;
Recete.takipNo := '0';
Recete.ereceteIlacListesi := IlacListesi;
ReceteGondermeIstek.ereceteDVO := Recete;
EreceteGirisNesnesi := ereceteGiris.Create;
EreceteGirisNesnesi.arg0 := ReceteGondermeIstek;
Sonuc := Servis.ereceteGiris(EreceteGirisNesnesi);
cevap := ereceteGirisCevapDVO.Create;
cevap := Sonuc.ereceteGirisReturn;
ShowMessage('1');
ShowMessage(Cevap.sonucKodu);
ShowMessage(Cevap.sonucMesaji);
end;
ertank
Kıdemli Üye
Mesajlar: 1650 Kayıt: 12 Eyl 2015 12:45
Mesaj
gönderen ertank » 28 Mar 2018 06:32
Merhaba, kullandığınız wsdl den üretilmiş pas dosyasını da paylaşabilir misiniz?
ertank
Kıdemli Üye
Mesajlar: 1650 Kayıt: 12 Eyl 2015 12:45
Mesaj
gönderen ertank » 29 Mar 2018 01:16
Borçok farklı alternatif denedim. Kişi bilgisi gönderilmediğini farkettim ve ekledim ancak "Sonuc.ereceteGirisReturn" bilgisi her zaman NULL olarak dönüyor.
Bu durumda aklıma gelen web servis ile ilgili dökümanı incelemek. Bir ihtimal eksik bilgi gönderildiği için cevap gelmiyor olabilir. Dışarıdan yapılabilecek sızma vs karşı önlem almak adına hata mesajı döndürmüyor olabilir sistem.
Ben kullanmıyorum, ancak SOAPUI ile denemeler yaparak çalışan bir XML tespit edebilirseniz Fidler ile kendi gönderdiğiniz XML dosyasını inceleyip aradaki farkları bularak sonuca ulaşmanız mümkün olabilir.
NewMember
Üye
Mesajlar: 990 Kayıt: 29 Haz 2005 06:57
Konum: Bursa
Mesaj
gönderen NewMember » 29 Mar 2018 02:51
@ertank ilgilendiğiniziçin gerçekten minnettarım.Doğru şekilde giden xmli c# exeden gidendan alabilirim.
Tamamen bu konuda yetersiz olduğumdan soruyorum.Bu HTTPRIO ile gönderdiğim XML i nasıl alabilirim.Bu konuda da yardımcı olabilirseniz çok memnun olurum.
Birde kişi bilgisi gitmiyor demişsiniz ya.Onun haricinde kodda eksik yada düzeltilmesi gereken bir yer varmıdır?
Teşekkürler...
ertank
Kıdemli Üye
Mesajlar: 1650 Kayıt: 12 Eyl 2015 12:45
Mesaj
gönderen ertank » 29 Mar 2018 05:12
Benim kullandığım kod aşağıdaki gibi:
Kod: Tümünü seç
var
Servis: SaglikTesisiReceteIslemleri;
IlacListesi: Array_Of_ereceteIlacDVO;
TaniListesi: Array_Of_ereceteTaniDVO;
AciklamaListesi: Array_Of_ereceteAciklamaDVO;
Sonuc: ereceteGirisResponse;
EreceteGirisNesnesi: ereceteGiris;
UserName: string;
Parola: string;
TesisKodu: integer;
doktorTcNo: integer;
TcNo: integer;
const
ReceteIslemleriServiceWS = 'https://medeczane.sgk.gov.tr/medula/eczane/saglikTesisiReceteIslemleriWS';
begin
UserName := 'XXX'; //Gerçekte doğru bilgiler gönderiliyor.
TesisKodu := 12345;//Gerçekte doğru bilgiler gönderiliyor.
Parola := 'XXXX';//Gerçekte doğru bilgiler gönderiliyor.
doktorTcNo := 12345;//Gerçekte doğru bilgiler gönderiliyor.
TcNo := 12345;//Gerçekte doğru bilgiler gönderiliyor.
HTTPRIO1.HTTPWebNode.GetHTTPReqResp.UserName := UserName;
HTTPRIO1.HTTPWebNode.GetHTTPReqResp.Password := Parola;
HTTPRIO1.HTTPWebNode.UseUTF8InHeader := True;
Servis := GetSaglikTesisiReceteIslemleri(False, ReceteIslemleriServiceWS, HTTPRIO1);
Sonuc := nil;
EreceteGirisNesnesi := ereceteGiris.Create;
try
EreceteGirisNesnesi.arg0 := ereceteGirisIstekDVO.Create;
EreceteGirisNesnesi.arg0.doktorTcKimlikNo := doktorTcNo;
EreceteGirisNesnesi.arg0.tesisKodu := TesisKodu;
EreceteGirisNesnesi.arg0.ereceteDVO := ereceteDVO.Create;
EreceteGirisNesnesi.arg0.ereceteDVO.doktorBransKodu := 9999;
EreceteGirisNesnesi.arg0.ereceteDVO.doktorTcKimlikNo := doktorTcNo;
EreceteGirisNesnesi.arg0.ereceteDVO.tcKimlikNo := TcNo;
EreceteGirisNesnesi.arg0.ereceteDVO.receteAltTuru := 1;
EreceteGirisNesnesi.arg0.ereceteDVO.receteTuru := 1;
EreceteGirisNesnesi.arg0.ereceteDVO.tesisKodu := TesisKodu;
EreceteGirisNesnesi.arg0.ereceteDVO.takipNo := '0';
EreceteGirisNesnesi.arg0.ereceteDVO.kisiDVO := kisiDVO.Create();
EreceteGirisNesnesi.arg0.ereceteDVO.kisiDVO.adi := 'testad';
EreceteGirisNesnesi.arg0.ereceteDVO.kisiDVO.cinsiyeti := 'E';
EreceteGirisNesnesi.arg0.ereceteDVO.kisiDVO.dogumTarihi := '1982-01-01';
EreceteGirisNesnesi.arg0.ereceteDVO.kisiDVO.soyadi := 'testsoyad';
EreceteGirisNesnesi.arg0.ereceteDVO.kisiDVO.tcKimlikNo := 1;
SetLength(IlacListesi, 1);
IlacListesi[0] := ereceteIlacDVO.Create();
IlacListesi[0].adet := 1;
IlacListesi[0].barkod := 8699522095605;
IlacListesi[0].ilacAdi := 'AUGMENTIN BID 625 MG 14 FILMTABLET';
IlacListesi[0].kullanimDoz1 := 1;
IlacListesi[0].kullanimDoz2 := 1;
IlacListesi[0].kullanimPeriyotBirimi := 3;
IlacListesi[0].kullanimSekli := 1;
IlacListesi[0].kullanimPeriyot := 1;
EreceteGirisNesnesi.arg0.ereceteDVO.ereceteIlacListesi := IlacListesi;
SetLength(TaniListesi, 0);
// Boş tanı listesi gönderiliyor
EreceteGirisNesnesi.arg0.ereceteDVO.ereceteTaniListesi := TaniListesi;
SetLength(AciklamaListesi, 0);
// Boş açıklama listesi gönderiliyor
EreceteGirisNesnesi.arg0.ereceteDVO.ereceteAciklamaListesi := AciklamaListesi;
Sonuc := Servis.ereceteGiris(EreceteGirisNesnesi);
if (Sonuc <> nil) and (Sonuc.ereceteGirisReturn <> nil) then
begin
ShowMessage('sonuc kodu: ' + Sonuc.ereceteGirisReturn.sonucKodu + sLineBreak +
'sonuc mesaji:' + Sonuc.ereceteGirisReturn.sonucMesaji);
end
else
begin
ShowMessage('Sonuc NULL');
end;
finally
IlacListesi[0].Free();
EreceteGirisNesnesi.arg0.ereceteDVO.kisiDVO.Free();
Sonuc.Free();
end;
NewMember
Üye
Mesajlar: 990 Kayıt: 29 Haz 2005 06:57
Konum: Bursa
Mesaj
gönderen NewMember » 29 Mar 2018 05:29
İlk gönderdiğim kodda eksikler varmış.
Düzelttim.
Kodun son hali:
Kod: Tümünü seç
HTTPRIO1.HTTPWebNode.GetHTTPReqResp.UserName := UserName;
HTTPRIO1.HTTPWebNode.GetHTTPReqResp.Password := Parola;
HTTPRIO1.HTTPWebNode.UseUTF8InHeader := True;
Servis := GetSaglikTesisiReceteIslemleri(False, ReceteIslemleriServiceWS, HTTPRIO1);
//1.İlaç Nesnesini Oluştur İstersen Her ilaç için 1 nesne oluşturmalısın
Ilac1 := ereceteIlacDVO.Create;
//Bilgilerini Gir
Ilac1.adet := 1;
Ilac1.barkod := 8699522095605;
Ilac1.ilacAdi := 'AUGMENTIN BID 625 MG 14 FILMTABLET';
Ilac1.kullanimDoz1 := 1;
Ilac1.kullanimDoz2 := 1;
Ilac1.kullanimPeriyotBirimi := 3;
Ilac1.kullanimSekli := 1;
Ilac1.kullanimPeriyot := 1;
//İlaç 1 i İlaçListesi nesnesinin içine gönder
IlacListesi := [Ilac1];
//Reçete Göndermek İçin Nesne Oluştur
ReceteGondermeIstek := ereceteGirisIstekDVO.Create;
//1.Tanı nesnesini oluştur ve Bilgilerini Gir Her Tanı İçin ayrı Bir Nesne Oluşturmalısın.
Tani:=ereceteTaniDVO.Create;
tani.taniKodu:='J03.9';
//1.Tanıyı TanıListesi nesnesinin içine gönder...
TaniListesi:=[Tani];
ReceteGondermeIstek.doktorTcKimlikNo := doktorTcNo;
ReceteGondermeIstek.tesisKodu := TesisKodu;
Recete := ereceteDVO.Create;
Recete.doktorBransKodu := 9999;
Recete.doktorTcKimlikNo := doktorTcNo;
Recete.tcKimlikNo := TcNo;
Recete.receteAltTuru := 1;
Recete.receteTuru := 1;
Recete.protokolNo:='156';
Recete.receteTarihi:='29.03.2018';
Recete.tesisKodu := TesisKodu;
Recete.takipNo := '0';
//Reçeteye Tanı Bilgisini Ver
Recete.ereceteTaniListesi:=TaniListesi;
//Reçeteye İlaç Listesi Bilgisini Ver
Recete.ereceteIlacListesi:=ilaclistesi;
ReceteGondermeIstek.ereceteDVO := Recete;
EreceteGirisNesnesi := ereceteGiris.Create;
EreceteGirisNesnesi.arg0 := ReceteGondermeIstek;
Sonuc := Servis.ereceteGiris(EreceteGirisNesnesi);
cevap := ereceteGirisCevapDVO.Create;
cevap := Sonuc.ereceteGirisReturn;
ShowMessage(Cevap.sonucKodu);
ShowMessage(Cevap.sonucMesaji);
OnBefore
Kod: Tümünü seç
<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://www.w3.org/2003/05/soap-encoding">
<SOAP-ENV:Body xmlns:NS1="http://servisler.ws.eczane.gss.sgk.gov.tr" SOAP-ENV:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<NS1:ereceteGiris><parameters SOAP-ENC:id="1" xsi:type="NS1:ereceteGiris"><arg0 SOAP-ENC:id="2" xsi:type="NS1:ereceteGirisIstekDVO">
<ereceteDVO SOAP-ENC:id="3" xsi:type="NS1:ereceteDVO">
<protokolNo xsi:type="xsd:string">156</protokolNo>
<provizyonTipi xsi:type="xsd:int">0</provizyonTipi>
<receteAltTuru xsi:type="xsd:int">1</receteAltTuru>
<receteTarihi xsi:type="xsd:string">29.03.2018</receteTarihi>
<receteTuru xsi:type="xsd:int">1</receteTuru>
<takipNo xsi:type="xsd:string">0</takipNo>
<tcKimlikNo xsi:type="xsd:long">685258514</tcKimlikNo>
<tesisKodu xsi:type="xsd:int">11349903</tesisKodu>
<doktorBransKodu xsi:type="xsd:int">9999</doktorBransKodu>
<doktorSertifikaKodu xsi:type="xsd:int">0</doktorSertifikaKodu>
<item SOAP-ENC:id="4" xsi:type="NS1:ereceteIlacDVO">
<adet xsi:type="xsd:int">1</adet>
<barkod xsi:type="xsd:long">8699522095605</barkod>
<ilacAdi xsi:type="xsd:string">AUGMENTIN BID 625 MG 14 FILMTABLET</ilacAdi>
<kullanimDoz1 xsi:type="xsd:int">1</kullanimDoz1>
<kullanimPeriyotBirimi xsi:type="xsd:int">3</kullanimPeriyotBirimi>
<kullanimSekli xsi:type="xsd:int">1</kullanimSekli>
<kullanimDoz2 xsi:type="xsd:double">1</kullanimDoz2>
<kullanimPeriyot xsi:type="xsd:int">1</kullanimPeriyot>
</item>
<item SOAP-ENC:id="5" xsi:type="NS1:ereceteTaniDVO">
<taniKodu xsi:type="xsd:string">J03.9</taniKodu>
</item>
<doktorTcKimlikNo xsi:type="xsd:long">45245265</doktorTcKimlikNo>
</ereceteDVO>
<tesisKodu xsi:type="xsd:int">11349903</tesisKodu>
<doktorTcKimlikNo xsi:type="xsd:long">45245265</doktorTcKimlikNo>
</arg0></parameters></NS1:ereceteGiris></SOAP-ENV:Body></SOAP-ENV:Envelope>
OnAfter
Kod: Tümünü seç
<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soapenv:Header/><soapenv:Body><ns2:ereceteGirisResponse xmlns:ns2="http://servisler.ws.eczane.gss.sgk.gov.tr"><ereceteGirisReturn><sonucKodu>9999</sonucKodu><sonucMesaji>Sistemde beklenmeyen bir hata olustu Detay: Sistem Hatasi</sonucMesaji></ereceteGirisReturn></ns2:ereceteGirisResponse></soapenv:Body></soapenv:Envelope>
XML Bu şekilde dönüyor.
TCler doğru.Bilinçli değiştirdim.Ancak burda username ve parola yok.Olması gerekiyromuydu?
Sonuç aynı.Yine aynı.
csunguray
Üye
Mesajlar: 855 Kayıt: 09 Ara 2006 05:08
Konum: Adana
İletişim:
Mesaj
gönderen csunguray » 29 Mar 2018 06:58
Security Header kullanmıyor musunuz?
C. Sunguray
csunguray at netbilisim.kom
Net Bilişim Hizmetleri
Sıradan her programcı bilgisayarın anlayabileceği kodlar yazabilir.
Sadece iyi programcılar insanların da anlayabileceği kodlar yazarlar.
Martin Fowler (
http://martinfowler.com/ )
ertank
Kıdemli Üye
Mesajlar: 1650 Kayıt: 12 Eyl 2015 12:45
Mesaj
gönderen ertank » 29 Mar 2018 07:11
Geriye dönen XML içinde "sonucKodu" ve "sonucMesaji" bilgileri mevcut.
1- Acaba oluşturduğunuz WSDL dosyasında bir sorun olabilir mi?
2- Kullandığınız Delphi sürümü nedir?
3- Create edilen nesnelerin bazılarını manuel olarak Free etmelisiniz. Yoksa hafıza kaçağı oluşur. Nitekim sizin kodunuzda hafıza kaçakları mevcut.
4- C# ile aynı bilgileri kullandığınızda giden XML bilgisini de paylaşabilir misiniz?
NewMember
Üye
Mesajlar: 990 Kayıt: 29 Haz 2005 06:57
Konum: Bursa
Mesaj
gönderen NewMember » 29 Mar 2018 07:41
1.WDSL dosyasını manuel olarak import ettim.Google gruplarda bu konuda epey bir yazışma var.Muhtemelen görmüşsünüzdür.Direkt olarak siteden import etmiyor.İndirip pc den import ediyorum.
2.XE 10
3.Free işleminide yaptım ama sonuç değişmedi.
4.C# projesi sadece exe.Biz o exeye kendi oluşturduğumuz xmli gönderiyoruz.(Delphiden) O exe parse edip gönderiyor.Dolayısıyla c# tan türetilen xmli görme şansım maalesef yok.
İlginiz için tekrar teşekkür ederim...
csunguray
Üye
Mesajlar: 855 Kayıt: 09 Ara 2006 05:08
Konum: Adana
İletişim:
Mesaj
gönderen csunguray » 30 Mar 2018 09:36
Kendi programımdan örnek kod. Sizlerin sorunu büyük ihtimalle Security Header kullanmıyor olmanız. Bunun için daha önce paylaşmış olduğum WSSE_SGK.pas dosyasını kullanmanız gerekli. (
https://groups.google.com/forum/#!msg/s ... Lto-iHXG4J bağlantısında var.)
Kod: Tümünü seç
procedure TFormReceteler.ActionMedulayaGonderExecute(Sender: TObject);
var
Servis : SaglikTesisiReceteIslemleri;
Giris : EreceteGirisIstekDVO;
Sonuc : EreceteGirisCevapDVO;
const
WS_URL = 'https://medeczane.sgk.gov.tr/medula/eczane/saglikTesisiReceteIslemleriWS';
function GetIlacAckList: Array_Of_ereceteIlacAciklamaDVO;
var
Sayac: Integer;
begin
try
QIlacAciklama.Filter := 'SATIR_REF = ' + IntToSTr(QIlaclar.FieldByName('REF').AsInteger);
QIlacAciklama.Filtered := True;
Sayac := 0;
SetLength(Result, Sayac);
QIlacAciklama.First;
while not QIlacAciklama.Eof do
begin
Inc(Sayac);
SetLength(Result, Sayac);
Result[Sayac - 1] := EreceteIlacAciklamaDVO.Create;
Result[Sayac - 1].aciklamaTuru := QIlacAciklama.FieldByName('ACIKLAMA_TURU').AsInteger;
Result[Sayac - 1].aciklama := QIlacAciklama.FieldByName('ACIKLAMA').AsString;
QIlacAciklama.Next;
end;
finally
QIlacAciklama.Filtered := False;
end;
end;
function GetIlacList: Array_Of_ereceteIlacDVO;
var
Sayac: Integer;
begin
Sayac := 0;
SetLength(Result, Sayac);
QIlaclar.First;
while not QIlaclar.Eof do
begin
Inc(Sayac);
SetLength(Result, Sayac);
Result[Sayac - 1] := EreceteIlacDVO.Create;
Result[Sayac - 1].adet := QIlaclar.FieldByName('ADET').AsInteger;
Result[Sayac - 1].barkod := StrToInt64(QIlaclar.FieldByName('KOD').AsString);
Result[Sayac - 1].ilacAdi := QIlaclar.FieldByName('ACIKLAMA').AsString;
Result[Sayac - 1].kullanimDoz1 := QIlaclar.FieldByName('KULLANIM_DOZ1').AsInteger;
Result[Sayac - 1].kullanimPeriyotBirimi := QIlaclar.FieldByName('KULLANIM_PERIYOT_BIRIMI').AsInteger;
Result[Sayac - 1].kullanimSekli := QIlaclar.FieldByName('KULLANIM_SEKLI').AsInteger;
Result[Sayac - 1].ereceteIlacAciklamaListesi := GetIlacAckList;
Result[Sayac - 1].kullanimDoz2 := QIlaclar.FieldByName('KULLANIM_DOZ2').AsFloat;
Result[Sayac - 1].kullanimPeriyot := QIlaclar.FieldByName('KULLANIM_PERIYOT').AsInteger;
Result[Sayac - 1].geriOdemeKapsaminda := QIlaclar.FieldByName('GERI_ODEME_KAPSAMINDA').AsString;
QIlaclar.Next;
end;
end;
function GetTaniList: SaglikTesisiReceteIslemleriWS.Array_Of_ereceteTaniDVO;
var
Sayac: Integer;
begin
Sayac := 0;
SetLength(Result, Sayac);
QTanilar.First;
while not QTanilar.Eof do
begin
Inc(Sayac);
SetLength(Result, Sayac);
Result[Sayac - 1] := SaglikTesisiReceteIslemleriWS.EreceteTaniDVO.Create;
Result[Sayac - 1].taniKodu := QTanilar.FieldByName('KOD').AsString;
Result[Sayac - 1].taniAdi := QTanilar.FieldByName('ACIKLAMA').AsString;
QTanilar.Next;
end;
end;
function GetReceteAck: Array_Of_ereceteAciklamaDVO;
var
Sayac: Integer;
begin
Sayac := 0;
SetLength(Result, Sayac);
QReceteAciklama.First;
while not QReceteAciklama.Eof do
begin
Inc(Sayac);
SetLength(Result, Sayac);
Result[Sayac - 1] := EreceteAciklamaDVO.Create;
Result[Sayac - 1].aciklamaTuru := QReceteAciklama.FieldByName('ACIKLAMA_TURU').AsInteger;
Result[Sayac - 1].aciklama := QReceteAciklama.FieldByName('ACIKLAMA').AsString;
QReceteAciklama.Next;
end;
end;
begin
Screen.Cursor := crSQLWait;
try
if QRecete.FieldByName('ERECETE_NO').AsString > '' then raise Exception.Create('Bu reçete zaten medulaya gönderilmiş!');
if QRecete.FieldByName('DR_TCKIMLIK').AsString = '' then raise Exception.Create('Doktorun TC kimlik numarası girilmemiş!');
if QRecete.FieldByName('DR_ERECETE_SIFRE').AsString = '' then raise Exception.Create('Doktorun e-reçete şifresi girilmemiş!');
if QRecete.FieldByName('DR_BRANS').AsString = '' then raise Exception.Create('Doktorun branşı girilmemiş!');
DetayYukle; // Burada reçeteye ait satır kayıtları (İlaç, tanı vs.) okunuyor
HTTPRIO1.HTTPWebNode.GetHTTPReqResp.UserName := QRecete.FieldByName('DR_TCKIMLIK').AsString;
HTTPRIO1.HTTPWebNode.GetHTTPReqResp.Password := QRecete.FieldByName('DR_ERECETE_SIFRE').AsString;
HTTPRIO1.HTTPWebNode.UseUTF8InHeader := True;
Giris := nil;
Sonuc := nil;
Servis := GetSaglikTesisiReceteIslemleri(False, WS_URL, HTTPRIO1);
Giris := EreceteGirisIstekDVO.Create;
Giris.tesisKodu := CurrentParam.M3_Tesis_Kodu;
Giris.doktorTcKimlikNo := StrToInt64Def(QRecete.FieldByName('DR_TCKIMLIK').AsString, -1);
Giris.ereceteDVO := EreceteDVO.Create;
Giris.ereceteDVO.protokolNo := QRecete.FieldByName('DEFTER_KAYIT_NO').AsString;
Giris.ereceteDVO.provizyonTipi := QRecete.FieldByName('PROVIZYON_TIPI').AsInteger;
Giris.ereceteDVO.receteAltTuru := QRecete.FieldByName('RECETE_ALT_TURU').AsInteger;
Giris.ereceteDVO.receteTarihi := FormatDateTime('dd.mm.yyyy', QRecete.FieldByName('RECETE_TARIHI').AsDateTime);
Giris.ereceteDVO.receteTuru := QRecete.FieldByName('RECETE_TURU').AsInteger;
Giris.ereceteDVO.takipNo := QRecete.FieldByName('MEDULA_TAKIP_NO').AsString;
Giris.ereceteDVO.tcKimlikNo := StrToInt64Def(QRecete.FieldByName('TCKIMLIK').AsString, -1);
Giris.ereceteDVO.tesisKodu := CurrentParam.M3_Tesis_Kodu;
Giris.ereceteDVO.seriNo := QRecete.FieldByName('SERI_NO').AsString;
Giris.ereceteDVO.doktorBransKodu := QRecete.FieldByName('DR_BRANS').AsInteger;
Giris.ereceteDVO.doktorSertifikaKodu := QRecete.FieldByName('SERTIFIKA_KODU').AsInteger;
Giris.ereceteDVO.kisiDVO := KisiDVO.Create;
Giris.ereceteDVO.kisiDVO.adi := QRecete.FieldByName('HASTA_ADI').AsString;
Giris.ereceteDVO.kisiDVO.cinsiyeti := QRecete.FieldByName('CINSIYET').AsString;
Giris.ereceteDVO.kisiDVO.dogumTarihi := FormatDateTime('dd.mm.yyyy', QRecete.FieldByName('DOGTRH').AsDateTime);
Giris.ereceteDVO.kisiDVO.soyadi := QRecete.FieldByName('HASTA_SOYADI').AsString;
Giris.ereceteDVO.kisiDVO.tcKimlikNo := StrToInt64Def(QRecete.FieldByName('TCKIMLIK').AsString, -1);
//Giris.ereceteDVO.ereceteNo := '';
Giris.ereceteDVO.ereceteIlacListesi := GetIlacList;
Giris.ereceteDVO.ereceteTaniListesi := GetTaniList;
Giris.ereceteDVO.ereceteAciklamaListesi := GetReceteAck;
Giris.ereceteDVO.doktorAdi := QRecete.FieldByName('DR_ADI').AsString;
Giris.ereceteDVO.doktorSoyadi := QRecete.FieldByName('DR_SOYADI').AsString;
Giris.ereceteDVO.doktorTcKimlikNo := StrToInt64Def(QRecete.FieldByName('DR_TCKIMLIK').AsString, -1);
// Giris.ereceteDVO.yatanHastaOnayiBekliyor := '';
// Giris.ereceteDVO.ehuOnayiBekliyor := '';
SetSecurityHeader2(Servis, QRecete.FieldByName('DR_TCKIMLIK').AsString, QRecete.FieldByName('DR_ERECETE_SIFRE').AsString);
try
Sonuc := Servis.ereceteGiris(Giris);
except
on E: Exception do
begin
ShowMessage('HATA OLUŞTU: '+ E.Message); // Exception'ın ürettiği mesajı görüntüle
raise;
end;
end;
if StrToIntDef(Sonuc.sonucKodu, -1) <> 0 then
begin
raise Exception.Create('MEDULA: (' + Sonuc.sonucKodu + ') ' + Sonuc.sonucMesaji);
end;
KayitGuncelle; // Burada veritabanı güncellenecek
ShowMessage('Reçete medulaya gönderildi!');
finally
Screen.Cursor := crDefault;
if Giris <> nil then Giris.Free;
if Sonuc <> nil then Sonuc.Free;
end;
end;
En son
csunguray tarafından 30 Mar 2018 06:47 tarihinde düzenlendi, toplamda 2 kere düzenlendi.
C. Sunguray
csunguray at netbilisim.kom
Net Bilişim Hizmetleri
Sıradan her programcı bilgisayarın anlayabileceği kodlar yazabilir.
Sadece iyi programcılar insanların da anlayabileceği kodlar yazarlar.
Martin Fowler (
http://martinfowler.com/ )
ertank
Kıdemli Üye
Mesajlar: 1650 Kayıt: 12 Eyl 2015 12:45
Mesaj
gönderen ertank » 30 Mar 2018 12:16
csunguray yazdı: ↑ 30 Mar 2018 09:36
Kod: Tümünü seç
Giris.ereceteDVO.kisiDVO := KisiDVO.Create; // ilk kullanım
Giris.ereceteDVO.kisiDVO.adi := QRecete.FieldByName('HASTA_ADI').AsString;
Giris.ereceteDVO.kisiDVO.cinsiyeti := QRecete.FieldByName('CINSIYET').AsString;
Giris.ereceteDVO.kisiDVO.dogumTarihi := FormatDateTime('dd.mm.yyyy', QRecete.FieldByName('DOGTRH').AsDateTime);
Giris.ereceteDVO.kisiDVO.soyadi := QRecete.FieldByName('HASTA_SOYADI').AsString;
Giris.ereceteDVO.kisiDVO.tcKimlikNo := StrToInt64Def(QRecete.FieldByName('TCKIMLIK').AsString, -1);
//Giris.ereceteDVO.ereceteNo := '';
Giris.ereceteDVO.kisiDVO := KisiDVO.Create; // ikinci kullanım
Merhaba, bilgi ve paylaşım için teşekkürler.
Örnek kod içinde iki kez "KisiDVO.Create" kullanmanızın belli bir sebebi var mı acaba?
csunguray
Üye
Mesajlar: 855 Kayıt: 09 Ara 2006 05:08
Konum: Adana
İletişim:
Mesaj
gönderen csunguray » 30 Mar 2018 01:30
Kod hatası gibi... Şimdi mesajdan düzeltiyorum.
C. Sunguray
csunguray at netbilisim.kom
Net Bilişim Hizmetleri
Sıradan her programcı bilgisayarın anlayabileceği kodlar yazabilir.
Sadece iyi programcılar insanların da anlayabileceği kodlar yazarlar.
Martin Fowler (
http://martinfowler.com/ )