Display Manager | Selection of table row problem

TSO Programming, ISPF, SDF, SDSF and PDF, FTP, TCP/IP Concepts, SNA & SNA/IP etc...

Display Manager | Selection of table row problem

Postby morthart » Fri Jan 22, 2016 3:33 pm


in preperation for a case study next week I'm trying to program basic functions for use on a table. The table itself is basic and only created for this exercise.
It has (Keyfield) SERIAL (Namefield) NAME LNAME.
The display and the panel are working and produce the following output:

Now, the _ field should be used to input a letter to add, update or delete certain lines (one line at a time). For testing purposes, it is currently just 'x' that should initiate a second panel. The problems start here, so I'll provide you with the code that I have:

000100 /* REXX */
000110 address ispexec
000304 ZTDMARK = ' |----------------------------------------------|'
000400 exit

The REXX code to open my first panel. It will open my TESTTBL, change the BOTTOM OF DATA mark, display all the lines and write the position of the last selected row into TESTP, then close the table.

# TYPE(INPUT) color(turq) hilite(uscore)
§ TYPE(OUTPUT) color(turq)
+ | Course Nr. | Worktitle | English Title |
+ |--------------|-------------|-----------------|
#Z+| §SERIAL +| §NAME +| §LNAME +| +
&INPUT = ' '
.cursor = INPUT
ver(&INPUT,list x,' ')
&zsel = trans(&INPUT 'x','cmd(VCT@TAB2)',
' ',' ',

This will create the panel and a scrollable area for my rows. Now, the panel will not change to VCT@TAB2, even if I type in 'x'. I think the problem is that e will somehow concatenate all the INPUTs that he has, so there is never only 1 'x' seen by the trans(). The PTEST will be the last selected row though, so if I type in 'x' somewhere, he will save the correct line position.
Now, this could be pretty easily solved using REXX and just checking each, then hardcoded variable, for the first occurance of 'x'. The problem is that I can't do that because my length is not solid.

My second problem lies within my VCT@TAB2 panel, as he will not display the selected row.


address ispexec

This gets my TESTP, the position of the row last selected, opens my table in write mode (because, at a later stage of the project, I want to be able to change the data displayed), he gets the row from TESTP and displays my panel. Now, if I call the panel individually, it will display the structure of the table, but not the data of the row fetched. The panel itself is pretty simple:

# TYPE(INPUT) color(turq) hilite(uscore)
§ TYPE(INPUT) color(turq)
+{-} Details {-}+
+ | Course Nr. | Worktitle | English Title |
+ |--------------|-------------|-----------------|
+ | §SERIAL +| §NAME +| §LNAME +| +
.cursor = ZCMD

As I do not have a )MODEL statement, i can't use TBDISPL. The question would be if I need some sort of other display method for the one row I fetched, or if my whole attempt is wrong.

Thank you very much,

Posts: 2
Joined: Fri Jan 22, 2016 2:52 pm
Has thanked: 0 time
Been thanked: 0 time

Re: Display Manager | Selection of table row problem

Postby morthart » Fri Jan 22, 2016 3:56 pm

As I forgot the actual output picture of the first panel and don't find the edit function, here it is:

Edit: The workaround would obviously be having 2 fields, one for desired action (A,U,D) and one for row number. This would solve the problem of having to check a dynamicly created field (sorry if this is not the correct terminus, I don't know how to reference to it correctly) for values, but would instead jump easily on a simple check of two variables. It would also not teach me anything ;)
Posts: 2
Joined: Fri Jan 22, 2016 2:52 pm
Has thanked: 0 time
Been thanked: 0 time

Re: Display Manager | Selection of table row problem

Postby Pedro » Fri Jan 22, 2016 10:08 pm

I would do it differently. Rather than using &zsel in the )PROC section, I would check the row action commands from the first rexx program. In the Dialog Developer's Guide, read about ZTDSELS variable. You need a loop in the rexx program to process multiple line commands.

Rather than using a separate rexx program to process the line command, issue the DISPLAY service directly from the first rexx program.

Something like this:
Do while (drc<8)                                                       
  "TBDISPL TABLENAM      PANEL("panname") ROWID(ROW)"       
  if rc < 8 then do                         
    If ztdsels >= 1 Then              /* LINES UPDATED >= 1 ?        */
      Do    while ztdsels >= 1        /* RESOLVE ALL USER SELECTS    */
        If lcmd = 'S' Then                                             
             "DISPLAY PANEL(VCT@tab2)"
        If ztdsels > 1    Then         /* IF STILL MORE LINES SELECTED*/
           "TBDISPL TABLENAM"          /*SELECT NEXT LINE     */       
          Else                         /* NO MORE LINES SELECTED      */
            ztdsels = 0                /* SET # SELECTED TO ZERO      */
      End  /*ztdsels */                                                       
  End /* rc<8 */
End /* do while */
Pedro Vera
User avatar
Posts: 685
Joined: Thu Jul 31, 2008 9:59 pm
Location: Silicon Valley
Has thanked: 0 time
Been thanked: 53 times

Return to TSO & ISPF


  • Related topics
    Last post