Data Structure Templates

RPG
Typography
  • Smaller Small Medium Big Bigger
  • Default Helvetica Segoe Georgia Times

In V5R1, IBM introduced the LIKEDS keyword. This keyword allows you to create a data structure that has the same set of subfields as an existing data structure. To make this happen, IBM had to create qualified data structures. I've previously talked about qualified data structures, so I won't go into those in detail.

The LIKEDS keyword allows you to clone a data structure over and over again. To take advantage of this keyword, you'll need a data structure. It can be an existing legacy data structure or it can be a new one created as a template. By "template" I mean a data structure that contains the QUALIFIED keyword and, optionally, the BASED keyword. The QUALIFIED keyword allows you to create a data structure whose subfields do not conflict with other field names, and if the BASED keyword is specified, no memory is used up by the existence of the data structure.

Along with these two keywords, you'll also need a data structure name to create a data structure template. Traditionally, a template has a unique suffix that indicates that it's a template. In the C and C++ languages, the underscore followed by the letter T (_T) is often used. For example:

     D lineItem_T      DS                  QUALIFIED
     D                                     BASED(templ_ptr)

Of course, subfields need to be added, but we'll illustrate those in a minute.

In this example, the data structure named LINEITEM_T is declared. The data structure also contains the QUALIFIED keyword and BASED(templ_ptr). The BASED keyword is normally used to identify a pointer whose memory this data structure uses. If we create a dummy pointer name, as I did with templ_ptr, and then don't reference it, we effectively cause this data structure to be a template that can be used only to declare other data structures.

To declare another data structure that contains the same subfields as LINEITEM_T, we would use the LIKEDS keyword, as follows:

     D items           DS                  LikeDS(lineItem_T)

The new data structure named ITEMS is declared. It is a qualified data structure and includes all the subfields of the LINEITEM_T data structure. The new data structure does not inherit the BASED keyword, OCCURS, DIM, or any other data structure-level keyword. All LIKEDS data structures are implicitly qualified. In fact, the QUALIFIED keyword cannot be specified on the data structure that contains the LIKEDS keyword.

Let's look at a more complete example. Here is the data structure template again, but this time it includes the subfield definitions.

     D lineItem_T      DS                  QUALIFIED
     D                                     BASED(templ_ptr)
     D  item                          5A  
     D  qty                           7P 0
     D  price                         7P 2

Next, I want to declare an array with the same format as this data structure template. To do this, the following code is specified:

     D items           DS                  LikeDS(lineItem_T)
     D                                     DIM(50)

You never access LINEITEM_T in your program, except through the LIKEDS keyword. To add data to the new ITEMS data structure array, you would use the following code.

     D items           DS                  LikeDS(lineItem_T)
     D                                     DIM(50)

     C                   eval      count = cgiGetVarCount('ITEM')
     C                   for       i = 1 to Count
     C                   eval      items(i).item = cgiGetVar('ITEM':i)
     C                   eval      items(i).qty  = cgiGetVarInt('QTY':i)
     C     items(i).item Chain     ItemRec
     C                   if        %Found()
     C                   eval      items(i).price = itmprice
     C                   else
     C                   eval      items(i).price = 0
     C                   endif
     C                   endfor

In this example, the CGI functions included free in RPG xTools are used to extract data from an HTML Web page. Assuming an online shopping cart is used, the item and quantity ordered are retrieved, and then the item number is used to access the price. The price is then stored in the PRICE subfield of the ITEMS data structure.

Remember, you can use data structure templates over and over in the same source member, so, for example, the following is perfectly valid code:

D items           DS                  LikeDS(lineItem_T) DIM(50)
D items_SAVE      DS                  LikeDS(lineItem_T
D items_UNDO      DS                  LikeDS(lineItem_T) DIM(10)

The ITEMS data structure is used as our regular data structure array to store the data from the shopping cart. The ITEMS_SAVE data structure is used to store the current data when necessary (before altering it, for example). The ITEMS_UNDO data structure saves up to 10 instances of the ITEMS data structure so that the user can undo up to 10 actions. An UNDO function might be more applicable to an interactive/5250 application.

This is just a sample of how powerful data structure templates can be. What ways can you find to use them?

Bob Cozzi is a programmer/consultant, writer/author, and software developer of the RPG xTools, a popular add-on subprocedure library for RPG IV. His book The Modern RPG Language has been the most widely used RPG programming book for nearly two decades. He, along with others, speaks at and runs the highly-popular RPG World conference for RPG programmers.

BOB COZZI

Bob Cozzi is a programmer/consultant, writer/author, and software developer. His popular RPG xTools add-on subprocedure library for RPG IV is fast becoming a standard with RPG developers. His book The Modern RPG Language has been the most widely used RPG programming book for more than a decade. He, along with others, speaks at and produces the highly popular RPG World conference for RPG programmers.


MC Press books written by Robert Cozzi available now on the MC Press Bookstore.

RPG TnT RPG TnT
Get this jam-packed resource of quick, easy-to-implement RPG tips!
List Price $65.00

Now On Sale

The Modern RPG IV Language The Modern RPG IV Language
Cozzi on everything RPG! What more could you want?
List Price $99.95

Now On Sale

BLOG COMMENTS POWERED BY DISQUS

LATEST COMMENTS

Support MC Press Online

$

Book Reviews

Resource Center

  •  

  • LANSA Business users want new applications now. Market and regulatory pressures require faster application updates and delivery into production. Your IBM i developers may be approaching retirement, and you see no sure way to fill their positions with experienced developers. In addition, you may be caught between maintaining your existing applications and the uncertainty of moving to something new.

  • The MC Resource Centers bring you the widest selection of white papers, trial software, and on-demand webcasts for you to choose from. >> Review the list of White Papers, Trial Software or On-Demand Webcast at the MC Press Resource Center. >> Add the items to yru Cart and complet he checkout process and submit

  • SB Profound WC 5536Join us for this hour-long webcast that will explore:

  • Fortra IT managers hoping to find new IBM i talent are discovering that the pool of experienced RPG programmers and operators or administrators with intimate knowledge of the operating system and the applications that run on it is small. This begs the question: How will you manage the platform that supports such a big part of your business? This guide offers strategies and software suggestions to help you plan IT staffing and resources and smooth the transition after your AS/400 talent retires. Read on to learn: