HTTPRIO1 bileşeninde gönderilen XML i nasıl görüntüleriz?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
csunguray
Üye
Mesajlar: 855
Kayıt: 09 Ara 2006 05:08
Konum: Adana
İletişim:

HTTPRIO1 bileşeninde gönderilen XML i nasıl görüntüleriz?

Mesaj gönderen csunguray »

SOAP ile web servisi kullanırken HTTPRIO1 bileşeni tarafından gönderilen ve cevap olarak gelen XML kodunu nasıl görüntüleriz ve/veya değiştirebiliriz?
En son csunguray tarafından 06 Eki 2012 08:46 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/)
Kullanıcı avatarı
csunguray
Üye
Mesajlar: 855
Kayıt: 09 Ara 2006 05:08
Konum: Adana
İletişim:

Re: HTTPRIO1 bileşeninde gönderilen XML i nasıl görüntüleriz

Mesaj gönderen csunguray »

HTTPRIO1 bileşeni ile web servislerini çağırırken OnBeforeExecute eventı içerisinde gönderilen XML kodunu elde edebilir ve gönderilmeden önce bu XML kodu üzerinde değişiklik yapabilir hatta bu XML kodunu sıfırdan kendimiz oluşturabiliriz.

Aşağıdaki örnekte yapılan bir SOAP çağrısında gönderilecek XML kodu tamamen yeniden oluşturulmuş ve bizim oluşturduğumuz XML kodunun gönderilmesi sağlanmıştır.

Kod: Tümünü seç

procedure TForm1.HTTPRIO1BeforeExecute(const MethodName: string;
  SOAPRequest: TStream);
var
  StrList1: TStringList;
begin
  StrList1 := TStringList.Create;
  try
    SOAPRequest.Position := 0;
    StrList1.LoadFromStream(SOAPRequest);
    if MethodName = 'BlaBla' then
    begin
      StrList1.Clear;
      StrList1.Add('<?xml version="1.0" encoding="UTF-8"?>');
      StrList1.Add('<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:a="http://www.w3.org/2005/08/addressing" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">');
      StrList1.Add('   <s:Header>');
      StrList1.Add('      <o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">');
      StrList1.Add('         <o:UsernameToken u:Id="uuid-b74abe12-c52d-4b40-a26c-d5610fa14225-2">');
      StrList1.Add('            <o:Username>' + FalanUser + '</o:Username>');
      StrList1.Add('            <o:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">' + FalanSifre + '</o:Password>');
      StrList1.Add('         </o:UsernameToken>');
      StrList1.Add('      </o:Security>');
      StrList1.Add('   </s:Header>');
      StrList1.Add('   <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">');
      StrList1.Add('      <MCCI_IN000001TR01 xmlns="urn:hl7-org:v3">');
      StrList1.Add('         <id root="2.16.840.1.113883.3.129.2.1.2" extension="858b0066-fdec-494f-b5af-e8e0f7e8d671"/>');
      StrList1.Add('         <creationTime value="' + FormatDateTime('yyyymmddhhnnss', Now) + '"/>');
      StrList1.Add('         <responseModeCode code="Q"/>');
      StrList1.Add('         <interactionId root="2.16.840.1.113883.3.129.2.1.1" extension="MCCI_IN000001TR01"/>');
      StrList1.Add('         <processingCode code="P"/>');
      StrList1.Add('         <processingModeCode code="T"/>');
      StrList1.Add('         <acceptAckCode code="AL"/>');
      StrList1.Add('         <receiver typeCode="RCV">');
      StrList1.Add('            <device determinerCode="INSTANCE" classCode="DEV">');
      StrList1.Add('               <id root="2.16.840.1.113883.3.129.1.1.5" extension="e-Sağlık"/>');
      StrList1.Add('            </device>');
      StrList1.Add('         </receiver>');
      StrList1.Add('         <sender typeCode="SND">');
      StrList1.Add('            <device determinerCode="INSTANCE" classCode="DEV">');
      StrList1.Add('               <id root="2.16.840.1.113883.3.129.1.1.5" extension="123"/>');
      StrList1.Add('            </device>');
      StrList1.Add('         </sender>');
      StrList1.Add('         <controlActEvent moodCode="EVN" classCode="CACT">');
      StrList1.Add('            <subject typeCode="SUBJ">');
      StrList1.Add('               <ClinicalDocument moodCode="EVN">');

      StrList1.Add('               <Falan filan falan filan>');

      StrList1.Add('               </ClinicalDocument>');
      StrList1.Add('            </subject>');
      StrList1.Add('         </controlActEvent>');
      StrList1.Add('      </MCCI_IN000001TR01>');
      StrList1.Add('   </s:Body>');
      StrList1.Add('</s:Envelope>');
    end;

    SOAPRequest.Position := 0;
    StrList1.SaveToStream(SOAPRequest);
  finally
    StrList1.Free;
  end;
end;
Aynı şekilde OnAfterExecute eventı içerisinde geri dönen XML kodu okunabilir ve üzerinde değişiklik yapabilirsiniz.

Kod: Tümünü seç

procedure TForm1.HTTPRIO1AfterExecute(const MethodName: String;
  SOAPResponse: TStream);
var
  StrList1: TStringList;
begin
  inherited;
  StrList1 := TStringList.Create;
  try
    SOAPResponse.Position := 0;
    StrList1.LoadFromStream(SOAPResponse);
    ShowMessage('CEVAP OLARARAK GELEN XML KODLARI: ' + #13#10#13#10 + StrList1.Text + #13#10);
  finally
    StrList1.Free;
  end;
end;
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/)
varyemez
Üye
Mesajlar: 262
Kayıt: 01 Oca 2009 11:00
Konum: Bursa
İletişim:

Re: HTTPRIO1 bileşeninde gönderilen XML i nasıl görüntüleriz

Mesaj gönderen varyemez »

geri dönen cevap xml inin nasıl okunacağı içeriğine bağlıdır. Bazı cevaplarda dataset yapıda bilgi vardır (mesela birçok kişinin adres , telefon bilgisi .. gibi) bunları clientdataset içine aktarıp dbgrid ile görüntüleyebilirsin. bazı basit sorgular tek kayıt içerir (sadece bir kişinin adı ,adres, tel vs.) bunu da başka bir yöntemle görüntülersin. WSDL import aracını kullanarak bir .pas dosya oluşturuyorsun. onun içinde kullanacağın değişken tipleri , class lar , fonksiyonlar , procedure ler hazır geliyor zaten. sana bunları kullanmak kalıyor sadece. Sen yukardaki örnekte gelen xml dosyanın içeriğini bir text editörde görmeyi anlatmışsın. pratikte bu işe yaramaz..
Kullanıcı avatarı
csunguray
Üye
Mesajlar: 855
Kayıt: 09 Ara 2006 05:08
Konum: Adana
İletişim:

Re: HTTPRIO1 bileşeninde gönderilen XML i nasıl görüntüleriz

Mesaj gönderen csunguray »

Yukarıdaki kodlar çeşitli uyumsuzluk sorunlarını aşmak üzere bir örnek olarak verilmiştir. Zaten if MethodName = 'BlaBla' then satırından da anlaşılacağı üzere bu sistemin klasik web servis çağrısıyla beraber kullanılacağı anlaşılmaktadır. Verdiğiniz ek bilgiler için ayrıca teşekkür ederim.
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/)
Cevapla