× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.




Hi Bryce,


As you are now aware this is not possible with the base RPG language. But...

You can easily build your own mechanism for this.

Imagine a service program that contains three arrays:

1) an array of integers - reference
2) an array of integers - structure types
3) an array of pointers - structure addresses.

At each index would be a set of three values that uniquely identify a structure by reference, type, and address.

You would register your structure as follows:

orderLine = Structure_newStructure( ORDER_LINE : %addr(MasterList_T) );

orderLine would be a unique reference to your structure and would be associated with your structure type (ORDER_LINE) and address.

You can then pass the reference around on your calls and if you need to know what is passed you would call:

type = Structure_getType( orderLine ); // or your local parameter reference in place of orderLine

This would put the value of ORDER_LINE into type.

You could then base your local DS on the structure address:

D LocalDS...
D DS qualified based(address)
D Line...
D 3s 0
D Item...
D 15a
D Quantity...
D 11s 3
D LeadTimeDate...
D 8s 0

D address...
D 8s 0

D type...
D 8s 0



So...

type = Structure_getType( orderLine);

if type = ORDER_LINE;
address = Structure_getAddress( orderLine );
endif;


Now your localDS has the address of the structure associated with the passed reference orderLine and you KNOW it is the correct structure type because you checked the type.

The beauty of this is that your procedure is passed an integer and your interface is future proofed if you create other structures. Your code is also type=-safe as you only populate address once you KNOW the passed structure is of type ORDER_LINE.

We use something similar (but much more sophisticated) and emulate something akin to object references in RPG. With each index representing the object reference, type, and instance variables. We have getters/setters for each data item too:

For us we never expose the address and we would access the data in the structure as follows:


quantity = OrderLine_getQuantity( orderLine );
OrderLine_setLeadTimeDate( orderLine : %dec(%date():8:0));

We can do this because we have separate service programs that do this for all our business objects. We would create an OrderLine service program to hold your structure.

So it is possible to have type-aware structures in RPG but it takes a little work to set it up initially. It is well worth the effort, especially as everything is an integer reference and generic routines are truly generic!

Good luck, and have fun!

Cheers

Larry Ducie



As an Amazon Associate we earn from qualifying purchases.

This thread ...

Follow-Ups:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.