wsh Tutorial

wsh ist eine Rexx Erweiterung die eine SkriptSprache für

  • Erstellen von Parameterfiles und JCLs
  • SQL Abfragen
  • adhoc Programmierung

Tutorial

  • tutorials in {RZ4+DSN.BEISPIEL.WSH}
  • tut00
    1. Sekelton mit Variabeln Expansion
    2. wsh Klauseln sind durch $ markiert
    3. dadurch werden rexx, skeletons mit der wsh-runtime Umgebung verwoben
    4. VariablenNamen und alle wsh Konstrukte sind case sensitiv
    5. assignmen mit $= ... = ...
  • tut01
    1. Kommentare mit $* oder $*( .... $*)
    2. da fehlt JobHeader, aus dsnMember reinholen
    3. ouput in dsnMember: output umleiten, abgrenzen mit $<>
    4. output besser gleich submitten: umleiten auf .fSub()
    5. kombinieren mit rexx: String Expressions: bei sysvar
    6. oder statements: if .... full yes
  • tut02
    1. mit Rexx erweitern um mehrere Jobs zu starten: rexx do (mit syntactical sugar $do)
    2. jx mit RexxExpression ausrechnen
    3. blockKonstrukt $@[ ... $] (mit Varianten) ==> beliebige Schachtelung
  • tut03
    1. statt einfach hochzählen eine InputListe verwenden
    2. $! Pipe Operator: output der linken Seite wird auf Input der rechten Seite geleitet: Verknüpfung von StandardOutput und -Input
    3. $@. führt einen RexxAusdruck aus.
    4. der Rexxausdruck ergibt ein Objekt, das standard input liest, und jede Zeile in ein Objekt umwandelt, die erste Zeile enthält die KolonnenNamen db und ts
    5. $! call fTabAuto: formatiert als Tabelle
    6. $! $for o $$ o=$o ts=${o&ts}: loop ueber Objekte
    7. $! $forWith o $$ o=$o "$db.$ts": loop+with ueber Objekte
    8. ganzes Script: Skeleton für jedes Objekt
    9. $<intRdr zum direkt submitten
  • tut04
    1. die Liste holen können wir auch mit SQL aus dem DB2 Catalog holen
    2. Input ist SQL (wie bekannt als Skeleton mit Variabeln Expansion) auf Prozedur sqlSel gePipet
    3. sqlSel gibt resultat rows als Objekte zurück (mit fmtFTab ohne fetch first zeigen)
    4. *** run error *** undefined var ts: sql übersetzt die Namen auf uppercase, darum müssen wir unsere Namen auf DB und TS umsetzen
  • tut05
    1. jetzt bauen wir ein Tool, um Copies durchzuführen
    2. wir verwende die wsh kind :, im Gegensatz zu @ erlaubt sie kein Rexx (direct), dafür können wir die moisten $ weglassen
    3. für den Input definieren wir eine Liste von TSs, damit wir die DB nicht jedesmal schreiben müssen verwenden wir csvColRdr und ersetzt leere DBs durch die letzte hingeschriebene
    4. im Loop schreiben wir include db.ts
    5. vor dem ersten include einer neuen DB noch einen eigenen Step
      • und noch vorher (und am Ende) das Ende des letzten Steps
      • dazu verwenden wir die prozedur stepFinish
    6. in den Assignments brauchen wir kleine Rexx Fragmente
  • tut06
    1. hierhin kopieren wir nur die Logik von tut05
  • tut07
    1. und hier schreiben wir nur noch den InputTeil von Tut05
    2. am Schluss kompilieren wir tut06 und führen es aus
    3. so haben wir die Tool Logik ausgelagert
  • tut08
    1. statt mit einer Input Tabelle können wir das Tool auch mit Prozeduren bauen. Mit Kind % brauchen wir nur Prozedurnamen hinzuschreiben
    2. proc db setzt die DefaultDb
    3. proc ts ruft dbTS mit der DefaultDb auf
    4. proc dbTs macht die Arbeit
      1. falls nötig letzten Step beenden, Jobheader und Step Anfang schreiben
      2. das include für die listDef lTs auf stdOutput schreiben
      3. das include für die listDef lPa in den Buffer $lPa schreiben
    5. proc job schreit kopiert den JobHeader aus einem DSN und macht ein paar Initialisierungen
    6. proc step öffnet den Buffer $lPa für Output schreibt das Jcl für einen UtilityStep und die ersten UtilityStatements
    7. proc finish kopiert das zweite listDef aus Buffer $lPa in stdOutput und ruft die proc für die gewünschten Utilities. Diese wurden oben im Member in die Variable $util geüllt. Das funktioniert, weil Prozeduren gleich wie Variabeln in den VariabelnPool gefüllt werden.
    8. proc copy (und die anderen Utility Funktionen) schreibt den entsprechende Utility mit der richtigen ListDef nach stdOutput
  • tut09
    1. Hier haben wir nur den DatenTeil aus tut08 kopiert. Die Prozeduren erhalten wird, indem wir das tut08 zur compileZeit compilieren
  • tut10
    1. sqlSel schreibt den Output eines SQLs als Objekte in Output
    2. sqlStmts funktioniert wie SPUFI
    3. aber wir können das jetzt zusammenhängen!
  • tut11
    1. wenn wir einen Vorspann und Nachspann einbauen wollen, können wir $proc verwenden, oder es direkt einbauen
    2. mit wsh kind = (statt @) können wir output direct reinschreiben, dafür müssen rexxTeile mit $@ markiert werden
  • tut12
    1. man kann sämglich eingebaute rexx benutzen
    2. z.B. dsnList (==> stem)
    3. tso commands definieren
    4. falls nötig mit rexx erweitern
    5. auch für CSM gibt es eine Prozedur

weiteres

character set problems

wikiz/osname
¢![]square brackets
|!exclamation mark

  • {RZ4+a540769.wk.rexx(charset)}