SET-PARAMETER( ) method (Handle)

Lets you set parameters for one of the following:

Return type: LOGICAL

Applies to: Call object handle

Syntax

SET-PARAMETER ( parameter-number , data-type , iomode , parameter-value )
parameter-number
An integer expression indicating the order of the parameter. Use 1 for the first parameter, 2 for the second parameter, and so on.
data-type
A character expression indicating the data type of the parameter and evaluating to one of the following:
  • "CHARACTER"
  • "DATASET-HANDLE"
  • "DATE"
  • "DATETIME"
  • "DATETIME-TZ"
  • "DECIMAL"
  • "HANDLE"
  • "INT64"
  • "INTEGER"
  • "LOGICAL"
  • "LONGCHAR"
  • "MEMPTR"
  • "RAW"
  • "ROWID"
  • "TABLE-HANDLE"

TABLE-HANDLE can be a handle to a static or dynamic temp-table. Likewise, DATASET-HANDLE can be a handle to a static or dynamic ProDataSet object.

Note: To manage BUFFER parameters, use HANDLE parameters.

For each parameter, the data type specified by the caller and the callee must be compatible. For example, an ABL application must specify a 64-bit ABL data type (INT64) when calling a DLL routine that expects a 64-bit signed integer. The ABL program cannot declare the ABL variable as LONG or UNSIGNED-LONG and expect the correct behavior. Similarly, if a DLL routine expects a 32-bit value, the ABL program must specify a 32-bit ABL data type (LONG or UNSIGNED-LONG). The ABL program cannot declare the ABL variable as a SHORT or UNSIGNED-SHORT and expect the correct behavior.

When invoking a Windows DLL or UNIX shared library function, ABL DLL data types are valid as data-type values. data-type specifies the type expected by the DLL or shared library routine parameter. For example, the parameter data-type is set to "LONG" if the DLL routine parameter expects "LONG". For a list of valid ABL DLL data types, see the DEFINE PARAMETER statement.

If a DLL data type is specified for a non-DLL invocation, the AVM raises a run-time error.

Note: If you pass an ABL character string to a UNIX shared library routine, you can pass it as a CHARACTER variable or expression. However, if you expect the shared library routine to modify the value, Progress Software Corporation recommends that you pass a MEMPTR containing a null-terminated character string.
iomode
A character expression indicating the mode of the parameter and evaluating to one of the following:
  • "INPUT"
  • "OUTPUT"
  • "INPUT-OUTPUT"
  • "OUTPUT-APPEND"

For each parameter, the mode specified by the caller and the callee must match.

For parameters of attributes, specify "INPUT".

For TABLE-HANDLE output parameters whose output is to be appended to the table, and in no other case, specify "OUTPUT-APPEND".

If data-type is "DATASET-HANDLE" or "TABLE-HANDLE", you can append "-by-reference" to any previously listed iomode.

parameter-value
An expression whose type is compatible with data-type.

The parameter-value argument may represent a determinate or indeterminate array. However, you cannot pass an array by value. You can pass an array only as a variable defined using the DEFINE VARIABLE statement with the EXTENT option. If you include the EXTENT keyword in the data-type argument, the AVM ignores it. If you include the array element values in the parameter-value argument, ABL generates a compile error.

If iomode is "INPUT" or "INPUT-OUTPUT", if the data type of parameter-value does not agree with the data type passed, parameter-value will automatically be converted to the data type passed during SET-PARAMETER( ) processing.

If iomode is "OUTPUT" or "INPUT-OUTPUT", each of the following must be true:

  • parameter-value must represent a program variable or a NO-UNDO TEMP-TABLE field (perhaps with an array reference).
  • parameter-value must still be in scope and must still be valid when the dynamic invoke is executed.
  • If the output value from the called procedure does not have a data type that matches the data type passed, the output value will be converted to the data type passed.

If iomode is "OUTPUT", parameter-value is ignored if the ASYNCHRONOUS attribute is TRUE.