A handle to the procedure file that contains the original invocation (RUN statement or function invocation) of the current internal procedure or user-defined function.
Syntax
SOURCE-PROCEDURE [ :attribute| :method]
attribute
An attribute of the SOURCE-PROCEDURE handle.
method
A method of the SOURCE-PROCEDURE handle.
Attributes
The SOURCE-PROCEDURE handle supports all the attributes of the procedure object handle. For a list of these attributes, see the reference entry for the Procedure object handle in this section.
Methods
The SOURCE-PROCEDURE handle supports all the methods of the procedure object handle. For a list of these methods, see the reference entry for the Procedure object handle in this section.
Example
The following scenarios illustrate using SOURCE-PROCEDURE without procedure overriding, with procedure overriding, and with super and non-super RUNs:
Scenario 1: Using SOURCE-PROCEDURE without procedure overriding
The following scenario uses SOURCE-PROCEDURE without procedure overriding:
1. A and B are handles of procedure files running persistently.
2. proc1 is an internal procedure that resides in B.
3. A says "RUN proc1 IN B," which runs B's proc1.
In this scenario:
The original run statement for proc1 occurs in Step 3.
Within B's proc1 (and within any proc1 that runs as a result of its original RUN statement), SOURCE-PROCEDURE is A.
Scenario 2: Using SOURCE-PROCEDURE with procedure overriding
The following scenario uses SOURCE-PROCEDURE with procedure overriding:
1. A, B, and C, and X are handles of procedure files running persistently.
2. B is a super procedure of A, and C is a super procedure of B.
3. proc1 is an internal procedure different versions of which reside in A, B, and C.
Note: This is an example of procedure overriding.
4. X says "RUN proc1 IN A," which runs A's proc1.
5. A's proc1 says "RUN SUPER," which runs B's proc1.
6. B's proc1 says "RUN SUPER," which runs C's proc1.
In this scenario:
The original run statement for proc1 occurs in Step 4.
Within any version of proc1 that runs as a result of its original RUN statement, SOURCE-PROCEDURE is X.
Scenario 3: With SUPER and non-SUPER RUNs
The following scenario shows how the value of SOURCE-PROCEDURE changes when a non-super RUN occurs:
1. A, B, and C are handles of procedure files running persistently.
2. B is a super procedure of A, and C is a super procedure of B.
3. proc1 is an internal procedure different versions of which reside in A, B, and C.
4. proc2 is an internal procedure different versions of which reside in A, B, and C.
5. A says "RUN proc1," which runs A's proc1.
6. A's proc1 says "RUN SUPER," which runs B's proc1.
7. B's proc1 says "RUN SUPER," which runs C's proc1.
Note: At this point, within any proc1 that runs as a result of its original RUN statement, the value of SOURCE-PROCEDURE is A.
8. C's proc1 says "RUN proc2," which runs C's proc2.
Note: This is a non-super RUN.
In this scenario:
The original RUN statement for proc1 occurs in Step 5.
Within any proc1 that runs as a result of its original RUN statement, SOURCE-PROCEDURE is A.
The original RUN statement for proc2 occurs in Step 8.
Within any proc2 that runs as a result of its original RUN statement, SOURCE-PROCEDURE is C.
For a sample program that uses SOURCE-PROCEDURE, see the reference entry for the RUN SUPER statement.
Notes
You can use SOURCE-PROCEDURE in applications that do not use super procedures.
In the main block of a procedure, the value of SOURCE-PROCEDURE is the handle of the procedure that ran the current ABL source code or r-code file. This allows any ABL program to identify its caller, and to perform a "callback" to its caller.
If an ABL or other client runs a procedure on an AppServer, then in the procedure running on the AppServer, the value of SOURCE-PROCEDURE is the Unknown value (?).