30-03-2018, Saat: 09:43
(Son Düzenleme: 30-03-2018, Saat: 18:45, Düzenleyen: csunguray.
Sebep: Yanlış şekilde ikinci kez yazılan Giris.ereceteDVO.kisiDVO := KisiDVO.Create; satırı silindi.
)
Kendi programımdan örnek kod. Security Header için daha önce paylaşmış olduğum WSSE_SGK.pas dosyasını kullanmanız gerekli. (https://groups.google.com/forum/#!msg/sa...Lto-iHXG4J bağlantısında var.)
[Ars=delphi]
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;
[/Ars]
[Ars=delphi]
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;
[/Ars]