Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Where a "summary" style report is to be produced, and a relatively small number of summary records are to be printed (ie: less than 1000), then the LANSA object called a "working" list is a viable option.
In many situations, working lists save having to create additional access paths over database files (either directly via a logical file or by using the OPNQRYF option).
For example, consider the following instance where a "departmental expenditure" file called EXPEND is read:
 

No Format
       FILE:  "EXPEND"

...


 

...


                       Company    Department    Amount

...


                       Number      Number       Spent

...


                       #COMPNO     #DEPNO      #AMOUNT

...


                         02          11        276.35

...


                         01          14        100.12

...


                         01          17        764.37

...


                         02          12       1945.24

...


                         01          19         89.12

...


                         02          14        568.23

...


                         01          15        375.89

...


 

...


                         etc, etc .......


 
 
To produce a summary of expenditure by company, we could first define a "working list" called #SUMMARY as follows:
 
          DEFINE   FIELD(#SUMCOMPNO) REFFLD(#COMPNO)
          DEFINE   FIELD(#SUMAMOUNT) REFFLD(#AMOUNT)
 
          DEF_LIST NAME(#SUMMARY) FIELDS(#SUMCOMPNO #SUMAMOUNT)
                   TYPE(*WORKING) NBR_ENTRYS(50)         
 
This working list can be "visualized" as a multiple occurrence structure (or array):                    

No Format
                    ---------------------------------

...


                   |  Entry    |

...

  Company |

...

   Amount |

...


                   |  Number   |  Number  |   Spent  |

...


                   |(implicit)

...

 |#SUMCOMPNO|#SUMAMOUNT|

...


                   |---------- | -------- | ---------|

...


                   |   001     |          |          |

...


                   |   002     |          |          |

...


                   |   003     |          |          |

...


                   |    "      |          |          |

...


                   |   050     |          |          |

...


                    ---------------------------------    

              
 
Note that this allows for 50 different companies to be processed. If we attempted to process 51, the program would fail with a very specific error message indicating that the working list is full.
Now we can read all the "departmental expenditure" records and summarize them into the list called #SUMMARY:
SELECT    FIELD(#COMPNO #AMOUNT) FROM_FILE(EXPEND)
LOC_ENTRY IN_LIST(#SUMMARY) WHERE('#SUMCOMPNO = #COMPNO')
   IF_STATUS IS(*OKAY)
   CHANGE    FIELD(#SUMAMOUNT) TO('#SUMAMOUNT + #AMOUNT')
   UPD_ENTRY IN_LIST(#SUMMARY)
   ELSE
   CHANGE    FIELD(#SUMCOMPNO) TO(#COMPNO)
   CHANGE    FIELD(#SUMAMOUNT) TO(#AMOUNT)
   ADD_ENTRY TO_LIST(#SUMMARY)
   ENDIF
ENDSELECT     
 
Note: The data can be read from file EXPEND in any order.
Next, we could sort the list to produce the summary report in company number order:
DEF_LINE   NAME(#LINE01) FIELDS(#SUMCOMPNO #SUMAMOUNT)
 
SORT_LIST  NAMED(#SUMMARY) BY_FIELDS(#SUMCOMPNO)
SELECTLIST NAMED(#SUMMARY)
PRINT      LINE(#LINE01)
ENDSELECT  
Finally, we could re-sort the list in descending order of amount spent, and produce another summary report (ie: companies ranked from highest spender to lowest spender):
DEF_LINE   NAME(#LINE02) FIELDS(#SUMAMOUNT #SUMCOMPNO)
 
SORT_LIST  NAMED#SUMMARY) BY_FIELDS((#SUMAMOUNT *DESCEND))
SELECTLIST NAMED(#SUMMARY)
PRINT      LINE(#LINE02)
ENDSELECT    
 
Some general notes about using working lists:

...