[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Mar 2005
    Beiträge
    44

    rpgle Array übergeben

    Hallo,
    kann man in RPGLE ein Array mit einem Serviceprogramm austauschen und wie muss ich das definieren.
    Ich habe es in etwa so versucht:

    Programm was aufruft:

    D array s 5a dim(10)
    D z s 3i 0 inz(1)
    d srfpgm pr like(GNEvent)
    d array# like(array)

    callp srfpgm(array(z));
    *------------------------------------------------
    Serviceprogramm was das Array füllen soll.

    D array s 5a dim(10)
    D z s 3i 0 inz(1)
    d srfpgm pr ike(GNEvent)
    d array# like(array)


    p srfpgm b export
    d srvpgm pi like(GNEvent)
    d array# like(array)

    array#(1) = 'TEST';
    array#(2) ='TEST1';

    return true;

    im Programm was aufruft sind die Werte jetzt aber nicht gefüllt. Ich glaube auch nicht das es so geht. Ich habe es noch mit Pointern versucht, was ich auch nicht hin bekommen habe. Wie macht man das?

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Der CALL muss hier "By Reference" also ohne "value" aufgerufen werden.

    callp srfpgm(array);

    ist somit richtig.

    mit
    callp srfpgm(array(z));
    übergibst du nur die Adresse des Elements Z des Arrays und das führt zu Pufferüberschreibungen (MCH-Fehler wäre noch die beste Variante daraus).

    Besser wäre noch, die Anzahl der verfügbaren Elemente mit zu übergeben, dann wäre es etwas dynamischer.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Hallo,

    Bei der Definition über Like muss die Dimension immer zusätlich mit angegeben werden.

    Like nimmt nur die Feldbeschreibung.

    Bei der Kompilierung wird neben der Felddefinition auch die Anzahl der Feldgruppen-Elemente geprüft. Weichen diese von der Original-Definition ab, erfolgt ein Compile-Fehler. Es sei den die Parameter wurden mit Const oder Value definiert.

    In deinem Programm ist kein Compile-Fehler aufgetreten, da nur ein einzelnes Feld definiert war, und Du auch nur ein Feldgruppen-Element, also wiederum nur ein einzelnes Feld übergeben hast.

    Die Schlüsselworte VALUE oder CONST können nur für Input Only Parameter verwendet werden. Bei VALUE wird ein neues Feld (auch Feldgruppe) erzeugt, mit der erwarteten Definition, Datentyp, Länge und Anzahl Feldgruppenelemente und mit dem übergebenen Wert intitalisiert. Anschließend wird diese Kopie an die rufende Prozedur übergeben. Bei CONST wird nur dann ein neues Feld erstellt, wenn die Parameterdefinition abweicht.

    Übrigens vergiss die Geschichte mit Pointer übergeben, da mit Ausnahme der Parameter, die mit VALUE definiert sind, sowieso ein Pointe, also die Adresse des Parameterfeldes übergeben wurde.

    Die Anzahl an Feldgruppenelemente als Parameter zu übergeben, würde ich nur dann, wenn die Feldgruppe viele Elemente hat, vondenen nur wenige gefüllt sind. Zur Prüfung, ob die richtige Anzahl an Elementen übergeben wurde, trägt diese Information nicht unbedingt bei, da das Ganze über Prototyping geprüft wird.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  4. #4
    Registriert seit
    Mar 2005
    Beiträge
    44
    Vielen dank für die schnellen Antworten. Das Programm funktioniert mittlerweile. Nochmals danke

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Prototyping ist leider absolut unsicher (zieht nur zur Compilizeit), da ich nachträglich das Serviceprogramm ändern kann ohne alle anderen Programme mitzuändern, was dann ggf. zu Problemn führt.

    Die Anzahl der Elemente ist da schon sicherer, da ich das Servicemodul dann flexibler erweitern kann.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  6. #6
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    Hallo,

    wenn ich nicht mit Signaturen rumspiele, dann lässt sich das geänderte Serviceprogramm nicht mehr aufrufen, bevor man neu gebunden hat - man muss da schon aktiv sagen, dass man Huddel haben will.

    mfg

    Dieter Bender

    Zitat Zitat von Fuerchau Beitrag anzeigen
    Prototyping ist leider absolut unsicher (zieht nur zur Compilizeit), da ich nachträglich das Serviceprogramm ändern kann ohne alle anderen Programme mitzuändern, was dann ggf. zu Problemn führt.

    Die Anzahl der Elemente ist da schon sicherer, da ich das Servicemodul dann flexibler erweitern kann.
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

Similar Threads

  1. Cobol <> RPGLE
    By Xanas in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 13-12-06, 13:38
  2. RPGLE - SQL
    By christian_lettner in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 16-11-06, 10:15
  3. ILE RPG und dynamisches Array
    By Squall in forum NEWSboard Programmierung
    Antworten: 9
    Letzter Beitrag: 10-10-06, 08:53
  4. Im Array suchen
    By stoerfang in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 11-08-06, 13:49
  5. Zweidimensionales Array
    By stoerfang in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 09-08-06, 14:08

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •