User Exits für Symbol-Funktionen

Dieser Abschnitt behandelt folgende Themen:


Syntax für Symbol-Funktionen

Sie können selbst entwickelte Symbol-Funktionen über Exits in Entire Operations verfügbar machen.

Syntax für Symbol-Funktionen:

§!function<parm1,...,parmn>

Symbol-Funktion - Kodierungsregeln

  • Dem Fluchtzeichen (hier §) muss immer ein Ausrufezeichen (!, bei BS2000: ö) oder Fragezeichen (?) folgen, damit eine Funktion erkannt wird .

  • Die Parameterliste ist optional und wird in spitze Klammern (<) (>) eingeschlossen. Zwischen Funktionsname und Parameterliste sind keine Leerzeichen erlaubt

  • Parameter müssen durch Kommas getrennt werden.

  • Die Gesamtlänge des Funktionsaufrufs darf nicht länger als 20 Zeichen sein.

  • Die Symbolfunktionen müssen in der Bibliothek SYSEOR abgelegt werden.

  • Die Parameter werden der Funktion in einem extra Feld übergeben.

  • Das Logging der Symbolersetzung wird vom Entire Operations-Monitor ausgeführt. Zusätzliches Logging ist freigestellt.

  • Der Symbolwert wird nach erfolgreicher Ersetzung in die aktive Symboltabelle des Jobs zurückgeschrieben. Bei Folge-Ersetzungen wird nicht mehr die Symbol-Funktion aufgerufen, sondern der Wert aus der aktiven Tabelle gelesen.

Die Namen der Symbolfunktions-Exits beginnen mit SX. Da die Namenslänge der Natural-Objekte auf 8 begrenzt ist, darf der Funktionsname - ohne Ausrufezeichen (!) - maximal 6 Zeichen haben.

Symbol-Funktion - Parameter-Liste

Die Funktion !RANDOM wird in der Routine SXRANDOM behandelt.

Die Symbolfunktions-Exits werden mit der Parameterliste NOPXPL-A aufgerufen. Die erste Zeile des Exits sollte somit lauten:

DEFINE DATA PARAMETER USING NOPXPL-A

Bedeutung der Parameter in NOPXPL-A:

Parameter Format Verwendung
P-CALL-PLACE  (A03) ein Konstant SFX.
P-RC  (N04) aus Rückgabe-Code:
0 Funktion ok.
4511 Symbol nicht gefunden.
P-RT  (A66) aus Rückgabe-Text (kann zur genauen Fehler-Beschreibung verwendet werden; optional).
P-OWNER  (A10) ein Eigentümer des Netzwerks.
P-NETWORK  (A10) ein Job-Netzwerk.
P-JOB  (A10) ein Job.
P-RUN  (P13) ein Laufnummer.
P-EXECUTION-NODE  (N03) ein Entire System Server Ausführungs-Knoten.
P-SYMBOL-TABLE  (A10) ein Name der definierten Symboltabelle.
P-SYMBOL  (A20) ein Funktionsparameter, ohne Klammern.
P-SYMBOL-VALUE  (A54) aus Symbolwert (Ergebnis der Funktion).

Anmerkungen:

  1. Im Feld P-SYMBOL werden nur die Funktionsparameter (ohne Klammern) übergeben. Den Funktionsnamen kann man aus der Natural-Variable *PROGRAM erkennen.
  2. Alle nicht aufgeführten Felder aus NOPXPL-A dürfen nicht verwendet werden, da sie keinen gültigen Inhalt haben.

Symbol-Funktionen - Beispiele

Symbol-Funktion

* SYMBOL FUNCTION EXIT EXAMPLE
* SXQS<PARM1>
* CROSSFOOTING OF THE PARAMETER
* -------------------------------------------------------------
DEFINE DATA PARAMETER USING NOPXPL-A
LOCAL
1 #I   (I02)
1 #N   (I02)
1 #SUM (I02)
1 #A   (A01)
END-DEFINE
* -------------------------------------------------------------
RESET #SUM
F1. FOR #I = 1 TO 20
  #A := SUBSTR (P-SYMBOL,#I,1)
  IF #A IS (N1)
    #N := VAL(#A)
    ADD #N TO #SUM
  END-IF
END-FOR    /* F1.
P-SYMBOL-VALUE := #SUM
RESET P-RC P-RT
END

Master-JCL

//SN000001 JOB ,SN,CLASS=K
//IEFBR14  EXEC PGM=IEFBR14
//*
//* +!D<AQ+1>
//* §!D<AQ+1>
//*
//* +!QS<4711>
//* §!QS<4711>
//*
//* +!QS<+*DATE>                 NESTED Symbole
//* +!QS<§*DATE>                 NESTED Symbole
//* §!QS<§*DATE>                 NESTED Symbole
//*
//* +!QS<+!D<AM-1>>              NESTED FUNCTIONS
//* +!QS<§!D<AM-1>>              NESTED FUNCTIONS
//* §!QS<§!D<AM-1>>              NESTED FUNCTIONS
//*

Aktive JCL

//SN000001 JOB ,SN,CLASS=K
//IEFBR14  EXEC PGM=IEFBR14
//*
//* +!D<AQ+1>
//* 20081117
//*
//* +!QS<4711>
//* 13
//*
//* +!QS<+*DATE>                 NESTED Symbols
//* +!QS<17/11/08>               NESTED Symbols
//* 18                           NESTED Symbols
//*
//* +!QS<+!D<AM-1>>              NESTED FUNCTIONS
//* +!QS<20081117>               NESTED FUNCTIONS
//* 30                           NESTED FUNCTIONS
//*

Aktive Symboltabelle

Symbol            F A Wert                         modified by
!D<AM-1>          A E 20081117                     EORMON   17.11.08 10:25
!D<AQ+1>          A E 20081101                     EORMON   17.11.08 10:25
!QS<17/11/08>     A E 18                           EORMON   17.11.08 10:25
!QS<20081117>     A E 30                           EORMON   17.11.08 10:25
!QS<4711>         A E 13                           EORMON   17.11.08 10:25
X                 A E x                            SN       17.11.08 10:13