![]() |
AW: Webservice Rückgabe komplexe Datenstruktur
soe ist die soap komponente THTTPRIO.
Es tut mir leid ich habe von Webservices leider noch nicht viel Ahnung. Was soll ich mir bei Getweb_getInventory ansehen??? Ich habe halt das Problem das ich zum Aufruf dem Webservice folgende Werte übergeben muss. - CustomerNo - Article - Quantity Wobei Customerno vom Type integer ist. Das klappt auch. Wenn ich dem Webservice nur die Customerno übergebe wird der Service auch aufgerufen und ich bekomme die Antwort das halt Article und Quantity fehlt. Wenn ich nun Item vom Typ Array_Of_ItemType belegen möchte um hier Article und Quantity zu übergeben dann springt das Programm direkt vom Befehl rein.Item[0] := myItemType; zur Programmzeile end; Ich habe es auch folgendermassen probiert
Code:
Also ohne soap Komponente.. hat aber den gleicehn Effekt. Das Programm springt beim Ausführen von rein.Item[0].Quantity := 1;
...
rein := messagein.Create; rein.CustomerNo := 1; rein.Item[0].Quantity := 1; rein.Item[0].Article := '10000100'; web.Getweb_getInventory.getInventory(rein); ... zum end; |
AW: Webservice Rückgabe komplexe Datenstruktur
Hallo,
ich rufe den Webservice immer anders auf, kann Dir aber nicht sagen, was dort der Unterschied ist.
Delphi-Quellcode:
Httprio1: ist eine HTTPRio-Kompo, die du mit auf die Form ziehst. Die braucht Du im Normalfall gar nicht. Aber wenn Du Dir anschauen willst, was da übertragen wird und wieder zurückkommt, fülle noch OnBeforeExecute und OnAfterExecute:
Var Webservice:web_getInventory;
Erg:MessageOut; begin Webservice:=Getweb_getInventory(false,'',HTTPRIO1); rein:=... erg:=Webservice.getInventory(rein); end;
Delphi-Quellcode:
bist Du dir sicher, daß das funktionieren kann:
procedure TForm2.HTTPRIO1AfterExecute(const MethodName: string;
SOAPResponse: TStream); Var sl:Tstrings; begin sl:=TStringList.Create; try SOAPResponse.Position:=0; sl.LoadFromStream(SOAPResponse); sl.SaveToFile(irgendwohin+'SoapResponse-Test.xml'); finally sl.free; end; end; procedure TForm2.HTTPRIO1BeforeExecute(const MethodName: string; var SOAPRequest: WideString); Var sl:Tstrings; begin sl:=TStringList.Create; try sl.Text:=SOAPRequest; sl.SaveToFile(irgendwohin+'Soaprequest-Test.xml'); finally sl.free; end; end;
Delphi-Quellcode:
Du hast ja damit ein Array mit 2 Feldern, belegst und erstellst aber nur das erste.
myArray : array[0..1] of ItemType;
... myItemType := ItemType.Create; myItemType.Article := '10000100'; myItemType.Quantity := 1; myArray[0] := myItemType; Für mich wäre logischer, wenn du das als dynamisches Aray deklarierst
Delphi-Quellcode:
Gruß Frank
Var
myArray : Array_Of_ItemType; -> Array_Of_ItemType siehe die Wsdl ... setlength(myArray,1); rein.item:= myArray; myItemType := ItemType.Create; myItemType.Article := '10000100'; myItemType.Quantity := 1; rein.item[0]:=myItemType; |
AW: Webservice Rückgabe komplexe Datenstruktur
Hallo Frank,
Du bist mein Held. Hat super geklappt :-D:-D:-D:-D Ich kann nun den Service ansprechen und bekomme eine Antwort zurück So sieht es nun aus.
Code:
Nun habe ich leider ein weiteres Problem.
var
gi: messageout; rein: messagein; myArray : Array_Of_ItemType; myItemType : ItemType; begin gi := messageout.Create; rein := messagein.Create; myItemType := ItemType.Create; setlength(myArray,1); rein.item:= myArray; rein.CustomerNo := 1; myItemType.Article := '10000100'; myItemType.Quantity := 1; myArray[0] := myItemType; gi := (soe as web_getInventory).getInventory(rein); ... Der Service muss folgendermassen angefragt werden.
Code:
ich generiere aber (Habe ich dank deines Tipps aus der Datei des Ereignisses soeBeforeExecute)
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header/> <soapenv:Body> <getInventoryIn> <CustomerNo>13635000</CustomerNo> <!--1 or more repetitions:--> <Item> <Article>101000500</Article> <Quantity>10</Quantity> </Item> </getInventoryIn> </soapenv:Body> </soapenv:Envelope>
Code:
Ich muss also statt meines
<?xml version="1.0" ?>
- <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <SOAP-ENV:Body> - <MessageIn xmlns="http://www.soennecken.de/web.getInventory/"> <CustomerNo xmlns="">1</CustomerNo> - <Item xmlns=""> <Article>10000100</Article> <Quantity>1</Quantity> </Item> </MessageIn> </SOAP-ENV:Body> </SOAP-ENV:Envelope> <MessageIn lns="http://www.soennecken.de/web.getInventory/"> ein <getInventoryIn> übergeben :( Wie soll ich denn nun das anstellen. Vielen Vielen Dank schon mal für Eure Hilfe Gruß Andreas |
AW: Webservice Rückgabe komplexe Datenstruktur
Sorry, muß gleich zu ner Feier und hab nicht viel Zeit ;-)
such mal hier im Forum zu Webservice oder soap, hier gab es vor kurzem ein gleiches Problem. Es gibt da immer ein Problem mit namespaces, die irgendwie falsch gesetzt werden. Du kannst aber die zu übertragende Soapnachricht im onbeforeexecute manuell mit etwas Fleiß und pos+delete etc ändern ... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:32 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz