Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi von Delphi 2006 aus Datensätze zu SAP R/3 senden (https://www.delphipraxis.net/78762-von-delphi-2006-aus-datensaetze-zu-sap-r-3-senden.html)

Roland Wind 20. Feb 2007 10:55

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:
   

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

kalmi01 20. Feb 2007 11:16

Re: von Delphi 2006 aus Datensätze zu SAP R/3 senden
 
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
Delphi-Quellcode:
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 :wink:
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

Misek 20. Feb 2007 11:22

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:
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.........|

Roland Wind 20. Feb 2007 11:32

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:
 
  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.

Roland Wind 20. Feb 2007 11:35

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 ??

Misek 20. Feb 2007 11:39

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

Roland Wind 20. Feb 2007 11:48

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:
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 ??

Misek 20. Feb 2007 11:58

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

Roland Wind 20. Feb 2007 12:01

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) ??

Misek 20. Feb 2007 12:08

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.

pertzschc 20. Feb 2007 12:20

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

Zitat von Roland Wind
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) ??

es ist nicht möglich einen tabellen-typ per windows-rfc-libary als import parameter zu übergeben.

Gruß,
Christoph

Roland Wind 21. Feb 2007 14:51

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

Ich habe nun die Daten als Tabelle übergeben. Folgendes Ergebnis

>TS> Wed Feb 21 15:38:34 2007
======> Error CALL_FUNCTION_ILLEGAL_P_TYPE occured. P1=2
>>>> [1] <unknown> : EXT <ac: 12> 128.47.15.231 >>> CLOSE abrfcrcv.c 400 (82738583)
-{3E122FCD-0854-4550-8D9F-7907597B18D1}
==== Delta 1 detaching (head) hRfc 1 ID 1
*> RfcReceiveEx ...
handle = 1
tables[0].name = IT_REQ_TXT_FIELDS
tables[0].nlen = 17
tables[0].leng = 30
tables[0].type = 00000021
tables[0].newitab = 0
tables[0].itmode = RFC_ITMODE_BYREFERENCE
ItFill(tables[0].ithandle) = 1
ItLeng(tables[0].ithandle) = 30

Data conversion On

<* RfcReceiveEx [1] : returns 3:RFC_SYS_EXCEPTION
<* RfcCallReceiveEx [1] : returns 3:RFC_SYS_EXCEPTION

Im letzte Thread hat pertzschc geschrieben, dass es nicht möglich ist, Tabellen
über RFC als Importparameter zu übergeben. Tja, wie gehts denn dann ??

pertzschc 21. Feb 2007 15:30

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

Zitat von Roland Wind
Im letzte Thread hat pertzschc geschrieben, dass es nicht möglich ist, Tabellen
über RFC als Importparameter zu übergeben. Tja, wie gehts denn dann ??

Es ist ganz einfach: Ein Funktionsbaustein, der einen Parameter als Tabellentyp deklariert hat, kannst Du meines Wissens nicht per RFC (von extern) aufrufen.

Es gibt zwei Möglichkeiten:
- Man benutzt einen anderen Funktionsbaustein
- Man kümmert sich darum, dass im SAP System ein weitere Baustein den eigentlichen Baustein kapselt und dann den Parameter richtig als Tabellen-Parameter deklariert und intern den Aufruf auf den eigentlichen Baustein durchreicht und Ergebnisse wieder herausgibt.

Gruß,
Christoph

Roland Wind 22. Feb 2007 07:56

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

Ein guter Einwand. Laut der SAP Dok (noch ne größere Katastrophe als die Hilfe in D2006) sollte aber
das Handle nach einem RPCInstallStructure auch einem Parameter angehängt werden. Wie sicher ist das, das man solche Strukturen (bißchen komisch ist das schon, dass man einen Tabellentyp einem Parameter übergibt) nicht den Import/Export Parametern anhängen kann ??

kalmi01 22. Feb 2007 08:33

Re: von Delphi 2006 aus Datensätze zu SAP R/3 senden
 
Moin moin Roland,

Zitat:

Laut der SAP Dok (noch ne größere Katastrophe als die Hilfe in D2006) sollte aber
das Handle nach einem RPCInstallStructure auch einem Parameter angehängt werden.
Wie sicher ist das, das man solche Strukturen ... nicht den Import/Export Parametern anhängen kann ??
Ob es sicher ist, oder nicht, kann ich Dir nicht sagen.
Was ich aber mit Gewissheit sagen kann, ist: pack alles in Strings und übergib diese, das funktioniert.
Alle anderen Versuche mit anderen Daten-Typen und -Strukturen haben (zumindest bei uns) nur viel Ärger und viel Arbeit bei geringem Erfolg gebracht.
Ich lasse mich aber gern vom Gegenteil überzeugen !!!

heri 22. Feb 2007 08:58

Re: von Delphi 2006 aus Datensätze zu SAP R/3 senden
 
Liste der Anhänge anzeigen (Anzahl: 1)
hatte mir "bapi is here" sicherheitshalber mal auf meinen lokalen rechner gelegt

vielleicht kann ich so etwas kleines beisteuern

heri 22. Feb 2007 09:02

Re: von Delphi 2006 aus Datensätze zu SAP R/3 senden
 
Liste der Anhänge anzeigen (Anzahl: 1)
und habe gerade noch eine - vielleicht veraltetet - beschreibung vom SAP .NET Connector Version 1.0 (vom Nov 2002) gefunden
leg auch diese mal bei

Misek 22. Feb 2007 09:57

Re: von Delphi 2006 aus Datensätze zu SAP R/3 senden
 
Ist das nicht der .NET Connector mit den ActiveX Komponenten? Ich schaue mal später rein...

Misek 22. Feb 2007 10:07

Re: von Delphi 2006 aus Datensätze zu SAP R/3 senden
 
apropos.... schlechte Dokus etc.
Hab da so ein Buch das nennt sich "SAP - Schnittstellen - Programmierung". Es ist eigentlich ganz ok. C++ Code für RFC. Da wird aber auch viel vergessen, quasi muss man selber einige Sachen rausfinden.
schaut es euch aber mal an: 3-89842-445-6
es ist auf jeden Wert das mal gesehen zu haben.

kalmi01 22. Feb 2007 10:16

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

zumindest "BAPI-is-here" setzt auf ActiveX auf und ist damit von der Version der jeweiligen librfc32.dll abhängig.

Misek 22. Feb 2007 12:21

Re: von Delphi 2006 aus Datensätze zu SAP R/3 senden
 
hmmm.... na dann.
Ich werde weiterhin mich an den Kompos dran setzen... die werden um einiges schneller sein als ActiveX. Gerade für Migrationstools von sehr großen Vorteil. Aber das ist dann jedem seine Sache, wer auf was setzt.

kalmi01 22. Feb 2007 12:55

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

Ich werde weiterhin mich an den Kompos dran setzen... die werden um einiges schneller sein als ActiveX.
find ich gut.
Ich halte nichts von den ActiveX-Sachen.
Zu umständlich und man weis nicht, was passiert.

Roland Wind 1. Mär 2007 11:32

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

Hast du eigentlich die Email Adresse oder Telefonnummer vom Michael Schumann ??
Wollte mal ein bißchen mit ihm plauschen.

kalmi01 7. Mär 2007 19:15

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

wie ist eigentlich der Stand der Dinge, bei diesem Projekt ?

Bei einer aktuellen Aufgabenstellung, ergab sich mir die Frage:
wie transferiere ich TABELLEN gleichzeitig hin/zurück ?

Bei Exporting/Importing/Changing ist die Datenrichtung beim RFC-Aufruf ja recht eindeutig.

Bei Tabellen (Mehrzahl !) scheint mir das aber nicht so zu sein.
Was, wenn ich 0 Tabellen exportiere, aber 5 importiere; oder umgekehrt.
Oder, wenn 2 nach SAP müssen und 3 wieder zurück zu mir ?

Hat da jemand Erfahrungen mit ?

pertzschc 7. Mär 2007 20:29

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

Zitat von kalmi01
Bei einer aktuellen Aufgabenstellung, ergab sich mir die Frage:
wie transferiere ich TABELLEN gleichzeitig hin/zurück ?

Du initialisierst alle benötigten Tabellen vor dem Aufruf.
Dann bestückst Du die "Import"-Tabellen mit den notwendigen Werten und machst Deinen RFC-Aufruf.
Anschließend nimmst Du Dir die "Export"-Tabellen und liest wenn Werte vorhanden diese aus.

Gruß,
Christoph

kalmi01 19. Mär 2007 11:50

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

Zitat von pertzschc
Zitat:

Zitat von kalmi01
Bei einer aktuellen Aufgabenstellung, ergab sich mir die Frage:
wie transferiere ich TABELLEN gleichzeitig hin/zurück ?

Du initialisierst alle benötigten Tabellen vor dem Aufruf.
Dann bestückst Du die "Import"-Tabellen mit den notwendigen Werten und machst Deinen RFC-Aufruf.
Anschließend nimmst Du Dir die "Export"-Tabellen und liest wenn Werte vorhanden diese aus.

Vielen Dank für den Tip.
Soweit, so gut.
Bei der Gelegenheit dachte ich mir, machste doch gleich ne Klasse draus.
Um die Strukturen dynamisch halten zu können, hab ich mir Array's als Container angelegt, welche
die Initialisierungparameter in Records beinhalten.
Meine Überlegung ging dahin, die für den RFC-Call benötigten Strukturen erst kurz vor dem
Call zu realisieren, um bei der Parameteranzahl flexibel zu bleiben.
Delphi-Quellcode:
    function TSAP.CallRFC(Name : string) : boolean;
      var
        tmpImport,
        tmpExport,
        tmpChange  : array [0..10] of TRfcParam;  // array of TRfcParam;
        tmpTables  : array [0..10] of TRfcTable;  // array of TRfcTable;
        tmpTableRow : TTableRow;
        TableNames : string;
       
        pException,
        iTab       : pointer;
        FuncRes    : integer;

        i, j       : integer;
      begin
      //  SetLength(tmpImport, Length(FImport) + 1);
        for i := 0 to Length(FImport) - 1
        do begin
             tmpImport[i].name := PChar(FImport[i].Name);
             tmpImport[i].nlen := Length(FImport[i].Name);
             tmpImport[i].atype := FImport[i].Typ;
             tmpImport[i].leng := Length(FImport[i].Wert);
             tmpImport[i].addr := PChar(FImport[i].Wert);
           end;
        tmpImport[Length(FImport)].name := nil;
Seltsamer weise funktioniert obiges.
Delphi-Quellcode:
        tmpChange  : array of TRfcParam;
        tmpTables  : array of TRfcTable;
lege ich die Array's dynamisch an und setze die Länge mit
Delphi-Quellcode:
SetLength(tmpImport, Length(FImport) + 1);
kommt nur Mist bei rum. :gruebel:

Misek 20. Mär 2007 08:48

Re: von Delphi 2006 aus Datensätze zu SAP R/3 senden
 
so,... ich hatte ein sehr viel stress gehabt. Muss ja meine Bewerbungen losschicken und schön für Prüfung vorbereiten :((

also ne Nummer habe ich leider nicht, mein Projektleiter hat mich zu ihm weitergeleitet :( ist jetzt natürlich n bissl dumm. Ich habe auch bei xing nachgeschaut, ob er dort irgendwie eingetragen ist. Ich würde eher die "entwickler" fragen, ob sie nicht eine Mail weiterleiten könnten.

hmm... also ich habe auch sehr lange geschraubt, damit das teil 100%ig funktioniert. Hatte am Anfang auch nur Müll

ReinholdF 5. Apr 2007 07:54

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

Zitat von Misek
Das mit den Strukturen war früher bei mir auch das Problem!
Die "Schuhmann" - Klassen von Herrn Schuhmann aus der Entwickler sind auch nicht ganz fehlerfrei. Ich habe mich mit dem Autor unterhalten und konnte mir auch in dem Bereich nicht wirklich weiterhelfen. Dann habe ich so lange ausprobiert, bis ich eine zeile in der Datenbank geschrieben habe ;) da war ich superglücklich!!! Das war der schönste Tag als AZUBI für mich...

Ich Maile es dir gleich zu... es ist aber nur ein Beispiel, wie man es machen kann.


Hallo Misek,

hast du dieses Beispiel noch? -
ich habe schon einige Zeit mit den Klassen von Herrn Schuhmann experimentiert und
es hat soweit ganz gut funktioniert, jedoch beim Aufruf eines RFCs mit einer Struktur
als Import-Parameter erhalte ich Fehler.

hier der Code meines Aufrufs

funcRes := connection.FRfcCallReceiveEx( connection.fconnHandle, pchar(RfcName),
@FExporting, @FImporting, @FChanging,
@FTables , @pException);
if funcres <> 0 then begin
OK := false;
result := pchar(pException);
// Wenn wir keinen Klartext-Fehler bekommen, geben wir den Fehlercode aus
if result = '' then result := 'Error ' + IntToStr(funcres);
exit;
end;

funkres ist 3 = 'SSYSTEM FAILURE'

ich wäre dir sehr dankbar, wenn du mir hier einen Schritt weiterhelfen könntest

Heiksch 5. Apr 2007 13:56

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

das ist kein großes Problem. Du kannst die Datensätze in eine Excel Tabelle speichern. Dein Kunde kann diese von SAP aus mittels CATT öffnen und in R/3 einlesen.

Ob Du mit ADO an SAP (DB2, ORACLE, ..) kommst, wage ich zu bezweifeln. Dein Kunde kann aber, wenn Du ihm eine Datenbank bereit stellst mittels eines ABAP Programmes auf diese zugreifen. Unter ABAP gibt es 2 Möglichkeiten um Dateien zu öffnen. Erste Möglichkeit ist die ganz normale für die SAP eigene Datenbank und die zweite ist der "Native" Zugriff. Ein ABAP Programmierer sollte sich damit auskennen.

Gruss Heike



Zitat:

Zitat von Mandi Nice
Hallöchen

Ich soll von meiner Anwendung Datensätze zum SAP R/3 - System des Kunden senden
( inkl Anmeldung usw .... was halt nötig ist )
Ich bin in dem bereich Neuling und hab bisher nicht viel keine Ahnung.

Der EDV-Mensch hat mit erzählt mit dem JAVA Connector sollte es gehen.

Kann aber in Internet nicht viel finden.
Das ganze hört sich auch stark nach JAVA an.
Kann ich das in Delphi verwenden und wenn ja wie und wo kann ich den Connector runterladen.


Kann man mit ADO auf SAP zugreifen.
Wäre mir lieber. Hab damit schon mal auf eine Access-Datenbank zugegriffen.

Grundlagen und Beispielcode wäre für mich sehr wichtig.

Vielen Dank im voraus.

hmg
Mandi


kalmi01 5. Apr 2007 16:59

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

Zitat von Heiksch
Du kannst die Datensätze in eine Excel Tabelle speichern. Dein Kunde kann diese von SAP aus mittels CATT öffnen und in R/3 einlesen.

Oh Graus, Performance scheint kein Thema mehr zu sein.
Die Lösung mit der Excel-Tabelle scheint unter SAP-Beratern aber sehr beliebt zu sein :roll:

Zitat:

Zitat von Heiksch
Erste Möglichkeit ist die ganz normale für die SAP eigene Datenbank und die zweite ist der "Native" Zugriff. Ein ABAP Programmierer sollte sich damit auskennen.

Also, wenn man es "zu Fuss" machen will, ist der Kram aus "Entwickler" schon nicht schlecht.
Im Prinzip baut man für jedes Prob einen eigenen Wrapper um die RFC-DLL.

Wesentlich eleganter geht es aber mit SAPx.
Kostet rund 700€, was für Tools im SAP-Umfeld ein wahres Schnäppchen ist !

Dank des SAP-Explorers kann man SAP-RFCstrukturen analysieren, ohne auf irgendwelche SAP-Spezies angewiesen zu sein.
Und nicht zu verachten, der SAPx-Server.

Also, wer im SAP-Umfeld tätig ist, für den sind 700€ noch nicht einmal "Portokasse" !
Mich hat ein Kollege angesichts des Preises jedenfalls gefragt: "Taugt das was ???"

[Werbung off]

Ich habe viel Zeit vertan, um mich mit der Connectivität von SAP-RFC-DLL und Delphi auseinander zu setzen und das ganze auch noch hübsch in Klassen zu packen.

"Entwickler" und "BAPI-is-here" waren dabei hilfreich und mein CodeEd+ wird demnächst mit Sicherheit eine einfache native RFC-Schnittstelle bekommen.
Aber, um alles in ein schönes Gewand zu packen, lohnt sich, angesichts des Preises für SAPx, der Aufwand wirklich nicht mehr.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:56 Uhr.
Seite 2 von 2     12   

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