Einzelnen Beitrag anzeigen

kalmi01
(Gast)

n/a Beiträge
 
#66

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

  Alt 19. Mär 2007, 11:50
hi Christoph
Zitat von pertzschc:
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 mitSetLength(tmpImport, Length(FImport) + 1); kommt nur Mist bei rum.
  Mit Zitat antworten Zitat