19.3.1 Conformance Checklist for Built-In Functions written in RDML
Please check that any Built-In Function that you write in RDML conforms to all the points in the following checklist.
Note: Failure to conform to all of these checklist points may, under some circumstances, lead to unexpected application failure, unexpected behavior and/or application portability problems.
- All Built-In Function argument and return value defaults are simple alpha or numeric literal values. Ensure no other type of default value (e.g. a system variable) has been used for arguments or return values.
- The Built-In Function name is simple. It is composed of letters of the English alphabet (A through to Z), 0 through to 9 and underscore only.
- The name of the RDML function containing the BIF logic is simple. It is composed of letters of the English alphabet (A through to Z), 0 through to 9, special characters @ and underscore only.
- The RDML function containing the BIF logic uses a specific *HEAVYUSAGE or *LIGHTUSAGE option in a FUNCTION command to indicate how it is to be (re)activated.
- The RDML function containing the BIF logic can handle a shutdown call (system variable *BIF_SHUTDOWN = Y) correctly - regardless of whether it uses the *HEAVYUSAGE or *LIGHTUSAGE option. In most circumstances this simply involves this logic at the start of the function:
IF COND('*BIF_SHUTDOWN = Y')
- No attempt is made in the RDML function containing the BIF logic to use the exchange list to either receive information from, or return information to, the function that has invoked the Built-In Function.
- The RDML function containing the Built-In Function logic terminates only with specific RETURN and ABORT commands. Other termination commands such as EXIT, MENU, TRANSFER, etc (regardless of whether they are used specifically or are generated by screen I/O commands) are not used to terminate the function.
- Any screen I/O commands used in the RDML function containing the BIF logic (such as DISPLAY, REQUEST, POP_UP or MESSAGE) are conditioned by the job mode thus allowing the BIF to function viably in interactive or batch jobs
- The function routing table is not used in any way in conjunction with the RDML function containing the BIF logic. RDML BIF functions are not (re)routed by the function routing table. Refer to What is Function Routing in the LANSA for i User Guide, if you'd like more details.
- Functions that invoke the BIF do not use the same working list in the WITH_ARG and TO_GET parameters of the USE command.
- No attempt is made to control access to the BIF using RDML function level security. BIFs coded in RDML are not subject to any form of invocation level security checking because of the severe performance overheads that this would incur.