Delphi-PRAXiS
Seite 2 von 7     12 34     Letzte »    

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)

Mandi Nice 14. Okt 2006 20:24

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

War ein paar Tage weg. Daher meld ich mich erst heute wieder.

Der Kunde hat halt gemeint ich soll es mit dem JavaConnector machen.
Habe aber unter Delphi ein Pech damit. Delphi ist halt kein JAVA.

Ich denke ich werde auch eine CSV-Export vorschlagen oder der Kunde soll sich den Datenimport selbst ( in JAVA )
programmieren und ich rufe das Importprogramm auf wenn ich Daten senden muss.

Und wenn er das nicht will, gibt es das zwei fertig OXC die ich verwenden könnte.

Auf jedenfall vielen Dank an alle.

hmg
Mandi

Bernhard Geyer 14. Okt 2006 20:38

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

Zitat von Mandi Nice
Der Kunde hat halt gemeint ich soll es mit dem JavaConnector machen.
Habe aber unter Delphi ein Pech damit. Delphi ist halt kein JAVA.

Delphi kann mit Java sehr wohl zusammenarbeiten. Das Zauberwort heißt Java Native Interface(JNI).

Zitat:

Zitat von Mandi Nice
Ich denke ich werde auch eine CSV-Export vorschlagen oder der Kunde soll sich den Datenimport selbst ( in JAVA )
programmieren und ich rufe das Importprogramm auf wenn ich Daten senden muss.

Wenn Du das hinbekommst ist es besser für dich. Diese Schnittstelle ist mit sicherheit auch ungefährlicher für dich das man dir die Schuld für irgendwas geben könnte wenn man SAP nicht funktioniert (Bis gestern gings noch und heute haben wir Ihr Programm zum ersten mal laufen lassen. Das evtl. an 10 anderen Stellen auch noch was an SAP gedreht wurde erfährst Du nicht).

Union 14. Okt 2006 20:50

Re: von Delphi 2006 aus Datensätze zu SAP R/3 senden
 
Wir haben unsere SAP-Schnittstellen immer mit IDOC gelöst. Das bietet saubere Schnittstellendefinitionen für den Datenaustausch mit allen Systemen. Die zugrunde liegende Klasse zum Lesen und Erzeugen von IDOC-Dateien ist zum Beispiel hier enthalten (ist ein kleiner Viewer für diese Dateien). Das wird z.B. im Datenaustausch mit Varta, Bosch, Nestle u.a. eingesetzt. Ich kann Dir aber aus bisherigen Projekten eins sagen: Eine solche Schnittstelle mit mehreren Transaktionen zu programmieren, braucht ca. 20-50 MT, selbst wenn Du Dich um die reine Technik die dem zugrunde liegt nicht mehr kümmern musst. Dazu ist SAP zu flexibel, es gibt selbst innerhalb des gleichen Konzerns oft keine zwei gleichen Vorgehensweisen.

Misek 19. Okt 2006 13:01

Re: von Delphi 2006 aus Datensätze zu SAP R/3 senden
 
Wenn hier schon mal über SAP R/3 geschrieben wird, nutze ich mal die Gelegenheit mal was zu fragen.

Ich sitze gerade hier und weiss mal echt nicht weiter. Unzwar geht es um einen BAPI call den ich gerne ausführen möchte:
Dieser benötigt mehrere Felder als import. So weit noch verständlich....

Nun habe ich aber zwei Felder mit dem selben bezeichner, jedoch in unterschiedlichen Tabellen wie mache ich dem importParameter klar in welcher Tabelle sich dieses Feld befindet?



Ich gehe durch die RfcAPI mit der librfc.dll und rufe die RfcRecieveEx - Funktion auf
Vielen Dank im voraus

Heffalump 19. Okt 2006 13:35

Re: von Delphi 2006 aus Datensätze zu SAP R/3 senden
 
Wenn Du die Möglichkeit hast, schau Dir den SAP .NET Connector an. Der funktioniert zwar nur mit dem Visual Studio 2003. Aber die Unterstützung zur Einbindung von BAPI´s/RFC sind damit optimal. Ist dann natürlich .NET 1.1.

Misek 19. Okt 2006 13:56

Re: von Delphi 2006 aus Datensätze zu SAP R/3 senden
 
