[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Aug 2004
    Beiträge
    1

    Service Programm in mehreren Bibliotheken

    Hallo,

    ich hätte mal ne Frage.

    Ich habe ein Service Programm geschrieben. Dieses steht in einer
    Standard Bibliothek. Nun muss ich dieses SRVPGM für einen Kunden anpassen,
    d.h. in der Kundenbibl. vorlagern.

    Hierbei hab ich jetzt das Problem, wie muss ich das SRVPGM binden damit es
    wenn ich in der Standard-Umgebung bin, das SRVPGM aus der Stanardbibl. zieht und in der Kundenumgebung das SRVPGM aus der Kundenbibl.

    Bei mir gibts immer nen CPF, weil er immer auf das zu letzt gewandelte SRVPGM zugreift.

    Weiß jemand Rat.

    Gruß
    Christoph

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Die Verweise auf Service-Programme werden bereits zur Erstellung (Binderverzeichnis) festgelegt.
    Die Lib für Service-PGM'e braucht daher auch nicht in der Libl zu stehen. Es kann daher keine 2 Versionen eines Service-Pgm's geben.
    Um 2 Versionen zu haben, müssen auch alle Programme, die dieses Service-PGM nutzen in einer 2. Version erstellt werden.

    Der Call auf eine Funktion/Prozedur nennt sich auch "statisch", weil die Adresse zur Funktion eine Konstante ist.

    Um dynamische Call's zu verwenden muss man die Lösung "dynamischer Call von Prozeduren" von Dieter Bender (auf seiner Homepage) verwenden.

    Die andere Version wäre halt wieder ein dynamischer Call eines Programmes an Stelle einer Prozedur, da das Programm immer über die Libl gesucht wird.
    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
    Mar 2002
    Beiträge
    5.287
    Hallo Christoph,

    das sieht so aus, als ob da mit den Signaturen was krumm ist; das Binden scheint korrekt zu sein, sonst käme keine Fehlermeldung. Schreib doc mal genauer, was Du für eine CPF bekommst und was Du genau machst.

    @Baldur: Das ist doch gerade der Trick bei Serviceprogrammen, dass keine festen Adressen gebunden werden, sondern nur ein (auch per LIBL auflösbarer) Link auf das Serviceprogramm (entspricht DLL), über den die Adressen der Prozeduren bei Aktivierung aufgelöst werden.
    Beim dynamischen Binden wird das Serviceprogramm gesteuert aktiviert und die Referenzen zu den Prozeduren explizit zugeordnet.

    mfg

    Dieter Bender

    Zitat Zitat von Christoph
    Hallo,

    ich hätte mal ne Frage.

    Ich habe ein Service Programm geschrieben. Dieses steht in einer
    Standard Bibliothek. Nun muss ich dieses SRVPGM für einen Kunden anpassen,
    d.h. in der Kundenbibl. vorlagern.

    Hierbei hab ich jetzt das Problem, wie muss ich das SRVPGM binden damit es
    wenn ich in der Standard-Umgebung bin, das SRVPGM aus der Stanardbibl. zieht und in der Kundenumgebung das SRVPGM aus der Kundenbibl.

    Bei mir gibts immer nen CPF, weil er immer auf das zu letzt gewandelte SRVPGM zugreift.

    Weiß jemand Rat.

    Gruß
    Christoph
    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
    @Dieter
    Stimmt, nur die C-Routinen und die Runtime-Funktionen sind "hart" verbunden.

    @Chrisoph
    Wichtig ist also, dass ALLE Serviceroutinen in dem anderen Service-Programm enthalten sind.
    Es kann also nicht eine Routine über LibA und die andere über LibB ermittelt werden, da die Suchfolge 1. Programm und 2. Routine ist.
    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 2002
    Beiträge
    5.287
    Hallo,

    @Baldur
    am Besten sieht man am CRTPGM und DSPPGM was da geht:
    man kann ein SRVPGM mit *LIBL binden und qualifiziert und das geht für jedes SRVPGM extra.
    Im PGM Objekt sind dann alle benötigten Procedures über ihre Serviceprogramme gebunden und werden bei Aktivierung (zur Startzeit des Programmes) entsprechend der Bindeangabe (LIBL oder qualifiziert) auf Procedure Pointer vernagelt. Selbstverständlich müssen die zur Laufzeit (wie auch immer) gefundenen Serviceprogramme dieselbe Signatur haben (die gleichen Exporte anbieten), wie das SRVPGM, das beim Compile verwendet wurde (nur Virtuosen oder Wahnsinnige verwalten Signaturen selber und wer ist schon Virtuose?!).
    Zur Aufrufzeit werden dann nur noch Procedure Pointer stumpf verwendet, wenn das schief geht, geht's halt schief.
    An die Runtime Funktionen kommt man nicht dran, da hier die Bindeangaben hart verdrahtet sind, zudem werden diese nicht als SRVPGM, sondern als Module by copy gebunden und alles was by copy gebunden wird steht zur Compiletime statisch im PGM Objekt drin. Soweit C Routinen (welche auch immer) über ein SRVPGM by reference gebunden werden, lässt sich LIBL oder qualifiziert wieder einstellen, im Binding Directory, oder beim BNDSRVPGM des CRTPGM - genau diese Lage ist einer der wesentlichen Gründe, weshalb ich dazu rate auf Binding Directories zu verzichten, den Quatsch mit Binder Language zu unterlassen und stattdessen die Create Befehle in die Quellen zu schreiben (da gibt es ein kleines Tool auf meiner Freeware Seite...) oder Change Management Software zu verwenden.

    mfg

    Dieter Bender

    Zitat Zitat von Fuerchau
    @Dieter
    Stimmt, nur die C-Routinen und die Runtime-Funktionen sind "hart" verbunden.

    @Chrisoph
    Wichtig ist also, dass ALLE Serviceroutinen in dem anderen Service-Programm enthalten sind.
    Es kann also nicht eine Routine über LibA und die andere über LibB ermittelt werden, da die Suchfolge 1. Programm und 2. Routine ist.
    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. Programm auf "ferner" AS400 ausführen.
    By Souljumper in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 13-05-09, 19:50
  2. Zu einem Programm die Service-Attribute ändern!
    By ExAzubi in forum IBM i Hauptforum
    Antworten: 6
    Letzter Beitrag: 18-01-07, 15:06
  3. Programmbibliothek in einem Cobol oder CL Programm ermitteln
    By schatte in forum NEWSboard Programmierung
    Antworten: 19
    Letzter Beitrag: 10-01-07, 11:32
  4. iSeries mit mehreren virtuellen Instanzen
    By Christian.Hesse in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 25-11-06, 05:57

Berechtigungen

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