Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   SAP RFC_READ_TEXT funktioniert nicht mehr (https://www.delphipraxis.net/196721-sap-rfc_read_text-funktioniert-nicht-mehr.html)

heavybyte 12. Jun 2018 15:46

SAP RFC_READ_TEXT funktioniert nicht mehr
 
Delphi 10.2 und SAP GUI 7.5
Seit der Umstellung auf WIN 10 und Delphi 10.2 funktioniert mein Zugriff auf SAP mit dem Funktionsbaustein RFC_READ_TEXT nicht mehr. RFC_READ_TABLE funktioniert noch. Hat jemand das gleiche Problem? Muss ich am Zugriff etwas anpassen?

Hier mein Code der mit Win 7 und Delphi XE 2 funktioniert hat:
Delphi-Quellcode:
procedure TForm1.Texte_lesen_urversion;
var
r : integer ;
Sprache : String;
connection, funct, table : olevariant;
Textline, Itemsrow : oleVariant;

begin
  Richedit1.Lines.Clear;
  If not SAPConnected then
  begin
     Connection:= SAPLogOnControl1.NewConnection;
     SAPConnected := Connection.LogOn(0,false);
    (* Parameter "true" = SilentLogOn *)
  end;
  if SAPConnected then
  begin
    Sprache := 'D';
    SAPFunctions1.RemoveAll;
    SAPFunctions1.Connection := Connection;
    Funct := SAPFunctions1.add('RFC_READ_TEXT');
    Textline := Funct.Tables.item('TEXT_LINES');
    ItemsRow := Textline.rows.add;
    ItemsRow.Value[2]:='MVKE';
    ItemsRow.Value[3]:= '000000000100000205110000';
    ItemsRow.Value[4]:='0001';
    ItemsRow.Value[5]:= Sprache;
   if not Funct.call then
      showMessage(Funct.exception)
    else
    begin
     Table := Funct.tables.item('TEXT_LINES');
     For r := 1 to table.rowCount do
        Richedit1.lines.append(VartoStr(Table.Value(r,8)));
    end;
  end;
end;
Übrigens funktioniert die ActiveX Komponente. Mit VBA kann ich den Text lesen.

Vielen Dank schon mal für die Mühe.
Grüße
Harald

Bernhard Geyer 12. Jun 2018 18:19

AW: SAP RFC_READ_TEXT funktioniert nicht mehr
 
Zitat:

Zitat von heavybyte (Beitrag 1404642)
Seit der Umstellung auf WIN 10 und Delphi 10.2 funktioniert

Hier wäre es gut wenn du nicht gleichzeitig beides gemacht hättest.
Funktioniert es mit D10.2 unter Win7?
Bzw. Funktioniert es mit XE2 unter W10?

Pfaffe 12. Jun 2018 22:49

AW: SAP RFC_READ_TEXT funktioniert nicht mehr
 
// Mit VBA kannst Du den Text lesen?
ItemsRow.Value[2]:= 'MVKE'; // muss da nicht 'MATERIAL' stehen? MVKE ist die Tabelle für die Verkaufsorganisationen.
ItemsRow.Value[3]:= '000000000100000205110000'; // Ist das die Materialnummer? Bei uns wäre die zu lang.
ItemsRow.Value[4]:= '0001'; // 0001...Vertriebstext; GRUN...Grunddatentext; PRUE...Prüftext; LTXT...Materialnotiz; BEST...Einkaufsbestelltext
ItemsRow.Value[5]:= Sprache; // Sprache: string[1]; // string und ansistring funktionieren nicht; Es kommt immer der deutsche Text ... Unbedingt mit einer anderen Sprache testen!

Hast Du die Unicode-Dinger importiert, die mit dem u (wdobapiu.ocx)? Liegen bei mir unter "C:\Program Files (x86)\SAP\FrontEnd\SAPgui\Unicode"

Ich habe SAP GUI 7.5; 7500.2.4.1142; Build 1821220; Patch-Level 4; Hotfix 1
Windows 10
Delphi 10.2.3

Richedit1.lines.append(VartoStr(Table.Value(r,8))) ; // VarToStr kann weg, macht Delphi automatisch

heavybyte 13. Jun 2018 07:29

AW: SAP RFC_READ_TEXT funktioniert nicht mehr
 
Zitat:

Hast Du die Unicode-Dinger importiert, die mit dem u (wdobapiu.ocx)? Liegen bei mir unter "C:\Program Files (x86)\SAP\FrontEnd\SAPgui\Unicode"
-> Ja, hab ich.

@Pfaffe: Funktioniert bei dir der Zugriff mit RFC_READ_Text? Hast du mir da ein Beispiel?

Wir haben hier SAP GUI 7.5; 7500.1.3.1139; Build 1805791; Patch-Level 3; Hotfix 1

Pfaffe 13. Jun 2018 09:10

AW: SAP RFC_READ_TEXT funktioniert nicht mehr
 
So kann ich die Texte holen:
Delphi-Quellcode:
procedure TForm1.btn_GrunddatentexteClick(Sender: TObject);
var
  Funct, Fields, Options, Table, Textline, Itemsrow: OleVariant;
  r: integer;
  //
  ArtNr: string[18];
  Sprache: string[1];
  Textart: string[4];
begin
  try
    ArtNr:= '105073';
    Sprache:= 'F'; // siehe SAP-Tabelle T002
    Textart:= 'GRUN';
    { Grunddatentext (Text-ID GRUN)
      Prüftext (Text-ID PRUE)
      Interner Vermerk (Text-ID IVER)
       Materialnotiz (Text-ID LTXT)
       Einkaufsbestelltext (Text-ID BEST)
       Vertriebstext (Text-ID 0001) }
    //
    if Logon_SAP_ConnectionObject then begin
      SAPFunctions1.RemoveAll;
      Funct:= SAPFunctions1.add('RFC_READ_TEXT');
      Textline:= Funct.Tables.item('TEXT_LINES');
      ItemsRow:= Textline.rows.add;
      ItemsRow.Value[1]:= '002'; // Mandant
      ItemsRow.Value[2]:= 'MATERIAL';
      while length(ArtNr) < 18 do
        ArtNr:= '0' + ArtNr;
      ItemsRow.Value[3]:= ArtNr;
      ItemsRow.Value[4]:= Textart;
      ItemsRow.Value[5]:= Sprache;
      if not Funct.call then
        Set_Meldung(Funct.exception)
      else
        begin
          Table:= Funct.tables.item('TEXT_LINES');
          for r:= 1 to table.rowCount do begin // Der Text kann mehrere Zeilen haben
            // mmo1.lines.Add(Table.Value(r, 1));
            // mmo1.lines.Add(Table.Value(r, 2));
            // mmo1.lines.Add(Table.Value(r, 3));
            // mmo1.lines.Add(Table.Value(r, 4));
            // mmo1.lines.Add(Table.Value(r, 5));
            // mmo1.lines.Add(Table.Value(r, 6));
            // mmo1.lines.Add(Table.Value(r, 7));
            mmo1.lines.Add(Table.Value(r, 8)); // hier steht der Text
          end;
       end;
    end;
  finally
    SAP_ConnectionObject.Logoff;
  end;
end;

Pfaffe 13. Jun 2018 09:27

AW: SAP RFC_READ_TEXT funktioniert nicht mehr
 
Sprachcodes lesen:
Delphi-Quellcode:
procedure TForm1.btn4Click(Sender: TObject);
var
  Funct, Fields, Options, Table: OleVariant;
  r: integer;
  s, ss: string;
  Splitted: TArray<String>;
begin
  try
    if Logon_SAP_ConnectionObject then begin
      SAPFunctions1.RemoveAll;
      Funct:= SAPFunctions1.add('RFC_READ_TABLE');
      Funct.exports('QUERY_TABLE').value:= 'T002'; // Sprachcodes
      Funct.exports('DELIMITER'):= '|';
      if not Funct.call then
        Set_Meldung(Funct.exception)
      else
        begin
          // Tabellenstruktur auslesen
          Table:= Funct.tables.item('FIELDS');
          for r:= 1 to Table.rowcount do begin
            s:= Table.value(r,1) +#9+ Table.value(r,2) +#9+ Table.value(r,3) +#9+ Table.value(r,4) +#9+ Table.value(r,5);
            mmo1.Lines.Add(s);
          end;

          // Daten holen
          mmo1.Lines.Add('vor der Ausgabe = ' + timetostr(now));
          Table:= Funct.tables.item('DATA');
          for r:= 1 to Table.rowcount do begin
            s:= Table.value(r, 1);
            mmo1.Lines.Add(s);
            // Splitted:= s.Split(['|'], 5);
            // for ss in Splitted do begin
            //   mmo1.Lines.Add(ss);
            // end;
          end;
          mmo1.Lines.Add('nach der Ausgabe = ' + timetostr(now));
        end;
    end;
  finally
    SAP_ConnectionObject.Logoff;
  end;
end;

Schokohase 13. Jun 2018 10:01

AW: SAP RFC_READ_TEXT funktioniert nicht mehr
 
Ich vermute mal die gleiche Ursache wie bei OPC mit Kassl-Komponenten unter Windows 10 und tRichedit

Pfaffe 13. Jun 2018 10:55

AW: SAP RFC_READ_TEXT funktioniert nicht mehr
 
Habe in meinem Test ein TRichEdit eingebaut und die Ausgaben dort hineinlaufen lassen. Es funktioniert.
Habe aber auch IDEFixPack installiert.
Bei mir ist Windows 10 64 Bit 1703, Betriebssystembuild 15063.1088 installiert.

MichaelT 13. Jun 2018 11:37

AW: SAP RFC_READ_TEXT funktioniert nicht mehr
 
Was Pfaffe macht gibt Sinn, obwohl ich persönlich die Felder in der 'Tabelle' mit benannten 'Parametern' würde im weitern Verlauf, wenn das mal läuft, würde ansprechen.

Die ersten zwei Tabelleneinträge lässt du weg bei dir.

Das Programm zieht vermutlich die falsche librfc32 & Friends. Wenn du nicht viele FUBAs verwendest fällt das nicht unbedingt sofort auf. Das wäre jetzt mal das Programm schon in einer anderen Delphi Version lief viel naheliegender, sofern ihr euer SAP System nicht hochgezogen habt in der Zwischenzeit.

---

Ich habe allein MiniSAP 6.2 deswegen kann ich nicht mitreden bei dem Vertrextungsbaustein. Ich sehe die Definition des FUBAs nicht. Ich habe keinen Content außer das Flight Book und der ist nicht zwingend abendfüllend.

Da das Programm in XE2 lief wird die Delphi Seite schon mal passen. Ich vermute das importierte OCX wandelt den String sowieso in die COM Welt.

Meine Demos in Delphi verwenden SAPX.

Der RFC Mechanismus, das Wort passt eh gut, macht einfach einen Bytestream welcher ausmaskiert wird bspw. auf der Gegenseite und das war es. Ähnlich wie beim Datenempfang über eine DB library, allein dass man im Fall von RFC ganz garstige Sachen machen kann.

---

Empfängst du irgendetwas bei der Rückgabe oder wird nichts gefunden? Sind Exception definiert und werden die ausgelöst? Vermutlich nicht, aber das wäre der erste Schritt vor dem Tracen der übergebenen Parameter.

---

Was kann großartig passieren.

a) Im PHP bspw. wude/wird der Mandant nicht gezogen oder bspw. Systemnummer. Wäre das der Fall wäre dein wäre weder VB Implementierung noch die Delphi Version gegangen.

