[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Mar 2014
    Beiträge
    33

    hinzufügen Prozedur in bestehendes Serviceprogramm

    Hallo zusammen,

    ich muss ein vorhandenes Serviceprogramm ändern indem ich 2 neue Prozeduren hinzufüge. Das Serviceprogramm beinhaltet bereits 10 Prozeduren. Diese neuen Prozeduren will ich nicht am Ende anhängen sondern mittendrin. Geschrieben - getan.

    Ich habe auch die Binderdefinition wie folgt geändert (blaue Einträge):

    STRPGMEXP PGMLVL(*CURRENT)
    EXPORT SYMBOL(Proz1)
    EXPORT SYMBOL(Proz2)

    EXPORT SYMBOL(Proz3)
    EXPORT SYMBOL(NEUE_PROZEDUR1)
    EXPORT SYMBOL(Proz4)
    EXPORT SYMBOL(Proz5)
    ....
    EXPORT SYMBOL(NEUE_PROZEDUR2)

    ENDPGMEXP

    STRPGMEXP PGMLVL(*PRV)
    SIGNATURE(X'
    4A5AE6D8F472C409BC1E294E76E16998')
    ENDPGMEXP


    Die Programme, die heute bereits Prozeduren dieses Serviceprogramm aufrufen
    sollen natürlich problemlos weiterlaufen, ohne das eine erneute Umwandlung nötig ist.
    Deshalb der *PRV Eintrag mit der vorherigen Signatur.
    Ist das alles so korrekt? Oder müssen neue Prozeduren an den Schluss - und wenn ja brauche ich noch den *PRV Eintrag in der Binderdefinition? Viele Dank im Voraus

    Gruß
    Tonazzo

  2. #2
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    In der Bindersprache müssen neue Prozeduren IMMER ans Ende der Current Export Liste angefügt werden. Dies ist erforderlich, da die Prozeduren nach der eingetragenen Reihenfolge zugeordent werden. Wenn Du also die NEUE_PROZEDUR1 nach Proz3 einfügst, wird versucht diese anstelle von Proz4 in den vorhandenen (Service-)Programmen auszuführen.

    Der Previous Block muss neben der vorherigen Signatur auch alle (vorherigen) EXPORT-Einträge in der richtigen Reihenfolge beinhalten.

    Da Du die Signatur automatisch generieren lässt und nicht fix vorgibst ist der Previous-Eintrag erforderlich, wenn alles wie gehabt laufen soll und keine erneutes Binden/Erstellen der rufenden (Service)-Programme erfolgen soll. Die Signatur ist in den rufenden (Service-)Programmen gespeichert.

    Birgitta
    Birgitta Hauser

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

  3. #3
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    ... in einer geschlossenen Umgebung (:= das Serviceprogramm wird nur in meiner eigenene Applikation benutzt) ist es zumeist einfacher (und sicherer) einfach immer mit export (*ALL) zu wandeln und die abhängigen Komponenten neu zu binden. Damit wird auch Binder Language völlig überflüssig und die automatisch generierten Signaturen verhindern die meisten Probleme schon im Ansatz (vergleichbar mit Level check bei Dateien)

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Wie immer unterscheiden sich die Meinungen.
    Mit Binderlanguage gehören die neuen Exporte immer ans Ende!
    Eine neue Signatur ist nicht erforderlich, wenn diese nicht automatisch sondern manuell vergeben wird.
    Bei automatischer Signatur errechnet sich diese aus der Reihenfolge der Exporte, da ist hier der *PRV-Eintrag schädlich!
    In bestehenden Programmen erfolgt der Aufruf über die relative Position des Eportes.
    Durch den *PRV-Eintrag gaukelst du den alten Programmen vor, dass sich an dieser Folge nichts geändert hat so dass falsche Aufruf durchgeführt werden.
    Durch die automatische Signatur auch bei Beibehaltung der Reihenfolge ist ein Neubinden erforderlich.
    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

  5. #5
    Registriert seit
    Mar 2014
    Beiträge
    33
    Hallo,

    danke für die Antworten.
    Also folgend meine neue Bindedefinition:

    STRPGMEXP PGMLVL(*CURRENT)
    EXPORT SYMBOL(Proz1)
    EXPORT SYMBOL(Proz2)

    EXPORT SYMBOL(Proz3)
    EXPORT SYMBOL(Proz4)
    EXPORT SYMBOL(Proz5)
    ....
    EXPORT SYMBOL(Proz10)
    EXPORT SYMBOL(NEUE_PROZEDUR1)
    EXPORT SYMBOL(NEUE_PROZEDUR2)

    ENDPGMEXP

    STRPGMEXP PGMLVL(*PRV)
    EXPORT SYMBOL(Proz1)
    EXPORT SYMBOL(Proz2)

    EXPORT SYMBOL(Proz3)
    EXPORT SYMBOL(Proz4)
    EXPORT SYMBOL(Proz5)
    ....
    EXPORT SYMBOL(Proz10)
    ENDPGMEXP


    Muss eigentlich im Serviceprogramm selbst die Reihenfolge ebenfalls eingehalten werden.
    D.H. Müssen die Reihenfolge der Prozeduren im Serviceprogrammes und Binderdefinition identisch sein
    oder kann ich im Serviceprogramm einfach neue Prozeduren mittendrin implementieren - solange sie
    in der Bindedefinition am Ende angelegt werden.


    Vielen Dank.

    Gruß

    Tonazzo

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Innerhalb des Serviceprogrammes ist die Reihenfolge egal.
    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

Similar Threads

  1. SQL Funktion ruft Serviceprogramm auf - Parameter übergabe
    By loisl in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 08-11-13, 16:37
  2. Platteneinheiten hinzufügen
    By moeller400 in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 28-06-01, 06:41

Berechtigungen

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