Würde ich gerne! Die möglichkeit ist mir jedoch leider nicht gegeben.
trotzdem Besten Dank!

pertzschc 19. Okt 2006 14:16

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

Zitat von Misek
Nun habe ich aber zwei Felder mit dem selben bezeichner, jedoch in unterschiedlichen Tabellen wie mache ich dem importParameter klar in welcher Tabelle sich dieses Feld befindet?

Du musst die Schnittstelle des BAPI anders befüllen.

Zuerstmal die Schnittstelle instanzieren:
Delphi-Quellcode:
l_func := a_SAPFunctionsObject.Add('BAPI_REPO_XYZ_F4');
Parameter füllen, die für einzelne Werte stehen:
Delphi-Quellcode:
// werte Importieren
l_func.exports('I_OBJECT_TYPE'):='GC';
l_func.exports('I_MULTIPLE_SELECTION'):='X';
Strukturierte Parameter füllen, d.h. unter dem Namen des Struktur
sind nochmal einzelne Felder ansprechbar:
Delphi-Quellcode:
// einzelnes Feld einer Struktur füllen
l_importstructur := l_func.exports('IS_STRUKTUR_MATERIAL');
l_ImportStructur.Value[1] := _matnr;
Tabellen-Parameter füllen, d.h. unter dem Namen der Tabelle
müssen Zeilen (Rows) angelegt werden, deren einzelne Felder sind ansprechbar:

Delphi-Quellcode:
  // Struktur-Tabelle auslesen
l_IT_STRUCTURE_IDS:= l_func.tables.item('IT_STRUCTURE_IDS');
// alle Einträge löschen
l_IT_STRUCTURE_IDS.rows.removeall;
/ neue Zeile anhängen
l_eintrag:=l_IT_STRUCTURE_IDS.rows.add;
// einfügen der TestID
l_eintrag.Value['STRUCTURE_ID']:=_task.TestID;
Gruß,
Christoph

Misek 19. Okt 2006 14:57

Re: von Delphi 2006 aus Datensätze zu SAP R/3 senden
 
was ist l_func für ein Typ? Kann es sein, dass du die BAPIS mit ActiveX ansteuerst?


Im Moment sieht es bei mir noch so aus:

Hier werden die Inputparameter gesetzt. Bitte nicht verwirren lassen... der name FExporting ist das, was an das SAP raus geht. trotzdem verwende ich den Namen "setRFCInputParam" als Funktionsaufruf.

Delphi-Quellcode:
procedure TSAPRFC.setRFCInputParam(paramName: string; paramlength: integer; pparamValue: pointer;
  paramType: 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(paramName);
  FExporting[i].nlen := length(paramName);
  FExporting[i].atype := paramType;
  FExporting[i].leng := paramlength;
  FExporting[i].addr := pparamValue;
end;
Und nun wird das ganze abgeschickt mit folgendem Code...
Delphi-Quellcode:
function TSAPRFC.execute: string;
var
  funcres: integer;
begin
  result := '';
  funcRes := connection.FRfcCallReceiveEx(connection.fconnHandle, pchar(fRfcName),
    @FExporting, @FImporting, @FChanging, @FTables, @pException);
  if funcres <> 0 then begin
    result := pchar(pException);
    // Wenn wir keinen Klartext-Fehler bekommen, geben wir den Fehlercode aus
    if result = '' then result := 'Error ' + IntToStr(funcres);
  end;
end;

pertzschc 19. Okt 2006 15:40

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

Zitat von Misek
was ist l_func für ein Typ? Kann es sein, dass du die BAPIS mit ActiveX ansteuerst?

ja, ich nehme das SAPFunctions.ocx. Deinen Weg bin ich noch nicht gegangen.

Delphi-Quellcode:
TSAPFunctions = class(TOleControl)
...
var
  l_func, l_IT_STRUCTURE_IDS, l_eintrag, l_resultTabelle: variant;
Gruß,
Christoph

Misek 19. Okt 2006 15:53

Re: von Delphi 2006 aus Datensätze zu SAP R/3 senden
 
Das bringt mich leider auch nicht weiter, trotzdem Danke!

Also weiterhin besteht das Problem Felder in einer Struktur mit tabellennamen von SAP genau zu identifizieren und zu setzen. Quasi den importparameter richtig zu setzen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:45 Uhr.
Seite 2 von 7     12 34     Letzte »    

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