![]() |
Re: von Delphi 2006 aus Datensätze zu SAP R/3 senden
Hi
Das mit den einfachen Datentypen für die Import und Exportparameter funktioniert auch schon ganz gut. Mein Problem ist, dass unsere SAP Jungs da keine einfachen Datentypen, sondern Strukturen dafür verwendet haben. Folgende Importparameter werden verwendet:
Delphi-Quellcode:
Das Problem sind die IT_Req* Strukturen. Ich kann da eine beliebige Anzahl an Strukturen anhängen.TTFieldName = record Field: array[1..30] of Char; end; TInputParam = record I_FabNr: array[1..6] of Char; // Fabrication Number I_PAufN: array[1..8] of Char; // Order Number I_VBELN: array[1..10] of Char; // SD-Number I_OPSDokNr: array[1..25] of Char; // Job-Number IT_Req_Act_Fields: TTFieldName; IT_Req_Txt_Fields: TTFieldName; end; Das mit den Strukturen haben unsere SAP Leute auch bei den Changing und Output Parametern gemacht. mfg Roli |
Re: von Delphi 2006 aus Datensätze zu SAP R/3 senden
Zitat:
Delphi-Quellcode:
z.B. in testRFC8.dpr
procedure setRFCTable(tableName: string; rowsize: integer);
erzeugen. Zitat:
Im Trace-FIle stehen dann so Sachen wie:
Delphi-Quellcode:
und was dann so zurück kam
>>> Logon check: calling RFCPING
>>> RfcCall [1] ... *> RfcCall FUNCTION RFCPING handle = 1 parameter = <NULL> tables = <NULL> UUID: RfcCallNew send the uuid to the partner {5AA1EECC-AFD7-4FD2-8D3A-14D5FE7E3A62} >>>> [1] <unknown> : EXT <ac: 3> L 172.16.2.220 >>> WRITE (73504050) -{5AA1EECC-AFD7-4FD2-8D3A-14D5FE7E3A62} 000000 | D9C6C3F0 F0F0F0F0 F0F0F0E3 01010008 |................| 000010 | 01010101 01010000 01010103 00040000 |................|
Delphi-Quellcode:
Nicht besonders erbaulich, aber teilweise sehr hilfreich beim debuggen.
Listen/WaitForRequest (counter = 3)
>>>> [1] <unknown> : EXT <ac: 6> L 172.16.2.220 >>> LISTEN (73504050) -{5AA1EECC-AFD7-4FD2-8D3A-14D5FE7E3A62} 000000 | 01010008 01020101 01010000 01010103 |................| 000010 | 00040000 020B0103 0106000B 01010000 |................| Zumindest sieht man, wer der Depp ist :wink: Sprich, ob was Falsches zurück kommt, oder ob man selbst zu blöd ist, es richtig zu "verwurschten". Zitat:
Klingt abenteuerlich, aber mit anderen Konstrukten bin ich mehrfach auf die Nase gefallen. Wichtig ist nur das vorherige Befüllen mit #0 |
Re: von Delphi 2006 aus Datensätze zu SAP R/3 senden
hmmm... würd dir da gerne helfen, aber ich glaube das ich nicht dahintersteige was genau dein Problem ist.
Ich versuche es mal zu interpretieren. Du hast einfache Importparameter mit nur EINEM Feld. Nun hast du das Problem, dass du viele Felder in einem Importparameter vorhanden sind richtig? Und hier die Lösung: Eine Struktur in RFC ist nix weiteres als ein laaaanger String. Hier eine kleine Grafik dazu FELD 1 | FELD 2 | FELD 3| ich.bin.das.erste.FeldTest......test3... in der Tabelle oder Struktur wird es so aussehen: Feld 1 | ich bin das erste Feld Feld 2 | Test Feld 3 | test3 das ganze ist in wirklichkeit nicht gesplittet. Die Importparams sind nur durch offsets, also die länge der einzelnen Felder, gekennzeichnet. Also gilt
Delphi-Quellcode:
Struktur sieht dann wie folgt aus:
TMusterStruct = record
name : array[1..10] of char; vorname : array[1..20] of char; end; procedure schiessmichtot(); var komplizierteStruktur : TMusterStruct; begin komplizierteStruktur.name := 'meinName'; komplizierteStruktur.vorname := 'meinVorname'; RFC.HochladenUndExecute( komplizierteStruktur ); end; komplizierteStruktur = |meinName..meinVorname.........| |
Re: von Delphi 2006 aus Datensätze zu SAP R/3 senden
Hi
Habe natürlich was vergessen. Neben den beschriebenen Strukturen habe ich auch noch folgende Struktur zu befüllen:
Delphi-Quellcode:
Die Import und Exportparameter benötigen nur eine einfache Struktur. Der ChangingTReqFields = record FName: array[1..30] of Char; Value: array[1..132] of Char; end; TChangingParam = record CT_Order_Fields: array of TReqFields; end; Parameter benötigt jedoch eine Struktur, bei der FName der Eingangsparameter und Value der Rückgabeparameter von SAP sind. Und da streikt das RFC. |
Re: von Delphi 2006 aus Datensätze zu SAP R/3 senden
Ach ja. Danke für deinen Tipp mit dem Trace. Bekomme folgenden Rückgabewert:
>>> RfcReceiveEx [1] ... >>>> [1] <unknown> : EXT <ac: 10> 128.47.15.231 >>> FLUSH(WRITE) (79696407) -{3F826D77-F3DD-47C2-84F3-12DF672E9638} >>>> [1] <unknown> : EXT <ac: 11> 128.47.15.231 >>> READ (79696407) -{3F826D77-F3DD-47C2-84F3-12DF672E9638} 000000 | 05000000 05000403 001E4341 4C4C5F46 |..........CALL_F| 000010 | 554E4354 494F4E5F 494C4C45 47414C5F |UNCTION_ILLEGAL_| 000020 | 44415441 5F545950 04030402 00454461 |DATA_TYP.....EDa| 000030 | 74656E66 65686C65 72202875 6E67FC6C |tenfehler (ung.l| 000040 | 74696765 72204461 74656E74 79702030 |tiger Datentyp 0| 000050 | 29206265 69206569 6E656D20 2752656D |) bei einem 'Rem| 000060 | 6F746520 46756E63 74696F6E 2043616C |ote Function Cal| 000070 | 6C272E04 02FFFF00 00FFFF00 00000000 |l'..............| >TS> Tue Feb 20 10:49:23 2007 ======> Datenfehler (ungültiger Datentyp 0) bei einem 'Remote Function Call'. >>>> [1] <unknown> : EXT <ac: 12> 128.47.15.231 >>> CLOSE abrfcrcv.c 400 (79696407) -{3F826D77-F3DD-47C2-84F3-12DF672E9638} *> RfcReceiveEx ... handle = 1 Data conversion On <* RfcReceiveEx [1] : returns 3:RFC_SYS_EXCEPTION <* RfcCallReceiveEx [1] : returns 3:RFC_SYS_EXCEPTION *> RfcClose ... handle = 1 >>>> [1] <unknown> : EXT <ac: 13> 128.47.15.231 >>> FREE abrfc.c 522 (79696407) -{3F826D77-F3DD-47C2-84F3-12DF672E9638} **** Trace file opened at 20070220 104923 Westeuropäische, SAP-REL 620,0,1929 RFC-VER 3 755830 MT-SL <* RfcClose Habe ich da den Typ falsch angegeben ?? |
Re: von Delphi 2006 aus Datensätze zu SAP R/3 senden
im zweifel immer nur strings übergeben... die werden immer angenommen ;)
Die Import und Exportparameter benötigen nur eine einfache Struktur. Der Changing Parameter benötigt jedoch eine Struktur, bei der FName der Eingangsparameter und Value der Rückgabeparameter von SAP sind. Dann mach es doch einfach.... baue noch eine struktur mit jeweis nur einem Feld |
Re: von Delphi 2006 aus Datensätze zu SAP R/3 senden
Hi
Habe es nochmal ausprobiert, die Struktur folgendermaßen zu übergeben:
Delphi-Quellcode:
Dabei bekomme ich folgende Meldung:
if (StrLen(@InputParam.IT_Req_Txt_Fields.Field) <> 0) then
SetInputParam('IT_REQ_TXT_FIELDS', 30, @InputParam.IT_Req_Txt_Fields.Field, 0); procedure TSAPRFC.SetInputParam(const aParamName: string; aParamLength: Integer; aParamValue: Pointer; aParamType: Integer); // Setzt Eingabeparameter für den RFC var i: integer; begin i := 0; while (i < SAPRFC_MaxParameters) and (FExporting[i].Name <> nil) do inc(i); if i = SAPRFC_MaxParameters then raise Exception.Create('Max params exeeded!'); FExporting[i].Name := PChar(aParamName); FExporting[i].nLen := Length(aParamName); FExporting[i].aType := aParamType; FExporting[i].Leng := aParamLength; FExporting[i].Addr := aParamValue; end; T:3256 ======> Datenfehler (ungültiger Datentyp 0) bei einem 'Remote Function Call'. T:3256 <* RfcReceiveEx [1] : returns 3:RFC_SYS_EXCEPTION T:3256 <* RfcCallReceiveEx [1] : returns 3:RFC_SYS_EXCEPTION Schätze den Datentyp so zu übergeben funktioniert nicht. Habe in der Transaktion se37 nachgeguckt und zu dem Datentyp TTFIELDNAME folgende Informationen gefunden: Initialisierung und Zugriff: Standardtabelle Zeilentyp: Datentyp = CHAR Zahl der Stellen = 30 Wie kann ich nun einen Tabellentyp als Importparameter übergeben ?? |
Re: von Delphi 2006 aus Datensätze zu SAP R/3 senden
was hast du denn jetzt zum übergeben, ein Parameter oder eine Tabelle? Das ganze Teil funktioniert bei mir. Und ich habe NUR Char's benutzt. Anders lässt sich das nicht lösen.
Also ParamType immer auf "0" lassen !!! Es handelt sich hierbei nur um einen Typen... egal ob er als parameter oder als feld in der tabelle auftaucht |
Re: von Delphi 2006 aus Datensätze zu SAP R/3 senden
Hi
Das ist genau die Frage, die ich nicht beantwortet bekomme. Laut SAP ist der Datentyp TTFieldName eine Standardtabelle, die als Importparameter übergeben wird. Muss ich nun mit SetRFCTable das als Tabelle anhängen (dachte immer dafür wäre der Tables Reiter), oder als normlen Importparameter übergeben (wo ja SAP motzt wegen dem DatenTyp) ?? |
Re: von Delphi 2006 aus Datensätze zu SAP R/3 senden
Also doch eine Tabelle ;)
Ja du musst diese Struktur im System einbinden, dann abschicken. Das hatte ich aber schon mal beschrieben wie das geht. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:18 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