Associates a super procedure file with a procedure file or with the current ABL session. When a procedure file invokes an internal procedure or a user-defined function, ABL searches for it, among other places, in the super procedures (if any) of the procedure file and of the current ABL session. The procedure-search option determines which procedures are searched.
For more information on the rules that ABL uses to search for internal procedures and user-defined functions, see Search rules.
For a sample program that uses the ADD-SUPER-PROCEDURE method, see the reference entry for the RUN SUPER statement.
Returns FALSE for a Web service procedure.
Return type: LOGICAL
Applies to: Procedure object handle, SESSION system handle
ADD-SUPER-PROCEDURE returns FALSE if super-proc-hdl is not a valid handle, or if the AVM detects that the method was not successful. Otherwise, the method returns TRUE.
Consider the following:
The following example associates a super procedure with the current procedure:
The following example:
The procedure to which you add a super procedure is called the local procedure of the super procedure.
The following example associates a super procedure with the current ABL session:
When you do this, the AVM automatically associates the super procedure with all the session's procedures—persistent and nonpersistent—without your having to change their code in any way. This technique lets you replace occurrences of the following:
In individual procedures with a single occurrence of the following:
You can associate multiple super procedures with a single local procedure or with the current ABL session. When you do this, the AVM stores (and later on, searches) the corresponding procedure handles in last in first out (LIFO) order—the handle of the most recently added super procedure first, the handle of the next most recently added super procedure second, etc.
A collection of super procedure handles associated with a local procedure or with the current ABL session is called a super procedure stack. The handle of the most recently added super procedure occupies the top of the stack.
If you add a super procedure that is already in the stack, the AVM removes the previous occurrence of the super procedure handle from the stack and adds the new occurrence to the top of the stack—all without reporting an error.
You can add a super procedure to a super procedure. For example, imagine the following scenario:
B is a super procedure (of A) and has a super procedure (C).
When you add a super procedure to a super procedure, the result is a super procedure chain, each link of which consists of two elements: a local procedure and its super procedure. When the AVM searches a super procedure chain, it does not proceed to the next link unless the current link's super procedure element explicitly invokes its super version (by using the RUN SUPER statement or the SUPER function).
For example, imagine the following scenario:
The following events occur:
In this way, the AVM avoids excessive and possibly circular searching.
The AVM searches for internal procedures and user-defined functions depending on how the internal procedure or user-defined function is invoked. The search rules illustrated in the first three cases assume that all the super procedures were added with no proc-search value or with a proc-search value of SEARCH-SELF. The fourth case illustrates the search process when a super procedure is added with a proc-search value of SEARCH-TARGET.
Case 1: When the AVM encounters a statement like the following:
The AVM searches for add-record as follows:
Case 2: When the AVM encounters a statement like the following:
The AVM searches for add-record as follows:
Case 3: When the AVM encounters a statement like the following:
The AVM searches for add-record as follows:
Case 4: A procedure, main.p, has added three super procedures, S1, S2, and S3 (in that order). Each of these super procedures has added its own super procedures, S1A, S1B, S2A, S2B, S3A, S3B. The procedure, add-record, exists in three places: in S1, in S2 where it contains a RUN SUPER statement, and in S2A.
When the AVM encounters a statement like "RUN add-record('customer').", it searches for the add-record procedure:
The following code for main.p shows the differences in the initial setup of this case, which compares the use of no proc-search value (Instance 1) with the use of a value of SEARCH-TARGET (Instance 2):
/* main.p */ DEFINE VARIABLE h AS HANDLE NO-UNDO. RUN s1.p PERSISTENT SET h. THIS-PROCEDURE:ADD-SUPER-PROC(h). RUN s2.p PERSISTENT SET h. /* Instance 1 THIS-PROCEDURE:ADD-SUPER-PROC(h). */ /* Instance 2 */ THIS-PROCEDURE:ADD-SUPER-PROC(h, SEARCH-TARGET). RUN s3.p PERSISTENT SET h. THIS-PROCEDURE:ADD-SUPER-PROC(h). RUN add-record. |
If S2 was added with no proc-search value (Instance 1, commented out) or with a proc-search value of SEARCH-SELF, when RUN SUPER is executed within add-record in S2, the AVM starts searching in S2A, which is next in the search stack of the super procedure, S2.
If S2 was added with a proc-search value of SEARCH-TARGET (Instance 2, as executed), when RUN SUPER is executed within add-record in S2, the AVM starts searching in S1, which is next in the search stack of the local procedure, main.p.