© serviceprofessionalgmbh

Die Bedienerakzeptanz eines Dialoges ist von ausschlaggebender Bedeutung. Zielvorstellung wäre, dass der Bediener das Layout der Anzeigen selbst bestimmen kann. So sollte es ihm überlassen bleiben, welche Spalten einer Tabelle in welcher Breite und Anordnung er sehen will. Darüber hinaus sollte es wie im Editor möglich sein, die Links-/Rechtsverschiebung einer Sicht durchzuführen.

Es kann hier nicht alles gezeigt werden (das würde den Rahmen sprengen). Was gezeigt wird, ist der Umgang mit dynamischen Modelsets. Hier nicht kodiert, aber leicht erweiterbar: eine Möglichkeit, dem Benutzer die Einstellungen über Spaltenbreiten, Sortierungen und dergleichen zu ermöglichen und diese Werte über den ISPF-Profile-Pool zu schleusen. Wird dort nichts vorgefunden, treten die im Programm definierten Standards in Kraft. Eine Erweiterung um Sortier-Möglichkeiten oder filtrierte Anzeigen (TBSCAN-Ergebnisse) wären auch keine Hexerei.

Das Demo-Programm erlaubt die Wahl auf vier unterschiedliche Sichten, welche durch das Kommando SET n (n ist ein Wert zwischen 1 und 4) gewechselt werden können. Ist die Sicht breiter, als es der logische Screen erlaubt (Scrolling wäre angesagt), wird optisch darauf hingewiesen.

Viel Spaß


Programm

/* REXX
*/
address ispexec
"control errors return"
call set_variables
call table_create
call table_fill
"tbdispl &table panel(tpandyn1)"
do while rc < 8
   parse var zcmd pcmd parms
   select
      when pcmd = "SET" then call set_display
      otherwise nop
   end
   "tbdispl &table panel(tpandyn1)"
end
"tbend &table"
exit

table_create:
   "tbend &table"
   "tbcreate &table names(&t§names)"
return

table_fill:
   I = 0
   I=I+1;lname.i ="Mooshammer"
         fname.i ="Ludwig"
         plz.i   ="80333"
         ort.i   ="München"
         str.i   ="Theatinerstrasse 4"
         telf.i  ="089 / 1234567"
         telm.i  ="0171 / 1234567"
         fax.i   ="01212 / 510111239"
         age.i   ="67"
   I=I+1;lname.i ="Wittemann"
         fname.i ="Karlheinz"
         plz.i   ="82319"
         ort.i   ="Starnberg"
         str.i   ="Schulstrasse 3b"
         telf.i  ="+49-8151-21448"
         telm.i  ="+49-172-8936881"
         fax.i   ="+49-8151-28792"
         age.i   ="48"
   I=I+1;lname.i ="Schrumpelhut"
         fname.i ="Jeremias"
         plz.i   ="70191"
         ort.i   ="Stuttgart-Hauptbahnhof"
         str.i   ="Räpplenstrasse 19"
         telf.i  ="+49-711-20212810"
         telm.i  =""
         fax.i   ="+49-711-20121111"
         age.i   ="36"
   do J = 1 to I
      "tbvclear &table"
      lname   = lname.j
      fname   = fname.j
      ort     = ort.j
      str     = str.j
      telfest = telf.j
      telmobil= telm.j
      fax     = fax.j
      age     = age.j
      "tbadd &table"
   end
   "tbtop &table"
return

set_display:
   if datatype(parms) <> "NUM"   then return
   if head.parms = "HEAD."parms  then return
   call set_header_and_model parms
return

set_header_and_model:
   arg IDX
   header ="°LCMD"
   models ="§LCMD"
   do i = 1 to words(head.idx)
      h = word(head.idx,i)
      m = word(mset.idx,i)
      l = word(flen.idx,i)
      l_row = length(header)
      if l_row + l + 3 > ZSCRMAXW then do
         if l_row  + 7 < ZSCRMAXW then do
            tmp = ZSCRMAXW - l_row - 4
            h = left(h,tmp)">>"
            l = ZSCRMAXW - l_row - 2
         end
         else do
            header = left(header,ZSCRMAXW-3)">>"
            leave
         end
      end
      header = header"°"left(h,l)"~"
      models = models"{"left(m,l)"+"
   end
return

set_variables:
   var#shar = "" ,
              "ZSCRMAXD" ,  /* Screen-Höhe                      */
              "ZSCRMAXW" ,  /* Screen-Breite                    */
              ""
   "vget (&var#shar) shared"

   TABLE = "T"reverse(userid())
   t§names = "lname fname ort str telfest telmobil fax age"

   head.1 = "Nachname Vorname Wohnort Strasse Festnetz Mobil Fax Alter"
   mset.1 = "lname    fname   Ort     str     telfest  telmobil fax age"
   flen.1 = "20       15      30      20      16       16       18  5"

   head.2 = "Nachname    Wohnort    Strasse"
   mset.2 = "lname       Ort        str"
   flen.2 = "20          40         20"

   head.3 = "Nachname    Festnetz   Mobil     Fax"
   mset.3 = "lname       telfest    telmobil  fax"
   flen.3 = "15          16         16        18"

   head.4 = "Vorname     Nachname   Alter"
   mset.4 = "fname       lname      age"
   flen.4 = "15          20         5"

   call set_header_and_model 3
return



Panel TPANDYN1

)attr
   # area(dynamic) scroll(off)       extend(off)
   ° type(dataout) hilite(uscore)
   ~ type(dataout)
   § type(input)   color(red)      padc('.')
   { type(output)  color(blue)
   } type(output)  color(red)
   [ type(output)  color(green)
   ] type(output)  color(yellow)
)body expand(\\)
---------< Demo-Panel mit variablen Model-Sets >\-\
%Command ==>_zcmd \ \%Scroll ==>_samt+
+
#header                                                                        #
)model clear(LCMD)
&models
)init
   if (&SAMT = &Z)
      &samt = CSR
)reinit
)proc
   /* Hier wäre Platz für Verify und mehr...
)help
)end

zurück zu REXX mit Dialog Manager