Progress
Language Reference
THIS-PROCEDURE System Handle
A handle to the current procedure object. This object allows you to read and modify the context of the current procedure.
SYNTAX
attribute
An attribute of a procedure handle. This table lists the supported attributes.
method
Specifies a method of a procedure handle. This table lists the supported methods.
Method Return Type Description ADD-SUPER-PROCEDURE( ) Method (super-proc-hdl) LOGICAL Associates a super procedure file with a procedure file. GET-SIGNATURE( ) Method (internal-procedure) CHARACTER Returns the return type and parameter types of a specified internal procedure or user-defined function of this procedure. REMOVE-SUPER-PROCEDURE( ) Method (super-proc-hdl) LOGICAL Dissociates a super procedure file from a procedure file.EXAMPLES
The following procedure is designed to run both persistently and non-persistently. It sets up a query on the customer table of the sports database that is selectable by name or balance.
The procedure uses the THIS-PROCEDURE handle to distinguish between persistent and non-persistent instances of execution. When
r-thispr.p
is persistent (THIS-PROCEDURE:PERSISTENT = TRUE), it:
- Sets the PRIVATE-DATA attribute to help identify it to other procedures.
- Creates a private widget pool to maintain its dynamic window for as long as the procedure instance persists.
- Defines a trigger to delete the procedure when it is terminated. Note that the trigger calls the internal procedure destroy-query, which can be executed by other external procedures to delete
r-thispr.p
when it is persistent. This destroy-query routine references the THIS-PROCEDURE handle to delete its persistent parent. It also deletes the widget pool that maintains the dynamic window.When
r-thispr.p
is non-persistent (THIS-PROCEDURE:PERSISTENT = FALSE), it invokes a WAIT-FOR statement rather than defining a trigger to terminate the procedure. It does not need to create a widget pool or maintain any other persistent context.Note that because both persistent and non-persistent instances of this procedure use a dynamic window separate from the default window,
r-thispr.p
assigns the window’s handle to the procedure’s CURRENT-WINDOW attribute. This makes the dynamic window current whether or not the procedure is persistent. However, when the procedure is persistent, the CURRENT-WINDOW attribute keeps the dynamic window current while other procedures execute using different windows. Because the persistent procedure has its own current window, its triggers and internal procedures do not have to reset the current window every time they execute.NOTES
- The attributes supported by THIS-PROCEDURE are supported by any valid procedure handle. You can also define triggers for procedure handles. For more information, see the Progress Programming Handbook .
- By determining if the current procedure is persistent, you can decide whether or not to perform certain actions. An action that you might perform during a non-persistent procedure is to execute a WAIT-FOR statement to provide interactive I/O blocking. Actions that you might execute during a persistent procedure include creating a new window to parent all other widgets created in the procedure, or maintaining an unscoped record buffer that lasts as long as the procedure persists.
- To create an instance of a persistent procedure, use the PERSISTENT option of the RUN statement.
- If THIS-PROCEDURE is persistent and the NEXT-SIBLING or PREV-SIBLING attributes are invalid, THIS-PROCEDURE specifies the last or first persistent procedure instance (respectively) in the session persistent procedure chain. To check the validity of these attributes, use the VALID-HANDLE function.
- You can access the handles and attributes of all persistent procedure instances in a session using the FIRST-PROCEDURE or LAST-PROCEDURE attribute of the SESSION handle.
- For information on transaction objects, see the Building Distributed Applications Using the Progress AppServer manual.
SEE ALSO
Copyright © 2004 Progress Software Corporation www.progress.com Voice: (781) 280-4000 Fax: (781) 280-4095 |