Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi SAP - TSAPFunctions (https://www.delphipraxis.net/169926-sap-tsapfunctions.html)

Pfaffe 21. Aug 2012 15:17

SAP - TSAPFunctions
 
DelphiXE
Ich verwende verschiedene RFCs um mit SAP zu kommunizieren. Nun gibt es ein neues RFC 'Z_SD_PROJECT_CHANGED' welches getestet werden soll. Beim Zuweisen der RFC-Bezeichnung an TSAPFunctions kommt es in der unit ComObj in der procedure DispCallByID in der Zeile CALL DispCall zum EOleException mit der Meldung 'SAP Remote Function Call unicode'.
Vielleicht habe ich Glück und jemand Anderes hatte bereits dieses Problem und kann mir einen Tipp geben?

Delphi-Quellcode:
function TFSAP.test: string;
var
  Funct: OleVariant;
  lVkOrg: string;
begin
//   Funct:= SAPFunctions1.add('ZSD_KM_NETTOPREISLISTE_GETVAL'); // Funktioniert
  Funct:=   SAPFunctions1.add('Z_SD_PROJECT_CHANGED'); // Bei der Zuweisung kommt es zum Error "SAP Remote Function Call unicode"
  if not Funct.call then
    result:= Funct.exception
  else
    result:= Funct.imports('E_SUBRC').value;
end;

mjustin 21. Aug 2012 15:36

AW: SAP - TSAPFunctions
 
Zitat:

Zitat von Pfaffe (Beitrag 1179064)
'SAP Remote Function Call unicode'.

Benutzt das OLE Objekt zur Kommunikation mit dem SAP Server noch eine Konfigurationsdatei? Ich kenne es von JCO (dem Java Connector), dass man in der Konfiguration ein unicode-Flag setzen muss.

shmia 21. Aug 2012 15:49

AW: SAP - TSAPFunctions
 
Bei der Installation der SAP GUI kann man angeben ob man Unicode RFC Libraries haben möchte oder nicht.
Möglicherweise :glaskugel: hast du keine Unicode RFC Libraries installiert, aber der Funktionsbaustein benützt explizit Unicode.

Pfaffe 22. Aug 2012 12:34

AW: SAP - TSAPFunctions
 
Ich habe bereits verschiedene RFCs erfolgreich im Einsatz.
In Delphi beim Import der Typenbibliotheken gebe ich an ob ich die unicode-Varianten haben möchte.
Nun habe ich zum Test die nicht Unicode-Varianten importiert. Jetzt kommt die EOLEExeption "SAP Remote Function Call". Bereits schon funktionierende RFCs machen weiterhin keine Probleme. Irgendwas ist an dem neuen Teil faul. Selbstverständlich wurde bereits vor meinem ersten Posting SAP-Seitig alles untersucht, um Unterschiede zwischen dem neuen RFC und den bereits funktionierenden RFCs zu erkennen. In SAP selbst funktionert der neue RFC natürlich.
In der procedure DispCall aus der unit comobj kommt der nicht funktionierende RFC in den Block @@20 und ruft dort die Zeile JMP DispCallError auf. DispCallError wirft dann den Error. Bei den funktionierenden RFCs wird nicht in den Block @@20, sondern in den Block @@30 gesprungen. Assembler ist nicht meine Baustelle, hat Jemand noch eine Idee?
Delphi-Quellcode:
Auszug aus der procedure DispCall aus der unit comobj
@@20:  MOV    DispParams.rgdispidNamedArgs,ESP
        PUSH   EDX                    { ArgErr }
        LEA    EAX,ExcepInfo
        PUSH   EAX                    { ExcepInfo }
        PUSH   ECX
        PUSH   EDX
        CALL   ClearExcepInfo
        POP    EDX
        POP    ECX
        PUSH   Result                 { VarResult }
        LEA    EAX,DispParams
        PUSH   EAX                    { Params }
        PUSH   ECX                    { Flags }
        PUSH   EDX                    { LocaleID }
        PUSH   OFFSET GUID_NULL       { IID }
        PUSH   DispID                 { DispID }
        MOV    EAX,Dispatch
        PUSH   EAX
        MOV    EAX,[EAX]
        CALL   [EAX].Pointer[24]
        TEST   EAX,EAX
        JE     @@30
        LEA    EDX,ExcepInfo
        MOV    CL, 1
        PUSH   ECX
        MOV    ECX,[EBP+4]
        JMP    DispCallError
@@30:  MOV    ESP,EDI
        POP    EDI
        POP    ESI
        POP    EBX

shmia 22. Aug 2012 13:01

AW: SAP - TSAPFunctions
 
Der Knackpunkt ist doch:
Weshalb funktioniert der Baustein ZSD_KM_NETTOPREISLISTE_GETVAL aber Z_SD_PROJECT_CHANGED erzeugt einen Fehler?

Die Ursache muss in den Import/Export/Tabellenparametern liegen.
Kopiere doch mal Z_SD_PROJECT_CHANGED nach Z_SD_PROJECT_CHANGED_TEST.
Den Quelltext des Test-Bausteins bitte komplett löschen.
Dann wird immer ein Parameter nach dem anderen gelöscht und zwar solange bis
Delphi-Quellcode:
Funct:= SAPFunctions1.add('Z_SD_PROJECT_CHANGED_TEST')
keinen Fehler mehr erzeugt.
Der Parameter, den du direkt davor gelöscht hast ist die Ursache der Probleme.

Changing-Parameter darf man übrigens mit dem "SAP Remote Function Call Control" nicht benützen
(zumindest nach meiner Erfahrung).

Pfaffe 22. Aug 2012 14:20

AW: SAP - TSAPFunctions
 
Erstmal vielen Dank an Alle!
Und Entschuldigung, ich habe die Zugangsdaten zu unserem SAP I-System durcheinandergewirbelt und der Login ging in das K-System wo es den neuen Funktionsbaustein noch nicht gibt. :oops:
Ich hatte mich zu sehr auf die Fehlermeldung konzentriert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:24 Uhr.

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