[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    May 2004
    Beiträge
    470
    Eine Frage noch. Was genau macht den Unterschied zwischen *NEW und einer benamten Aktivierungsgruppe aus.
    Ich verstehe schon, dass wenn ich mit *NEW ein CL aufrufe, dass es immer einen neuen Namen für eine Activation Group gibt. Wenn ich das Programm mit z.B. ACTGRP(meinName) aufrufe, dass es immer in dieser Activation Group mit neinName läuft. Aber was ist der Vorteil? Bzw. verhält es sich anders wenn ich die Aktivierungsgruppe verlasse und erneut das Programm aufrufe?

  2. #2
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    ... eine Programm in einer benannten Aktivierungsgruppe verhält sich bei erneutem Aufruf wie ein OPM Programm, das man offen hält (return ohne LR).
    Schließen einer Aktivierungsgruppe schließt alles mit ein, was innerhalb der Actgrp liegt, auch alles, was mit *CALLER aufgerufen wurde. *NEW schließt immer automatisch, RCLACTGRP nur auf Anforderung.
    Bei Rekursion (gewollt oder ungewollt) schmiert ein Programm mit benannter ACTGRP ab (wie OPM), bei *NEW gibt es dann mehrere (mit allen Konsequenzen).

    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/

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Wenn man mit Main-Prozedur arbeitet, gibts kein Abschmieren mehr. Die Rekursionsprüfung machte die Zyklus-Runtime und die gibts da ja nicht mehr.
    Wenn dann das 1. Main einer ACTGRP endet, wird aufgeräumt. INLR interssiert da niemand mehr.

    Bei COBOL bin ich da schon mal reingefallen. Die Anweisung STOP RUN beendet die Cobol-Rununit auch von der untersten Callebene aus. Will man schrittweise in der Aufrufebene zurück, muss man GOBACK verwenden.

    COBOL ist übrigens auch rekursiv aufrufbar, da die Runtime das hier nicht prüft.
    Allerdings mit ähnlichen Konsequenzen wie bei RPG.
    Ein EXSR / Perform ruft keine Unteroutine auf, sondern setzt eine Sprungmarke auf den Befehl danach und am Ende von EXSR/Perform gibts ein GOTO Sprungmarke.
    Das erklärt auch, warum EXSR/Perform nicht rekursionsfähig ist.
    Wenn das Programm dann nochmal aufgerufen wird, werden diese Sprungmarken initialisiert.
    Ruft man also ein Programm aus EXSR/Perform heraus rekursiv auf, dann läuft das Programm nach dem untergeordneten return geradeaus weiter.

    Das hat auch bei ILERPG mit Main() dieselben Konsequenzen, wenn man da noch EXSR verwenden sollte.

    Benannte ACTGRP's haben den Vorteil, dass man Anwendungen strikt trennen kann.
    Ich hatte früher schon mal Schwierigkeiten, wenn aus Anwendung A, z.B. ERP, Anwendung B, z.B. Buchhaltung aufgerufen werden sollte.
    ERP und Buchhaltung haben unterschiedliche Libs, Dateien, Journale, Commitgrenzen.

    Wie Dieter schon schrieb, ILEProgramme mit Zyklus verhalten sich wie OPM in der ACTGRP. Bei *INLR = *OFF bleibt die ACTGRP erhalten. Bei *INLR = *ON wird aufgeräumt.
    Bei Main() wird (fast) immer aufgeräumt.
    Wird ein Main-Programm mit Escape-Message abewürgt, wird nicht aufgeräumt.
    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

  4. #4
    Registriert seit
    May 2004
    Beiträge
    470
    Hallo zusammen. Erst mal vielen Dank für alle Antworten.

    Ich schreibe es mal wie ich es verstanden habe. Allerdings möchte ich auf rekursive Aufrufe erst mal nicht eingehen, denn die machen wir nicht.

    Gehen wir von Program C1 aus mit ACTGRP(C1)
    Programm C1 ruft Programm R1 auf. ACTGRP(*CALLER) (R1 endet mit *INLR = *on)
    Programm R1 ruft Programm R2 auf. ACTGRP(*CALLER) (R2 endet mit RETURN)

    Jetzt bin ich am Ende des C1. Was genau muss ich machen, damit die Dateien aus R2 geschlossen werden.

    So wie ich DBender verstehe, bleiben dann die Dateien aus R2 offen.
    Um sie zu schließen muss ich einen RCLACTGRP machen. Aber dann sind sie auch zu.
    Bitte einmal abnicken :-)

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Wenn eine ACTGRP endet, mit dem ersten Programm dass diese gestartet hat, wird aufgeräumt.
    Bei OPM ist das ja genauso, nur dass das 1. Programm im Job die DFTACTGRP erstellt und diese erst geschlossen wird, wenn der Job endet.
    So einfach ist das.
    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
    May 2004
    Beiträge
    470
    Ah ok, jetzt ist der Groschen gefallen. Danke

  7. #7
    Registriert seit
    May 2004
    Beiträge
    470
    So jetzt habe ich den DEBUG vor dem ENDCMTCTL im CL stehen und warum sind jetzt alle Dateien noch offen obwohl ich das Programm was aus dem CL aufgerufen wird mit *INLR beende?

  8. #8
    Registriert seit
    Jun 2001
    Beiträge
    2.044
    Weil die Dateien erst mit der ACTGRP geschlossen werden.
    Kann ärgerliche efekte haben wenn du ohne abmelden zwischen Echt und Test und Echt wechselst!!!

    Daher: aus dem Menü eine Weiche rufen die in *new läuft.
    Diese 'weiche' ruft das eigendliche Pgm in *caller.
    Dann klapps auch mit dem Nachbarn!
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  9. #9
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Weil irgend ein Unterprogramm (OPM) aufgerufen wurde, dass in der DFTACTGRP läuft.
    Ich habe auch schon gesehen, dass man CLP's schreibt, dei aus Performancegründen eben jede menge OPNDBF's machen, damit schon mal alles auf ist.
    Sind sog. File-Handler als OPM noch aktiv?
    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. Sicherung der Active Directory auf i5
    By svit in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 09-10-16, 12:29
  2. WRKJOB - Joblog Pending
    By Franz.Rung in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 20-08-14, 13:03
  3. CPD35FA - Hypervisor changes not allowed.
    By Muchi in forum IBM i Hauptforum
    Antworten: 0
    Letzter Beitrag: 19-09-05, 15:39
  4. Save while active mit BRMS
    By systemer in forum IBM i Hauptforum
    Antworten: 17
    Letzter Beitrag: 25-03-03, 15:34
  5. Drucker bleibt im Pending......
    By vorderhaus in forum NEWSboard Drucker
    Antworten: 3
    Letzter Beitrag: 03-06-02, 16:21

Berechtigungen

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