PDA

View Full Version : hinzufügen Prozedur in bestehendes Serviceprogramm



Tonazzo
11-03-14, 00:13
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)
<tt> EXPORT SYMBOL(<tt>Proz1</tt>) </tt> <tt>
EXPORT SYMBOL(<tt>Proz2</tt>) </tt> <tt>
EXPORT SYMBOL(<tt>Proz3</tt>)
<tt> EXPORT SYMBOL(<tt>NEUE_PROZEDUR1</tt>)
</tt> <tt>EXPORT SYMBOL(<tt>Proz4</tt>) </tt> <tt>
EXPORT SYMBOL(<tt>Proz5</tt>)
<tt>....</tt>
</tt> <tt>EXPORT SYMBOL(<tt>NEUE_PROZEDUR2</tt>)</tt></tt> <tt>
ENDPGMEXP
</tt>
STRPGMEXP PGMLVL(*PRV)<tt>
SIGNATURE(X'</tt>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

B.Hauser
11-03-14, 06:53
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

BenderD
11-03-14, 07:37
... 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

Fuerchau
11-03-14, 08:08
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.

Tonazzo
11-03-14, 10:23
Hallo,

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

STRPGMEXP PGMLVL(*CURRENT)
<TT>EXPORT SYMBOL(<TT>Proz1</TT>) </TT><TT>
EXPORT SYMBOL(<TT>Proz2</TT>) </TT><TT>
EXPORT SYMBOL(<TT>Proz3</TT>)
<TT>EXPORT SYMBOL(<TT>Proz4</TT>) </TT><TT>
EXPORT SYMBOL(<TT>Proz5</TT>)
<TT>....</TT>
EXPORT SYMBOL(<TT>Proz10</TT>)
EXPORT SYMBOL(<TT>NEUE_PROZEDUR1</TT>)
</TT><TT>EXPORT SYMBOL(<TT>NEUE_PROZEDUR2</TT>)</TT></TT> <TT>
ENDPGMEXP
</TT>
STRPGMEXP PGMLVL(*PRV)
EXPORT SYMBOL(<TT>Proz1</TT>) <TT>
EXPORT SYMBOL(<TT>Proz2</TT>) </TT><TT>
EXPORT SYMBOL(<TT>Proz3</TT>)
<TT>EXPORT SYMBOL(<TT>Proz4</TT>) </TT><TT>
EXPORT SYMBOL(<TT>Proz5</TT>)
<TT>....</TT>
EXPORT SYMBOL(<TT>Proz10</TT>)
</TT></TT>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

Fuerchau
11-03-14, 10:26
Innerhalb des Serviceprogrammes ist die Reihenfolge egal.