b) Oder die Sprache geht als Charakter durch und nicht nullterminierter String usw...

Und noch nicht mal b) ist irgendwie wahrscheinlich.


Zitat:

Zitat von heavybyte (Beitrag 1404691)
Zitat:

Hast Du die Unicode-Dinger importiert, die mit dem u (wdobapiu.ocx)? Liegen bei mir unter "C:\Program Files (x86)\SAP\FrontEnd\SAPgui\Unicode"
-> Ja, hab ich.

@Pfaffe: Funktioniert bei dir der Zugriff mit RFC_READ_Text? Hast du mir da ein Beispiel?

Wir haben hier SAP GUI 7.5; 7500.1.3.1139; Build 1805791; Patch-Level 3; Hotfix 1


heavybyte 14. Jun 2018 08:01

AW: SAP RFC_READ_TEXT funktioniert nicht mehr
 
Vielen Dank schon mal für die Antworten. Ich vermute, es liegt an unserem SAP GUI Patch Level 3.
Hab es mit Delphi 10.2 und SAP GUI 7.3 getestet und läuft.

Hab mal das Trace Logfile angeschaut. Aber auch kein Hinweis. Es gibt auch keine Exception beim Aufruf. Die zurückgegeben Tabelle ist einfach leer. Auch die Tabelle MESSAGES ist leer.

