You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 3 Next »

This guideline is very simple, yet it will allow LANSA programs to be completed more quickly and accurately.

When working on the code of a specific RDML function, always attempt to use a "top down" approach to coding. For instance, you may be given a program "specification" which looks like this:

  • Repeat until program terminated at user request
    • Get the user to input an order number
    • Get details of the order, and handle record not found
    • Get details of all the order lines
    • Display the order details and the line details

You must now "translate" this specification into the LANSA rapid development language.

With a structured (or organized) approach to coding, the program will follow similar steps to the example below.

Note how the arrow --> is used to indicate the new lines inserted in each step:

Step 1
      --> ********** Do until terminated by EXIT or MENU key
      --> BEGIN_LOOP
      --> END_LOOP
 
Step 2
          ********** Do until terminated by EXIT or MENU key
          BEGIN_LOOP
      --> ********** Request order number input until order is found
      --> ********** Build a list of all order lines
      --> ********** Display the order and its lines to the user
          END_LOOP
 
Step 3
          ********** Do until terminated by EXIT or MENU key
          BEGIN_LOOP
          ********** Request order number until order is found
      --> DOUNTIL    COND('#IO$STS = OK')
      --> ENDUNTIL
          ********** Build a list of all order lines
          ********** Display the order and its lines to the user
          END_LOOP
 
Step 4
          ********** Do until terminated by EXIT or MENU key
          BEGIN_LOOP
          ********** Request order number until order is found
          DOUNTIL    COND('#IO$STS = OK')
          ENDUNTIL
          ********** Build a list of all order lines
      --> CLR_LIST   NAMED(#LINES)
      --> SELECT     FIELDS(#LINES) FROM_FILE(ORDLIN) WITH_KEY(#ORDNUM)
      --> ENDSELECT
          ********** Display the order and its lines to the user
          END_LOOP
 
Step 5
          ********** Do until terminated by EXIT or MENU key
          BEGIN_LOOP
          ********** Request order number until order is found
          DOUNTIL    COND('#IO$STS = OK')
          ENDUNTIL
          ********** Build a list of all order lines
          CLR_LIST   NAMED(#LINES)
          SELECT     FIELDS(#LINES) FROM_FILE(ORDLIN) WITH_KEY(#ORDNUM)
          ENDSELECT
          ********** Display the order and its lines to the user
      --> DISPLAY    FIELDS(#HEADER) BROWSELIST(#LINES)
          END_LOOP
 
Step 6
          ********** Do until terminated by EXIT or MENU key
          BEGIN_LOOP
          ********** Request order number until order is found
          DOUNTIL    COND('#IO$STS = OK')
      --> ********** Request user inputs an order number
      --> ********** Attempt to locate the order
      --> ********** Issue message if order was not found
          ENDUNTIL
          ********** Build a list of all order lines
          CLR_LIST   NAMED(#LINES)
          SELECT     FIELDS(#LINES) FROM_FILE(ORDLIN) WITH_KEY(#ORDNUM)
          ENDSELECT
          ********** Display the order and its lines to the user
          DISPLAY    FIELDS(#HEADER) BROWSELIST(#LINES)
          END_LOOP
 
Step 7
          ********** Do until terminated by EXIT or MENU key
          BEGIN_LOOP
          ********** Request order number until order is found
          DOUNTIL    COND('#IO$STS = OK')
          ********** Request user inputs an order number
          REQUEST    FIELDS(#ORDNUM)
          ********** Attempt to locate the order
      --> FETCH      FIELDS(#HEAD) FROM_FILE(ORDMST) WITH_KEY(#ORDNUM)
          ********** Issue message if order was not found
          ENDUNTIL
          ********** Build a list of all order lines
          CLR_LIST   NAMED(#LINES)
          SELECT     FIELDS(#LINES) FROM_FILE(ORDLIN) WITH_KEY(#ORDNUM)
          ENDSELECT
          ********** Display the order and its lines to the user
          DISPLAY    FIELDS(#HEADER) BROWSELIST(#LINES)
          END_LOOP
 
Step 8
          ********** Do until terminated by EXIT or MENU key
          BEGIN_LOOP
          ********** Request order number until order is found
          DOUNTIL    COND('#IO$STS = OK')
          ********** Request user inputs an order number
          REQUEST    FIELDS(#ORDNUM)
          ********** Attempt to locate the order
          FETCH      FIELDS(#HEAD) FROM_FILE(ORDMST) WITH_KEY(#ORDNUM)
          ********** Issue message if order was not found
      --> IF_STATUS  WAS_NOT(*OKAY)
      --> ENDIF
          ENDUNTIL
          ********** Build a list of all order lines
          CLR_LIST   NAMED(#LINES)
          SELECT     FIELDS(#LINES) FROM_FILE(ORDLIN) WITH_KEY(#ORDNUM)
          ENDSELECT
          ********** Display the order and its lines to the user
          DISPLAY    FIELDS(#HEADER) BROWSELIST(#LINES)
          END_LOOP
 
Step 9
          ********** Do until terminated by EXIT or MENU key
          BEGIN_LOOP
          ********** Request order number until order is found
          DOUNTIL    COND('#IO$STS = OK')
          ********** Request user inputs an order number
          REQUEST    FIELDS(#ORDNUM)
          ********** Attempt to locate the order
          FETCH      FIELDS(#HEAD) FROM_FILE(ORDMST) WITH_KEY(#ORDNUM)
          ********** Issue message if order was not found
          IF_STATUS  WAS_NOT(*OKAY)
      --> MESSAGE    MSGTXT('No details of this order found')
          ENDIF
          ENDUNTIL
          ********** Build a list of all order lines
          CLR_LIST   NAMED(#LINES)
          SELECT     FIELDS(#LINES) FROM_FILE(ORDLIN) WITH_KEY(#ORDNUM)
          ENDSELECT
          ********** Display the order and its lines to the user
          DISPLAY    FIELDS(#HEADER) BROWSELIST(#LINES)
          END_LOOP
 
Step 10
          ********** Do until terminated by EXIT or MENU key
          BEGIN_LOOP
          ********** Request order number until order is found
          DOUNTIL    COND('#IO$STS = OK')
          ********** Request user inputs an order number
          REQUEST    FIELDS(#ORDNUM)
          ********** Attempt to locate the order
          FETCH      FIELDS(#HEAD) FROM_FILE(ORDMST) WITH_KEY(#ORDNUM)
          ********** Issue message if order was not found
          IF_STATUS  WAS_NOT(*OKAY)
          MESSAGE    MSGTXT('No details of this order found')
          ENDIF
          ENDUNTIL
          ********** Build a list of all order lines
          CLR_LIST   NAMED(#LINES)
          SELECT     FIELDS(#LINES) FROM_FILE(ORDLIN) WITH_KEY(#ORDNUM)
      --> ADD_ENTRY  TO_LIST(#LINES)
          ENDSELECT
          ********** Display the order and its lines to the user
          DISPLAY    FIELDS(#HEADER) BROWSELIST(#LINES)
          END_LOOP
 
You should find that well structured and documented programs are very easy to produce by using this type of approach, which basically consists of always:

  • entering the structured programming constructs completely before coming back to fill in the details. For example:  BEGIN_LOOP/END_LOOP, DOUNTIL/ENDUNTIL, SELECT/ENDSELECT, IF/ELSE/END, etc. etc.
  • including the comments before the commands.
  • No labels