[NEWSboard IBMi Forum]
  1. #1
    ksch091256 Besucher/Guest

    Post ILE Cobol und geöffnete Dateien

    Wir haben erst in letzter Zeit unsere Anwendung von OPM auf ILE umgestellt und haben damit folgendes Problem. Wir rufen aus CL-Programmen Cobol-Programme auf, nachdem wir die entsprechenden OVRDBF's , OPNQRY's usw. gemacht haben. Unter OPM sind die von den Cobol-Dateien geöffneten Dateien wieder geschlossen worden auch ohne ein entsprechendes Close, unter ILE ist das nicht so. Leider ist das recht lästig, da diese Probleme meist beim Kunden auftreten und nur unter bestimmten Konstellationen kein CLOSE durchgeführt wird.
    Gibt es eine Möglichkeit, auch ILE Cobol Programme dazu zu bringen, alle geöffneten Dateien wieder zu schließen? Am besten von "außen", denn nach einem Programmabsturz stehen diese geöffneten Dateien auch noch rum.
    Ich habe etwas von einer Cancel-procedure gelesen, nur leider nichts gefunden, wie man die aufruft. Würde dier helfen?

  2. #2
    Registriert seit
    Dec 2000
    Beiträge
    79

    Post

    Hallo,
    eine mögliche Lösung ist beim erstellen des Programms den Parameter ACTGRP von CRTPGM oder CRTBNDCBL auf *NEW zu setzen.

    hth
    Thomas

  3. #3
    Registriert seit
    Sep 2001
    Beiträge
    156

    Post

    Hi
    Ich kenne mich mit Cobol zwar nicht aus, aber mit RPG funktionierts so:
    Im aufrufenden Programm (RPG oder CL oder..) RLCRSC oder RCLACTGRP durchführen. Dies sollte alle offenen Files.
    Ich denke sollte auch für Cobol funktionieren.

    Gruss
    Rolf

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.695

    Post

    Der RCLRSC, der ja meistens verwendet wurde, zieht bei ILE nicht mehr, da ILE-Programme in eigenen Aktivierungsgruppen laufen.
    Beim Erstellen der Programme kann eine Aktivierungsgruppe explizit vorgegeben werden oder *CALLER verwendet werden.
    Bei *CALLER funktioniert RCLRSC beim rufenden Proramm wieder, bei einer eigenen Gruppe nicht.

    Wenn man die Gruppe nicht kennt, kann man auch (z.B. in Menüauswahlprogrammen)

    RCLACTGRP ACTGRP(*ELIGIBLE)

    verwenden, daraufhin werden ALLE inaktiven Aktivierungsgruppen gelöscht.
    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
    Aug 2001
    Beiträge
    2.928

    Post

    Activierungs-Gruppen:
    1. Bei der Programm-Generierung wird eine Activierungs-Gruppe angegeben.
    Bei OPM-Programmen ist dies immer die Default-Activation-Group.
    Wird ein ILE-Programm über Auswahl 14=CRTBNDxxx umgewandelt, ist der Unterlassungs-Wert für Default-Activation-Group=*YES
    Wird nicht die Default-Aktivierungs-Gruppe benutzt, kann wie bei CRTPGM ein Name, *CALLER oder *NEW angegeben werden.

    2. Die Default-Activation-Group wird bei Job-Start aktiviert und kann nur durch das Beenden des Jobs beendet werden.

    3. Bei Aktivierungs-Gruppe *NEW wird bei jedem Aufruf eine neue Aktivierungs-Gruppe gebildet. In einer Aktivierungs-Gruppe werden Speicher-Bereiche für das Programm und die verwendeten Variablen reserviert. Bei Programm-Ende wird die Aktivierungs-Gruppe beendet, d.h. alle Ressourcen werden freigegeben.
    Dadurch sind bei Aktivierungs-Gruppe *NEW rekursive Programm-Aufrufe möglich.

    4. Bei benannten Aktivierungs-Gruppen, werden die Ressourcen bei Programm-Ende nicht freigegeben. Wird das Programm erneut aufgerufen, wird die Aktivierungs-Gruppe reaktiviert. Dadurch sind alle folgenden Aufrufe schneller als der 1. Aufruf.

    5. Eine benannte Aktivierungs-Gruppe kann wie folgt beendet werden:
    - CL-Befehl RCLACTGRP
    *ELIGIBLE sollte nur dann benutzt werden, wenn die Anwendung genaustens bekannt ist.
    - Cobol Befehl: STOP RUN
    - API CEETREC

    Exception Handler:
    1. ILE Condition Handler
    Bei einem ILE Condition Handler handelt es sich um ein Programm, das Fehler-Situationen bearbeitet.

    Der ILE Condition Handler kann universell, d.h. für Programme/Prozeduren in unterschiedlichen Programmier-Sprachen verwendet werden.

    Bei Nutzung eines ILE Condition Handlers ist es möglich das Programm, in dem der Fehler auftrat fortzusetzen. Leider ist es nicht möglich, die Aktion, die den Fehler verursachte zu wiederholen.

    Soll der ILE Condition Handler in einem Programm verwendet werden, muss er registriert werden.
    API CEEHDLR = Registrieren
    API CEEHDLU = Registrierung entfernen.

    In einem Programm können mehrere ILE Condition Handler registriert werden.

    Ein ILE Condition Handler benötigt 3 Parameter:
    Condition Token
    Communication Area Information
    Condition Handler Action Information
    (Beispiele sind im Internet zu finden)

    2. Beim Senden einer SCOPE Message zu Beginn des Programms (API QMHSNDSM) kann ein Programm angegeben werden, das ausgeführt werden soll, wenn das Programm endet.
    Das Programm springt an, unabhängig davon, ob das Programm normal oder abnormal beendet wurde.

    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

Similar Threads

  1. ILE COBOL und SQLCLI ?
    By rebe in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 08-02-06, 15:50
  2. Problem mit XML PARSE in ILE COBOL
    By MikRom in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 15-08-05, 09:06
  3. per SQL aus ILE COBOL in DB2 schreiben?
    By rebe in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 24-03-05, 14:36
  4. eigene Prozeduren in ILE Cobol?
    By rebe in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 23-07-04, 08:41
  5. ILE Cobol: accept aTimestamp from timestamp?
    By rebe in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 26-09-01, 08:46

Berechtigungen

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