[gelöst] Funktion aus einer ActiveX ist reserviertes Wort

Rund um die LCL und andere Komponenten
Antworten
Benutzeravatar
willi4willi
Lazarusforum e. V.
Beiträge: 155
Registriert: Sa 1. Nov 2008, 18:06
OS, Lazarus, FPC: Windows, Linux (debian) / Lazarus 3.2 / FPC 3.2.2
CPU-Target: i386, win64, arm

[gelöst] Funktion aus einer ActiveX ist reserviertes Wort

Beitrag von willi4willi »

Hallo!

ich habe folgendes Problem:

Um auf RFCs von SAP zuzugreifen, verwende ich die OCX des SapGui.

Über das Werkzeug "Import Type Libary" habe ich die SAPFunctionsOCX_5_0_TLB erzeugt. Um die Tabelle zu übergeben, muss ich eine Funktion "Exports" aufrufen.

Code: Alles auswählen

 
procedure TForm1.Button1Click(Sender: TObject);
var txt : string  ;
    r   : integer ;
    Table, Funct : variant;
begin
  { Funktion definieren }
  Funct:=Ifunction(AxcSAPFunctions1.OleServer.add('RFC_READ_TABLE'));
 
 { Der Funktion übergeben, welche Tabelle gelesen werden soll }
  Funct.Exports('QUERY_TABLE').value := 'CSKT';                                    // <------------------------------- hier!
 
  { Funktion ausführen }
  if not Funct.call then
 
    { Bei Fehler Meldung anzeigen }
    showMessage(Funct.exception)
 
  else begin
 
    { Tabelle mit den Daten selektieren }
    Table := Funct.tables.item('DATA');
 
...
 
 


Das ist aber ein reserviertes Wort.

Beim Import der OCX hat der Assistent die Funktion in "Export_" umbenannt.

Code: Alles auswählen

 
Unit SAPFunctionsOCX_5_0_TLB;
 
//  Imported SAPFunctionsOCX on 19.02.2019 22:23:33 from F:\ZugriffAufSAP\Bibliotheken\Ansi\system32\wdtfuncs.ocx
 
{$mode delphi}{$H+}
 
interface
 
//  Warning: renamed coclass 'Function' to 'Function_'
//  Warning: renamed coclass 'Exports' to 'Exports_'
//  Warning: renamed property 'Type' in IStructure to 'Type_'
//  Warning: renamed property 'Function' in IStructure to 'Function_'
//  Warning: renamed property 'Exports' in IFunction to 'Exports_'                                   // <-----------------   hier sagt er das auch
//  Warning: renamed property 'Type' in IParameter to 'Type_'
//  Warning: renamed property 'Function' in IParameter to 'Function_'
Uses
  Windows,ActiveX,Classes,Variants,ActiveXContainer;
Const                                                   
...
 
// IFunction :
 
 IFunction = dispinterface
   ['{695B9700-2F2C-11CF-9AE5-0800096E19F4}']
    // Call : Call the function in R/3 return whether successfull
   function Call:WordBool;dispid 6;
   // CallIndirect : Call a function module in R/3 indirectly; use the transactional RFC interface.
   // Importing parameters are not supported. If an error occurs, the RFC client program has to
   // reconnect to R/3 later and repeat this RFC call with the specific TransID.
   function CallIndirect(tranID:WideString):WordBool;dispid 11;
    // Exports : Export parameter collection - Returns whole collection, or single item (if parameter not empty)
   property Exports_:IDispatch  readonly dispid 9;                                         // <---------------------- und hier macht er das auch
    // Imports : like Exports: item is empty, string or number. For whole collection or single Parameter object
   property Imports:IDispatch  readonly dispid 10;
 
 ...       
 
 


Wenn ich nun statt dessen:

Code: Alles auswählen

   Funct.Exports_('QUERY_TABLE').value := 'CSKT'


aufrufe, dann kann ich das Programm zwar übersetzen, aber die Funktion findet er zu Laufzeit natürlich nicht.

Eine Änderung auf

Code: Alles auswählen

   property Exports_:IDispatch  readonly dispid 9 name 'Exports';     


hat nichts gebraccht.

Meine Frage: Wie bekomme ich das hin, dass ich diese Funktion trotzdem aufrufen kann?

Vielen Dank schon im Voraus!
Zuletzt geändert von willi4willi am Mi 20. Feb 2019, 15:28, insgesamt 1-mal geändert.
 

Viele Grüße

Willi4Willi

------------

marcov
Beiträge: 1100
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: Funktion aus einer ActiveX ist reserviertes Wort

Beitrag von marcov »

Funct.&Exports.....

(Ist aber 3.0+ denk ich)

Benutzeravatar
willi4willi
Lazarusforum e. V.
Beiträge: 155
Registriert: Sa 1. Nov 2008, 18:06
OS, Lazarus, FPC: Windows, Linux (debian) / Lazarus 3.2 / FPC 3.2.2
CPU-Target: i386, win64, arm

Re: [gelöst] Funktion aus einer ActiveX ist reserviertes Wor

Beitrag von willi4willi »

Danke! Das hat super geklappt. Manchmal ist es nur eine Kleinigkeit und man sucht tagelang.

Ich habe bei der Definition den Unterstrich weggenommen und dann die Funktion mit dem & aufgerufen und schon ging es.
 

Viele Grüße

Willi4Willi

------------

kirchfritz
Beiträge: 169
Registriert: Mo 3. Jan 2011, 13:34
OS, Lazarus, FPC: Win10 (L 3.0 FPC 3.2.2)
CPU-Target: 64Bit
Wohnort: Nürnberg

Re: [gelöst] Funktion aus einer ActiveX ist reserviertes Wor

Beitrag von kirchfritz »

Hallo willi4willi,

könntest Du mal ein lauffähiges Mini Demo Programm hochladen, das zeigt, wie sich ein Lazarus Programm am SAP anmeldet (wahrscheinlich mit einem SAP-Logon Control) und dann mit RFC_Read_Table den Inhalt einer Tabelle mit Showmessage ausgibt.

Die SAPFunctionOCX_5_0_TLB.pas habe ich schon aus der Type Library erstellt, aber jetzt weiß ich damit nicht weiter umzugehen.

Viele Grüße
Fritz

Benutzeravatar
willi4willi
Lazarusforum e. V.
Beiträge: 155
Registriert: Sa 1. Nov 2008, 18:06
OS, Lazarus, FPC: Windows, Linux (debian) / Lazarus 3.2 / FPC 3.2.2
CPU-Target: i386, win64, arm

Re: [gelöst] Funktion aus einer ActiveX ist reserviertes Wor

Beitrag von willi4willi »

Meine Antwort ist hier.
 

Viele Grüße

Willi4Willi

------------

Antworten