View Full Version : SAP API's
Hallo zusammen,
SAP liefert für System i ein Serviceprogramm LIBRFC mit API's für die Realisierung von remote function calls. Ich suche dafür eine brauchbare Dokumentation mit Parameterangaben usw. für ILE RPG. Es kursieren diverse Beschreibungen im Web die sich alle mit C++ befassen. Hat jemand einen Tipp?
Danke für jeden Hinweis und viele Grüße.
Dazu muss es doch erst mal eine Beschreibung der API's dieser Serviceprogramme von SAP geben.
Nun liegt es an dir, aus den C-Aufrufen entsprechende ILERPG-Prototypen zu stricken.
Stell mal einfach so eine Deklaration (Beschreibung) des SAP-Aufrufes hier rein, mal sehen, wie dann der Prototyp für RPG aussehen müsste.
Kein Problem, z.B. C:
ITAB_H ItCreate(char * name,
unsigned leng,
unsigned occu,
unsigned memo);
Call sieht so aus:
ITAB_H handle;
void * ptr;
handle = ItCreate(“MyTable”, myTableSize, 0,0);
Hierfür sieht die RPG Definition dann aber so aus:
D TabName S 31A
D TabNameP S 16* INZ(%ADDR(TabName))
D Leng S 10U 0 INZ(0)
D Occu S 10U 0 INZ(0)
D Memo S 10U 0 INZ(0)
d ITabH S 16* INZ(*NULL)
DItCreate PR * EXTPROC('ItCreate')
D PARM1 LIKE(TabNameP) value
D PARM2 LIKE(Leng) value
D PARM3 LIKE(Occu) value
d PARM4 LIKE(Memo) value
// anlegen der internen Tabelle
TabName = 'TAB1' + NULL;
Leng = 20;
Occu = 2;
Memo = 0;
ITabH = ItCreate(TabNameP:Leng:Occu:Memo);
Ich kenne mich in C überhaupt nicht aus. Was mich stutzig macht, ist schon mal, dass der Tabellenname in C wohl als String übergeben wird, in RPG aber der Zeiger auf den Namen. Die RPG Zeilen sind aus einem Beispielsprogramm zitiert.
Converting from C prototypes to RPG prototypes (http://www-949.ibm.com/software/rational/cafe/servlet/JiveServlet/previewBody/2679-102-1-3613/Converting_C_Prototypes_To_RPG.html)
Für die diversen Parameter gibt es auch entsprechungen.
Wichtig ist beim Prototyp folgendes:
Parameter ohne "*" bzw. "&" werden als "Value" übergeben, Strings können als "CONST OPIONS(*STRING)" definiert werden.
Der Prototyp sieht dann ganz einfach sos aus:
DItCreate PR * EXTPROC('ItCreate')
D PARM1 256 value options(*string)
D PARM2 10U value
D PARM3 10U value
d PARM4 10U value
Da die Funktion mit "*" wohl einen Pointer zurückgibt, muss auch das Ziel als Pointer angegeben werden:
D Handle *
der Aufruf dann einfach:
Handle = ItCreate('TAB1': 20: 2: 0);
Wichtig ist ggf. noch, ob es bei anderen Funktionen zur Verwendung des Handles kommt. In diesem Fall ist der Pointer auch als "value" zu übergeben, sonst wird die Adresse des Pointers verwendet:
DFunction PR * EXTPROC('Function')
D PARM1 * value
PS:
Parameter als Value bzw. Const können beim Aufruf direkt angegeben werden und bedürfen keiner Hilfsvariablen. Das macht die Sache dann leichter lesbar.
Danke Euch, das erklärt Einiges. Dann werde ich mir anhand des Links für die andern API's die Parameter RPG konform umschreiben.
Wäre natürlich schöner wenn es da eine passende Beschreibung für die System i API's gäbe.