Nächste Woche wird unser SAP System gewartet. Evtl. wird auch der SAP GUI upgedated und es läuft vielleicht dann.

heavybyte 14. Jun 2018 09:26

AW: SAP RFC_READ_TEXT funktioniert nicht mehr
 
@Pfaffe
Zitat:

Habe aber auch IDEFixPack installiert.
Hab das auch installiert. Muss ich da in der Unit irgendwas für den Compiler mitgeben?

Pfaffe 14. Jun 2018 14:52

AW: SAP RFC_READ_TEXT funktioniert nicht mehr
 
Bei mir funktioniert es auch ohne IDEFixPack.
Hier nochmals meine Randbedingungen:
Bei mir ist Windows 10 64 Bit 1703, Betriebssystembuild 15063.1088 installiert.
Ich habe SAP GUI 7.5; 7500.2.4.1142; Build 1821220; Patch-Level 4; Hotfix 1
Delphi 10.2.3
TRichEdit bzw. TMemo für die Ausgabe

Rückfrage: Mich wundert es das es bei Dir mit VBA funktioniert. Hast Du meinen Quellcode mal mit Deiner Artikelnummer ausprobiert?

heavybyte 15. Jun 2018 08:39

AW: SAP RFC_READ_TEXT funktioniert nicht mehr
 
