AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi von Delphi 2006 aus Datensätze zu SAP R/3 senden
Thema durchsuchen
Ansicht
Themen-Optionen

von Delphi 2006 aus Datensätze zu SAP R/3 senden

Offene Frage von "Misek"
Ein Thema von Mandi Nice · begonnen am 10. Okt 2006 · letzter Beitrag vom 5. Apr 2007
Antwort Antwort
Seite 5 von 7   « Erste     345 67      
Roland Wind

Registriert seit: 2. Jul 2004
36 Beiträge
 
#41

Re: von Delphi 2006 aus Datensätze zu SAP R/3 senden

  Alt 20. Feb 2007, 10:55
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:
    

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 Problem sind die IT_Req* Strukturen. Ich kann da eine beliebige Anzahl an Strukturen anhängen.
Das mit den Strukturen haben unsere SAP Leute auch bei den Changing und Output Parametern gemacht.

mfg
Roli
  Mit Zitat antworten Zitat
kalmi01
(Gast)

n/a Beiträge
 
#42

Re: von Delphi 2006 aus Datensätze zu SAP R/3 senden

  Alt 20. Feb 2007, 11:16
Zitat:
Bei deinem Bespiel installierst du eine Struktur (RFCInstallStructure) und
hängst diese dann einer Tabelle an. Ich benötige jedoch das Anhängen an die
Import, Export und Changing Parameter.
Die Tabellenstruktur generieren und mit
procedure setRFCTable(tableName: string; rowsize: integer); z.B. in testRFC8.dpr
erzeugen.

Zitat:
Das hat bei mir leider nicht geklappt
(SYSTEM_FAILURE nach Aufruf der Exec Methode).
schalte mal das TraceFlag ein.
Im Trace-FIle stehen dann so Sachen wie:
Delphi-Quellcode:
 >>> 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 |................|
und was dann so zurück kam
Delphi-Quellcode:
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 |................|
Nicht besonders erbaulich, aber teilweise sehr hilfreich beim debuggen.
Zumindest sieht man, wer der Depp ist
Sprich, ob was Falsches zurück kommt, oder ob man selbst zu blöd ist, es richtig zu "verwurschten".

Zitat:
Mein Problem ist, dass unsere SAP Jungs da keine einfachen
Datentypen, sondern Strukturen dafür verwendet haben.
Also ich habe für Strukturen nach einigen Fehlschlägen immer Strings verwendet, die ich erst einmal mit Nullen und dann erst mit Daten befüllt habe.
Klingt abenteuerlich, aber mit anderen Konstrukten bin ich mehrfach auf die Nase gefallen.
Wichtig ist nur das vorherige Befüllen mit #0
  Mit Zitat antworten Zitat
Benutzerbild von Misek
Misek

Registriert seit: 19. Okt 2006
Ort: Bottrop
22 Beiträge
 
#43

Re: von Delphi 2006 aus Datensätze zu SAP R/3 senden

  Alt 20. Feb 2007, 11:22
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:
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;
Struktur sieht dann wie folgt aus:

komplizierteStruktur = |meinName..meinVorname.........|
  Mit Zitat antworten Zitat
Roland Wind

Registriert seit: 2. Jul 2004
36 Beiträge
 
#44

Re: von Delphi 2006 aus Datensätze zu SAP R/3 senden

  Alt 20. Feb 2007, 11:32
Hi

Habe natürlich was vergessen. Neben den beschriebenen Strukturen habe ich auch
noch folgende Struktur zu befüllen:

Delphi-Quellcode:
 
  TReqFields = record
    FName: array[1..30] of Char;
    Value: array[1..132] of Char;
  end;

  TChangingParam = record
    CT_Order_Fields: array of TReqFields;
  end;
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.

Und da streikt das RFC.
  Mit Zitat antworten Zitat
Roland Wind

Registriert seit: 2. Jul 2004
36 Beiträge
 
#45

Re: von Delphi 2006 aus Datensätze zu SAP R/3 senden

  Alt 20. Feb 2007, 11:35
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 ??
  Mit Zitat antworten Zitat
Benutzerbild von Misek
Misek

Registriert seit: 19. Okt 2006
Ort: Bottrop
22 Beiträge
 
#46

Re: von Delphi 2006 aus Datensätze zu SAP R/3 senden

  Alt 20. Feb 2007, 11:39
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
  Mit Zitat antworten Zitat
Roland Wind

Registriert seit: 2. Jul 2004
36 Beiträge
 
#47

Re: von Delphi 2006 aus Datensätze zu SAP R/3 senden

  Alt 20. Feb 2007, 11:48
Hi

Habe es nochmal ausprobiert, die Struktur folgendermaßen zu übergeben:

Delphi-Quellcode:
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;
Dabei bekomme ich folgende Meldung:

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 ??
  Mit Zitat antworten Zitat
Benutzerbild von Misek
Misek

Registriert seit: 19. Okt 2006
Ort: Bottrop
22 Beiträge
 
#48

Re: von Delphi 2006 aus Datensätze zu SAP R/3 senden

  Alt 20. Feb 2007, 11:58
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
  Mit Zitat antworten Zitat
Roland Wind

Registriert seit: 2. Jul 2004
36 Beiträge
 
#49

Re: von Delphi 2006 aus Datensätze zu SAP R/3 senden

  Alt 20. Feb 2007, 12:01
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) ??
  Mit Zitat antworten Zitat
Benutzerbild von Misek
Misek

Registriert seit: 19. Okt 2006
Ort: Bottrop
22 Beiträge
 
#50

Re: von Delphi 2006 aus Datensätze zu SAP R/3 senden

  Alt 20. Feb 2007, 12:08
Also doch eine Tabelle

Ja du musst diese Struktur im System einbinden, dann abschicken. Das hatte ich aber schon mal beschrieben wie das geht.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 5 von 7   « Erste     345 67      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz