Tips und Techniken für die AS/400
Der 2. Teil der jährlichen Tips und Techniken jetzt online:
Blitz Links:
Der Entwurf von Prozedur-Schnittstellen
Zurückfordern von Ressourcen mit benannten Aktivierungsgruppen
Listen-Ansicht zur Fehlerbehebung
Ersetzen von veränderten Modulen
Probleme beim Binden: Sehen Sie im Jobprotokoll nach
Ausführen von Befehlen mit QCMDEXC
ILE
Der Entwurf von Prozedur-Schnittstellen
Integrated Language Environment (ILE)-Prozeduren können mehrere Parameter akzeptieren, sie geben jedoch immer nur einen Wert zurück. Bei den Parametern kann es sich jedoch um Eingabe-, Aktualisierungs- oder Ausgabeparameter handeln. Es stellt sich also die Frage, welches die beste Methode für den Entwurf von Prozedur-Schnittstellen ist. Sie erleichtern sich die Arbeit, wenn Sie die folgenden beiden Regeln beachten: Prozeduren, die einfache Datentypen handhaben, wie die eingebauten RPG IV-Funktionen, akzeptieren nur Eingabeparameter und geben ihr Ergebnis als Prozedur-Rückgabewert aus. Prozeduren, die komplexe Datentypen handhaben, definieren erst die Ein- und dann die Ausgabeparameter. Sämtliche Ausgabeparameter müssen bei jedem Prozedur-Aufruf gelöscht werden. Am Rückgabewert der Prozedur läßt sich ablesen, ob die Ausführung gelungen ist oder nicht. Sehen wir uns die beiden Regeln einmal in der Praxis an. Ein Serviceprogramm definiert Prozeduren zur Datumshandhabung. Bei einem Datum handelt es sich um einen einfachen Datentyp, d.h. jede Prozedur akzeptiert Eingabeparameter und gibt einen einzigen Wert zurück. Das folgende Beispiel beschreibt den Pseudocode für einige Prozeduren in dem Datums-Seviceprogramm:Days = DaysBetweenDates(FromDate: ToDate) Day = DayOfWeek(Date) LeapYear = IsLeapYear(Date)
Das Beispiel macht deutlich, daß ein Modell mit eingebauten Funktionen sich besonders gut für diesen Datentyp eignet. Das folgende Beispiel beschreibt ein Serviceprogramm für Benutzerbereiche. Bei Benutzerbereichen handelt es sich um einen komplexen Datentyp, d.h. jede Prozedur definiert erst die Ein- und dann die Ausgabeparameter, und zeigt anschließend mit einem Wert an, ob die Ausführung der Prozedur gelungen oder fehlgeschlagen ist. Das Beispiel zeigt den Pseudocode für einige Prozeduren in dem Benutzerbereich-Serviceprogramm:
Ok = CreateUserSpace( InName: InSize ) Ok = SetUserSpace( In Name: InData: InPos: InLen ) Ok = GetUserSpace( InName: InPos: InLen: OutData )
Die Interface Struktur erlaubt Prozedur-Aufrufe in logischen Operationen, um die Verarbeitung zu steuern. Zum Beispiel:
If GetUserSpace( InName: InPos: InLen: OutData ) = *On Eval Data = OutData EndIf
Zurückfordern von Ressourcen mit benannten Aktivierungsgruppen
RclRsc (Ressource zurückfordern) ist ein bekannter AS/400-Befehl, mit dem Sie „Aufräumen“ können, nachdem eine Anwendung ihre Aufgabe beendet hat. In der ILE-Standardaktivierungsgruppe schließt der Befehl RclRsc alle Dateien und deaktiviert sämtliche noch aktivierten Programme. Falls die Anwendung in einer benannten oder neuen Aktivierungsgruppe (*New) läuft, muß die Aktivierungsgruppe mit dem Befehl RcIActGrp (Aktivierungsgruppe zurückfordern) gelöscht werden. Beim Löschen schließt RclActGrp alle noch offenen Dateien und deaktiviert sämtliche aktiven Programme in der Aktivierungsgruppe. Der Befehl RclActGrp muß außerhalb der Aktivierungsgruppe ausgegeben werden, die zurückgefordert werden soll. Außerdem darf kein aktives Programm in dem aktuellen Aufruf-Stapel in der Aktivierungsgruppe laufen, die zurückgefordert werden soll. RelActGrp akzeptiert die beiden folgenden Parameter:
Noch nicht Abonnent? Sonderaktion nutzen.