Ja, hab ich probiert und auch mit TMemo. Funzt einfach nicht.
Mit VBA (Excel) kann ich die Texte lesen.

Eventuell läuft auch beim Import der ActiveX Komponenten etwas schief. Es kommen jedoch keine Fehlermeldungen beim importieren und compilieren.

Pfaffe 15. Jun 2018 09:14

AW: SAP RFC_READ_TEXT funktioniert nicht mehr
 
Zeig doch nochmal Deinen Quellcode, ggf. auch den vom VBA. Oder sende in mir per PN.
Bitte aber Geduld mit mir, ich bin nicht permanent hier.

KodeZwerg 15. Jun 2018 09:53

AW: SAP RFC_READ_TEXT funktioniert nicht mehr
 
Zitat:

Zitat von heavybyte (Beitrag 1404897)
Eventuell läuft auch beim Import der ActiveX Komponenten etwas schief.

Vielleicht Bedarf es ein simples
Delphi-Quellcode:
Co-/Un-Initialize
?

Pfaffe 18. Jun 2018 08:17

AW: SAP RFC_READ_TEXT funktioniert nicht mehr
 
Hallo heavybyte,
Dein Quellcode funktioniert so weit, beachte aber das die Materialnummer vom Typ string[18] und die Sprache vom Typ string[1| sein muss.
In Deinem ersten Post schreibts Du, dass RFC_READ_TABLE noch funktioniert, aber RFC_READ_TEXT nicht mehr.
Was genau funktioniert den nicht? in welcher Zeile hängt das Programm, welche Errormeldung erscheint?
Funktioniert bei Dir mein Quellcode aus #5?

MichaelT 18. Jun 2018 09:12

AW: SAP RFC_READ_TEXT funktioniert nicht mehr
 
Das hat mich auch gewundert. Was darauf hindeutet, dass die librfc32 aus dem Windows System Directory wird gezogen.

Solange wir nicht wissen welche DLL gezogen wird, ... Sprache ist anfällig, die wird geprüft und ist noch dazu gefährdert als Charakter interpretiert zu werden und nicht als String. Weswegen sich ein + #0 an.



Zitat:

Zitat von Pfaffe (Beitrag 1404840)
Bei mir funktioniert es auch ohne IDEFixPack.
Hier nochmals meine Randbedingungen:
Bei mir ist Windows 10 64 Bit 1703, Betriebssystembuild 15063.1088 installiert.
Ich habe SAP GUI 7.5; 7500.2.4.1142; Build 1821220; Patch-Level 4; Hotfix 1
Delphi 10.2.3
TRichEdit bzw. TMemo für die Ausgabe

Rückfrage: Mich wundert es das es bei Dir mit VBA funktioniert. Hast Du meinen Quellcode mal mit Deiner Artikelnummer ausprobiert?


heavybyte 18. Jun 2018 12:23

AW: SAP RFC_READ_TEXT funktioniert nicht mehr
 
Es gibt keine Fehlermeldung/Exception und das Programm bleibt auch nicht hängen. Läuft normal durch, die Ergebnistabelle ist eben leer. Meine ganzen anderen Zugriffe über RFC_READ_TABLE funktionieren einwandfrei.

@Pfaffe: Dein Code habe ich getestet. Läuft einwandfrei, bringt aber kein Ergebnis. Gleiches Verhalten wir mein Code.:(

MichaelT 22. Jun 2018 14:13

AW: SAP RFC_READ_TEXT funktioniert nicht mehr
 
Dem Funktionsbaustein passt höchstwahrscheinlich irgendein 'Parameter' nicht.

Damit der überhaupt einen Fehler ausgibt müsste er auf eine vordefinierte Exception insofern die OCX variante Exception erlaubt zu handeln.

Mein MiniSAP hat den RFC_READ_TEXT nicht und damit fliege ich relativ blind durch die Gegend.

Ultimativ blödeste aller Fragen: Gehen der RFC_READ_TABLE und der RFC_READ_TEXT auf dasselbe System und nicht der RFC_READ_TEXT auf eine Entwicklung oder so.


Im VB sagst du funktioniert es und es kommt kein Ergebnis. Früher hätte ich gesagt in großer Not in SAPRFCini eine Verbindung definieren mit entsprechendem ABAB_DEBUG und USE_SAP_GUI und mal schauen was der FUBA macht.

Aufgerufen wird der FUBA vermutlich synchron? Asynchron ist wie UDP Packet ...

Läuft der FUBA lange oder ist er sofort wieder da?



Zitat:

Zitat von heavybyte (Beitrag 1405081)
Es gibt keine Fehlermeldung/Exception und das Programm bleibt auch nicht hängen. Läuft normal durch, die Ergebnistabelle ist eben leer. Meine ganzen anderen Zugriffe über RFC_READ_TABLE funktionieren einwandfrei.

@Pfaffe: Dein Code habe ich getestet. Läuft einwandfrei, bringt aber kein Ergebnis. Gleiches Verhalten wir mein Code.:(


HAWK_ 8. Feb 2019 07:34

AW: SAP RFC_READ_TEXT funktioniert nicht mehr
 
Ich bin gerade beim Suchen eines anderen Themas hier hängen geblieben.
Ab SAP Gui 7.50 wurde Zugriff über die ActiveX Logon Control und Funtion Control geändert und funktionieren ohne Anpassung nicht mehr. Laut deinem Coding scheinst du diese für den Zugriff auf SAP ja zu nutzen.

SAP hat einige Hinweise zum Thema
Bspw: https://launchpad.support.sap.com/#/notes/2256415

Mit Windows o.Ä. hat das nichts zu tun. Übergangslösung, wäre den alten Gui-Stand (<7.50) wieder zu installieren oder eine Alternative zu entwickeln.

Dumpfbacke 28. Okt 2019 05:55

AW: SAP RFC_READ_TEXT funktioniert nicht mehr
 
Hallo Leute,
gibt es irgendwo in Netz Beispiele zu so etwas oder habt Ihr etwas Code für mich ? Ich muss / soll auch etwas mit SAP machen. Also Werte eintragen und auslesen usw. Mir ist leider überhautp nicht bewusst wie ich so etwas angehen soll. Brache ich dazu extra Komponenten ?

Danke schon einmal Tanja.

MichaelT 28. Okt 2019 08:38

AW: SAP RFC_READ_TEXT funktioniert nicht mehr
 
SAP ist stark Dictionary getrieben und arbeitet viel über Domänen.

In den Domänen ist wie gewohnt der Typ hinterlegt, aber auch das Layout im Control usw. Zu Schlüsselwerten existiert in der Regel (so lala) eine Tabelle mit Vertextungen und die Werden mit dem Funktionsbaustein aka. FUBA (eine Art Funktion im vgl. zu Delphi) gelesen.

Technisch läuft die Sache so. Du rufst die benannte Funktion auf und die liefert dir eine Tabelle zurück. Es handel sich dabei, nicht wortwörtlich nehmen, im Oracle Slang um eine Mischung auf REF-Cursor und Array, sprich um ein typisiertes Array welches serialisiert zum Client wird übertragen (RFC Protocol). Eine einfachere Variante und eine Art vorgänger waren die CPI-C Schnittstelle von IBM. Technisch wird ein Bytestream geliefert der mit den Metadaten aus dem Dictionary wird ausmaskiert. Braucht dich aber in dem Fall nicht zu berühren.

(Zumal SAP die Möglichkeit hat geschaffen Tabellen in Tabellen zurückzugeben wird es bei komplexeren Szenarien mühseliger.)

Es gibt in Delphi Möglichkeiten, aber nicht out of the Box.

Über

a) die C Schnittstell - librfc
b) Überbauten von n-software, GS-SOFT, FireDAC Connectoren usw...
c) Active X Schnittstelle (frage mich nicht ob noch supported)

Offiziell gibt es, so ich mich aus düsterer Vorzeit noch erinnern kann, eine .net Connector und eine Java Connector. Falls ihr mehr macht schnapp die vom Master of SAP ActiveX Patrick Theobald EPRConnect.net. Die SAP hat selbst mittlerweile ein wenig aufgeschlossen. Du kannst das Out of the Box Zeug auch nehmen.

Stellt sich die Frage ob du die Texte nicht geschickt/repliziert bekommen kannst oder nicht über ein REST Schnittstelle exportiert. Das will ich gar nicht mehr wissen.


Zitat:

Zitat von Dumpfbacke (Beitrag 1450342)
Hallo Leute,
gibt es irgendwo in Netz Beispiele zu so etwas oder habt Ihr etwas Code für mich ? Ich muss / soll auch etwas mit SAP machen. Also Werte eintragen und auslesen usw. Mir ist leider überhautp nicht bewusst wie ich so etwas angehen soll. Brache ich dazu extra Komponenten ?

Danke schon einmal Tanja.



Alle Zeitangaben in WEZ +1. Es ist jetzt 21:44 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