activate
Calls an operation on a component instance.
activate {/list | /sync | /async} | { /stateless} InstName{.LitOperationName ( {ArgumentList} ) }
Example: activate "MyCpt1"
Example: activate /async
"MyCpt".do_it(vArg1, vArg2)
Qualifiers
Qualifier | Description |
---|---|
/list | Passes two parameters in ArgumentList, each of which is a typed Uniface list, to hold the input and output parameters. |
/stateless | Invokes a component operation in a stateless manner. When stateless operations are invoked on Uniface components, a temporary instance is created that is automatically deleted when the operation is finished. Stateless operation invocation is also supported in the communication to Uniface servers. Stored procedure components are stateless by default. |
/async or /sync | Sets the communication mode for the
operation; that is, the operation communicates either synchronously or asynchronously. These switches takes precedence over the switch on the newinstance statement and the component property as specified in the Signature Editor. Asynchronous operation invocation is only supported for components that are executed in a shared Uniface server or in an external middleware environment. Operations that are asynchronously invoked are not allowed to have OUT or INOUT parameters. They do not return a return value. |
Parameters
Parameter | Data Type | Description |
---|---|---|
InstName | String | Name of a component instance that holds
the definition for the requested operation; maximum length of 16 bytes. If an instance with this name cannot be found, an implicit newinstance statement is executed to create an instance, using InstName as the name of the component; default properties are used for the new instance. |
LitOperationName | Literal | Literal name of an operation that is part
of the specified component instance, or a variable containing the name of an operation as a string.
The value can be exec , accept , quit , or a named
operation. If no operation and arguments are specified, .exec() is assumed; that is, the exec operation of the component InstName is started with no parameters. Do not enclose the name in quotation marks ("). |
ArgumentList | String | Comma-separated list of arguments to the operation. The number of arguments supplied must match the number and type of parameters defined with the params statement for the operation LitOperationName. If the data type of an argument does not match the type of the corresponding parameter, Uniface attempts to convert the data to the proper type. |
Return Values
Operations that are asynchronously invoked are not allowed to have OUT or INOUT parameters. They will not return a return value.
If no return or exit statement is present, activate returns default values in $status.
Value | Description |
---|---|
10 | The user used ^QUIT to leave the form that was started with activate. |
9 | The user used ^ACCEPT to leave the form that was started with activate. |
0 | $status has not been assigned a value by the activated operation, or if there is no return statement present |
<0 | An error occurred.
$procerror contains the exact error. When a negative value is returned for $status, the values of parameters with direction OUT and INOUT must be considered to be undefined in the component that activated LitOperationName. |
>0 | Value returned by the operation that was activated. In this case, $procerror is set to zero. (Since Uniface considers a negative value to be an error, it is not a good idea to return a negative value from the activated operation.) |
Value |
Error constant |
Meaning |
---|---|---|
-50 | <UACTERR_NO_SIGNATURE>
|
Signature descriptor for the current
component not found (in UAR or resource file). For example, the component name provided is not
valid. Signature descriptor found but an interface is missing or invalid. |
-51 | <UACTERR_SIGNATURE_ID>
|
The identifier of the compiled component does not match the identifier in the signature descriptor (in UAR or resource file). |
-52 | <UACTERR_PROTOCOL>
|
Protocol error (wrong sequence of operations). |
-53 | <UACTERR_ENTITY_GET>
|
An error occurred while copying the occurrences of an entity parameter to occurrences of the activated operation. This occurs at the start of processing for the activate statement on either the client or the server. |
-54 | <UACTERR_ENTITY_PUT>
|
An error occurred while copying occurrences of the entity parameter in the activated operation to occurrences of the component instance. This occurs at the end of processing for the activate statement on either the client or the server. |
-55 | <UACTERR_PARAMETER_GET>
|
An error occurred while getting an
OUT or INOUT parameter from the activated operation. For example,
the actual parameter provided cannot be used to receive output because it is a constant string.
This occurs at the end of processing for the activate statement on either the
client or the server. |
-56 | <UACTERR_PARAMETER_PUT>
|
An error occurred while putting an
IN or INOUT parameter into the activated operation. This error
occurs at the start of processing for the activate statement on either the client
or the server. |
-57 | <UACTERR_NO_INSTANCE>
|
The named instance cannot be found in the component pool. |
-58 | <UACTERR_NO_COMPONENT>
|
The named component cannot be found. |
-59 | <UACTERR_NO_OPERATION>
|
No definition found for operation. |
-60 | <UACTERR_ACTION_ON_MODALFORM>
|
An attempt was made by an instance other
than the current modal form instance to start an operation other than the EXEC
operation. |
-61 | <UACTERR_ENTITY_DUMMY>
|
The entity specified as an entity parameter is a dummy entity. |
-62 | <UACTERR_ENTITY_PARAM_MISMATCH>
|
The entity specified as an entity parameter must be the same entity as that specified in the operation. That is, one is a supertype and the other is a subtype of that supertype, or both are subtypes of the same supertype. |
-73 | <ACTERR_REMOTE_NOT_SUPPORTED>
|
Operation with byref Struct parameter
cannot be activated across processes. For more information, see Passing Struct Parameters. |
-104 | <UNS_UNSPATH_ERROR>
|
The path to the remote component is not specified in the Name Server assignment file. |
-151 | <UACTERR_EXCEPTION_THROWN>
|
An exception error has been thrown. This error may be returned when a synchronous activation of a remote operation results in an uncaught exception. |
-154 | <UACTERR_INSTANCE_NAME_EXISTS>
|
An instance with this name already
exists. This error code is returned, for example, in the following cases:
|
-155 | <UACTERR_CREATE_INSTANCE>
|
An error occurred while creating an
instance: The component could not be loaded. An
exit statement was executed in the operation |
-164 | <UACTERR_DEL_POSTPONED_PROC>
|
The instance is in the process of being
deleted. For example, between a deleteinstance or exit and the time the instance is actually deleted, an attempt is made to activate an operation in the instance being deleted. |
-168 | <UACTERR_ZOOM_ACTIVE>
|
Zoom window active. It is not possible to start a Form from a zoom window. |
-180 | <UACTERR_ACCESS_DENIED>
|
An operation or trigger that is being activated from a web or SOAP client has not been declared as public web or public soap. |
-1105 | <UPROCERR_INSTANCE>
|
The instance name provided is not valid.) For example, the argument contains incorrect characters. |
-1120 | <UPROCERR_OPERATION>
|
The operation name provided is not valid. |
-1122 | <UPROCERR_NARGUMENTS>
|
Wrong number of arguments. |
-1123 | <UPROCERR_NPARAMETERS>
|
Wrong number of parameters. |
-1411 | <UPROCERR_EDITTWICE>
|
activate was performed on a modal form that is already in edit mode and that has an empty exec operation (an implicit edit). |
Use
Allowed in all component types.
Description
The activate command is normally used after newinstance, which creates a (named) instance of the specified component.
However, if newinstance is not used first, or the specified instance name cannot be found, an implicit newinstance statement is executed to create an instance, using InstName as the name of the component; default properties are used for the new instance.
For example, the following command:
activate "myCpt"
implicitly executes the following statements:
newinstance "myCpt", "myCpt" activate "myCpt".exec()
For more information, see newinstance.
Note: For form components, we recommend that you use handles variable for the instance name. For more information, see Activating Operations Using Handles.
Specifying the Operation Name
The LitOperationName can be specified as a literal or as a variable. For example:
newinstance "myCpt", "myCptInstance" activate "myCptInstance".do_it()
; $vOperation$ is a component variable newinstance "myCpt", "myCptInstance" $vOperation$ = "do_it" activate "myCptInstance".$vOperation$()
; vOperation is a local variable newinstance "myCpt", "myCptInstance" vOperation="do_it" activate "myCptInstance"."%%vOperation%%%"()
Specifying Operation Arguments
At runtime, when an operation is activated, the operation requirements are obtained from the signature descriptor. The arguments supplied in ArgumentList must match the number and data type of the parameters defined for the operation.
- Arguments for IN parameters can be specified as a constant, or as an assignable expression (field, variable, or function) that evaluates to a value.
- Arguments for INOUT must be specified as an assignable expression that evaluates to a value.
- Arguments for OUT parameters must be specified as an assignable expression.
When an operation is activated, the argument values for IN or INOUT parameters are placed in the matching parameters at the start of the operation. When the operation completes, the values of its OUT and INOUT parameters are returned to the field, variable, or function specified by the argument.
If the data type of an argument is not specified
or does not match the type of the corresponding parameter, Uniface attempts to convert the data to
the proper type. For example, the operation ADD_WEEK
in the service SERV2 expects
to find three parameters, with data types Date, Numeric, and Date.
operation ADD_WEEK params date INDATE : IN numeric ADDWKS : IN date OUTDATE : OUT endparams ... end ; ADD_WEEK
When the operation ADD_WEEK
is
activated with the following statement, the string constant supplied as the first argument is
converted to a Date for the operation:
activate "SERV2".ADD_WEEK ("19-jul-96", 5, $DELIV_DATE$)
If the operation expects an entity or occurrence parameter (that is, a constructed parameter), the ArgumentList must be a string (or assignable expression that evaluates to a string) containing the name of a modeled entity (database or non-database) that is painted on the component.
For example, if the current component contains the
modeled entity PO_ITEMS, the following statements sends all the occurrences of the entity PO_ITEMS
to the operation TOTAL_LNS
in the service SERV2:
setocc "PO_ITEMS", -1 activate "SERV2".TOTAL_LNS("PO_ITEMS")
Passing Typed Lists of Parameters
You can use activate/list to pass typed lists of parameters.
Tip: You can explicitly specify the data type of arguments using the $typed ProcScript function, or other data type functions. For more information, see $typed.
For example:
operation CallAddWeek variables String vInParms, vOutParms endvariables ;Create a typed list of parameters putitem vInParms, -1, $date(19980203) putitem vInParms, -1, $number(1) activate/list "SERV2".ADD_WEEK(vInParms,vOutParms) end
After calling this activate,
vOutParms
has the value ";;$date(19980210)"
Parameters for Operations in 3GL Services
When you activate an operation in a 3GL service, consider the following:
- If a parameter is declared as
IN
orINOUT
, Uniface handles the memory management for the parameter. - If a parameter is declared as
OUT
, the 3GL program is responsible for managing the memory required.
Activating Operations in Modal Forms
An operation in a modal form can be started only in the following circumstances:
- A modal form instance starts an operation contained within itself. This can be an operation in the Operations trigger or a special operation like ACCEPT or QUIT.
- A component instance starts the EXEC operation of a modal form. This is equivalent to using the run statement to start a modal form (with the additional possibility of using parameters).
Activating Operating System Operations
You can activate commands on the operating system
command line by creating a signature for an operating system service with the
Implementation Type set to Operating System Command
. This
implementation provides the default operations COMMAND
and
COMMANDOUT
. You can then use the activate command to pass an operating system
command to one of these operations. You can use your assignment file to redirect the OS service
components to a Uniface server. The maximum length of a command is 511 bytes. For more information, see Implementing an OS Service.
In the following example, the exec operation starts two attached, non-modal forms:
operation exec newinstance/attached "NMF2A", "NMF2A", "MODALITY=NON-MODAL" activate "NMF2A".EXEC() newinstance/attached "NMF2B", "NMF2B", "MODALITY=NON-MODAL" activate "NMF2B".EXEC() end; exec
If the forms NMF2A and NMF2B are both defined with their window property Modality & Attachment set to Non-Modal, Attached, these properties do not need to be explicitly stated on a newinstance statement. In this case, the exec operation can be simplified as follows:
operation exec activate "NMF2A" activate "NMF2B" end; exec
Even though the required ProcScript is longer, for documentation purposes, it can be helpful to use newinstance to explicitly state the properties when creating instances.
Exception Handling in an Activated Operation
When an activated operation is exception-enabled and throws an exception, this exception bubbles up to the activate statement. If activate is exception-enabled, and does not catch the exception, it propagates it up to the next level. The information within $procerrorcontext will show that the origin of the exception is from the operation, or deeper in the call stack.
If activate is not exception-enabled, activate passes the $procerror and $procerrorcontext values set by the operation to the following statement. Code execution simply continues and no exception is thrown.
If an exception-enabled activate statement fails to activate the operation, for example by calling the wrong operation, the exception is thrown from activate itself.