Problem solve Get help with specific problems with your technologies, process and projects.

Using a self-extending subfile

I have an application using a subfile that uses the sfldrop. On request, it drops down three lines of more detailed information for the user. The possible size of this subfile (over 9,999 records) has caused problems, we need to modify it one page at a time. The problem is we lose the sfldrop.

Without the sfldrop my subfile becomes very bulky and cumbersome for the user -- they see a lot more information then they need. How can we eliminate this problem and make it more efficient for the user.

First, use a self-extending subfile. In this type of subfile, you load a single page and display it. If the user presses Page Down (Roll Up), control returns to your program and you load the next page, adding to the data already in the subfile. SFLDROP works in this situation.

You can detect which state the subfile is in in your program, and which subfile RRN is first on the currently-displayed page. You can also detect which subfile RRN the cursor is on when control returns.

When you add a page of data, set the subfile RRN field to the RRN of the first record you added in the new page before redisplaying the screen. That will make the screen show the page containing that record - if the subfile is in drop-down mode, other values of the RRN may cause it to skip ahead one or more pages, which will confuse the user.

Lastly, 2,500 records is a lot in a subfile. No user is going to page that far. So look at putting in fields in the screen header to let the user select a subset of the data, so that he can 'home in' on the data he wants to see rather than having to page through loads of screens full to gather the data he wants.

This is the DDS for the subfile control record for a self-extending subfile with SFLDROP:

A          R D@CSFC                     TEXT('Subfile control')         
A                                       BLINK                           
A                                       SFLCTL(D@CSF)                   
A                                       SFLSIZ(5)                       
A                                       SFLPAG(4)                       
A                                       SFLDSPCTL                       
A N40                                   SFLCLR                         
A  40                                   SFLDSP                         
A  40                                   SFLEND                         
A N13                                   SFLFOLD(CF11)                   
A  13                                   SFLDROP(CF11)                   
A                                       SFLMODE(&MODE)                 
A                                       SFLCSRRRN(&CRRN)               
A                                       RTNCSRLOC(*WINDOW &CROW &CCOL) 
A                                       RTNCSRLOC(*RECNAME &CREC &CFLD) 
A                                       OVERLAY PUTOVR                 
A            D1DRRN         4S 0H       SFLRCDNBR(CURSOR)           
A            D1TRRN         5S 0H       SFLSCROLL           
 * Hidden fields for cursor location, subfile RRN and mode :           
A            CREC          10   H       TEXT('Cursor record')           
A            CFLD          10   H       TEXT('Cursor field')           
A            CROW           3S 0H       TEXT('Cursor row')             
A            CCOL           3S 0H       TEXT('Cursor column')           
A            CRRN           5S 0H       TEXT('Subfile cursor RRN')     
A            MODE           1   H       TEXT('Subfile mode')         

Indicator 13 is used to force the subfile into the mode you want. It is switched in your program by function key F11.

Indicator 40 is used to clear or display the subfile.

The field MODE contains '1' if the subfile is in TRUNCATED mode, or '0' if it is in FOLDED mode (dropped).

The Cxxx fields tell your program where the cursor is when control returns to your program. We don't use all of them - CRRN is the most useful.

SFLRCDNBR(CURSOR) positions the cursor on the subfile record identified by D1DRRN, which is the Subfile RRN defined in your program.

SFLSCROLL's field D1TRRN contains the subfile RRN on the first line of the page on the display when control returns to your program.

Given all this information, you should be able to create an amended program that will load a page at a time, increasing the size of the subfile as it does so, and which will know exactly where it is in the subfile whenever control returns to it, so that it can keep the screen in the same place for non-roll-up operations, and place the screen correctly when a new page is added.

More on this topic

The Best Web Links: tips, tutorials and more.

Visit the ITKnowledge Exchange and get answers to your developing questions fast.

Ask the Experts yourself: Our application development gurus are waiting to answer your programming questions.


Dig Deeper on Integrated File System (IFS)