PC SOFT

WINDEVWEBDEV AND WINDEV MOBILE
ONLINE HELP

Home | Sign in | English UK
  • Creating a procedure
  • Exiting from a procedure
  • "At the end of the event containing the call"
  • Returning a result
  • Stamping the return value
  • Extension attributes
  • Zombie (or obsolete) procedure
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaReports and QueriesUser code (UMC)
WEBDEV
WindowsLinuxPHPWEBDEV - Browser code
WINDEV Mobile
AndroidAndroid Widget iPhone/iPadApple WatchUniversal Windows 10 AppWindows Mobile
Others
Stored procedures
The method for declaring a procedure is the same no matter whether it is:
Important: You must not declare two procedures with the same name (especially a global procedure and a local procedure).
Call again: In WLanguage, there is no distinction between the procedures and the functions. The syntaxes for declaring and using the procedures also apply to the functions.
Example
PROCEDURE Find(FileName, Key, Value)
HReadSeek(FileName, Key, Value)
IF HFound() = True THEN
        RESULT True
ELSE
        RESULT False
END
Syntax

Declaring a procedure with parameters Hide the details

PROCEDURE <Procedure name>(<Parameters>) [<Extension attributes>] [: <Type of return>]
<Procedure code>
<PROCEDURE>:
Start of procedure declaration.
Note: To make your programs more readable, the PROCEDURE keyword can be replaced by the FUNCTION keyword.
<Procedure name>:
Name of procedure to declare.
<Parameters>:
Parameters passed to the procedure. Each parameter is separated by a comma. See Parameters of a procedure for more details.
Versions 19 and later
If your procedure or function is using a project element (window, page, report, ...), you have the ability to get the list of requested elements in the completion. To do so, add an extension attribute into the declaration of the function or procedure parameters.
New in version 19
If your procedure or function is using a project element (window, page, report, ...), you have the ability to get the list of requested elements in the completion. To do so, add an extension attribute into the declaration of the function or procedure parameters.
If your procedure or function is using a project element (window, page, report, ...), you have the ability to get the list of requested elements in the completion. To do so, add an extension attribute into the declaration of the function or procedure parameters.
<Extension attributes>:
Versions 23 and later
Extension attributes used to define the options for managing the code editor. For more details on the available extension attributes, see remarks.
New in version 23
Extension attributes used to define the options for managing the code editor. For more details on the available extension attributes, see remarks.
Extension attributes used to define the options for managing the code editor. For more details on the available extension attributes, see remarks.
<Type of return>:
Versions 18 and later
Type of value returned by the procedure. This type can correspond to a simple type (integer, real, string, ...) or to a structured type (structure, object, ...).
This information is used to make sure that the procedure always has the same type of value in return. The returned value will always be converted to the specified type.
For example, if the return type is "Integer" and if the returned value is a string, the string will be automatically converted to integer.
New in version 18
Type of value returned by the procedure. This type can correspond to a simple type (integer, real, string, ...) or to a structured type (structure, object, ...).
This information is used to make sure that the procedure always has the same type of value in return. The returned value will always be converted to the specified type.
For example, if the return type is "Integer" and if the returned value is a string, the string will be automatically converted to integer.
Type of value returned by the procedure. This type can correspond to a simple type (integer, real, string, ...) or to a structured type (structure, object, ...).
This information is used to make sure that the procedure always has the same type of value in return. The returned value will always be converted to the specified type.
For example, if the return type is "Integer" and if the returned value is a string, the string will be automatically converted to integer.
<Procedure code>:
WLanguage code of procedure to declare.

Declaring a procedure without parameter Hide the details

PROCEDURE <Procedure name>() [<Extension attributes>] [: <Type of return>]
<Procedure code>
<PROCEDURE>:
Start of procedure declaration.
Note: To make your programs more readable, the PROCEDURE keyword can be replaced by the FUNCTION keyword.
<Procedure name>:
Name of procedure to declare.
<Extension attributes>:
Versions 23 and later
Extension attributes used to define the options for managing the code editor. For more details on the available extension attributes, see remarks.
New in version 23
Extension attributes used to define the options for managing the code editor. For more details on the available extension attributes, see remarks.
Extension attributes used to define the options for managing the code editor. For more details on the available extension attributes, see remarks.
<Type of return>:
Versions 18 and later
Type of value returned by the procedure. This type can correspond to a simple type (integer, real, string, ...) or to a structured type (structure, object, ...).
This information is used to make sure that the procedure always has the same type of value in return. The returned value will always be converted to the specified type.
For example, if the return type is "Integer" and if the returned value is a string, the string will be automatically converted to integer.
New in version 18
Type of value returned by the procedure. This type can correspond to a simple type (integer, real, string, ...) or to a structured type (structure, object, ...).
This information is used to make sure that the procedure always has the same type of value in return. The returned value will always be converted to the specified type.
For example, if the return type is "Integer" and if the returned value is a string, the string will be automatically converted to integer.
Type of value returned by the procedure. This type can correspond to a simple type (integer, real, string, ...) or to a structured type (structure, object, ...).
This information is used to make sure that the procedure always has the same type of value in return. The returned value will always be converted to the specified type.
For example, if the return type is "Integer" and if the returned value is a string, the string will be automatically converted to integer.
<Procedure code>:
WLanguage code of procedure.

Declaring a procedure with variable parameters Hide the details

PROCEDURE <Procedure name>(<Parameters>, ]*) [<Extension attributes>] [: <Type of return>]
<Procedure code>
<PROCEDURE>:
Start of procedure declaration.
Note: To make your programs more readable, the PROCEDURE keyword can be replaced by the FUNCTION keyword.
<Procedure name>:
Name of procedure to declare.
<Parameters>:
Parameters passed to the procedure. Each parameter is separated by a comma.
If the number of parameters that can be passed to the procedure changes, use the "*" symbol. Some examples:
  • Procedures that can receive between 0 and 255 parameters: Procedure MyProc(*).
  • Procedures that can receive between 1 and 255 parameters: Procedure MyProc(Param1, *).
See for more details:
<Extension attributes>:
Versions 23 and later
Extension attributes used to define the options for managing the code editor. For more details on the available extension attributes, see remarks.
New in version 23
Extension attributes used to define the options for managing the code editor. For more details on the available extension attributes, see remarks.
Extension attributes used to define the options for managing the code editor. For more details on the available extension attributes, see remarks.
<Type of return>:
Versions 18 and later
Type of value returned by the procedure. This type can correspond to a simple type (integer, real, string, ...) or to a structured type (structure, object, ...).
This information is used to make sure that the procedure always has the same type of value in return. The returned value will always be converted to the specified type.
For example, if the return type is "Integer" and if the returned value is a string, the string will be automatically converted to integer.
New in version 18
Type of value returned by the procedure. This type can correspond to a simple type (integer, real, string, ...) or to a structured type (structure, object, ...).
This information is used to make sure that the procedure always has the same type of value in return. The returned value will always be converted to the specified type.
For example, if the return type is "Integer" and if the returned value is a string, the string will be automatically converted to integer.
Type of value returned by the procedure. This type can correspond to a simple type (integer, real, string, ...) or to a structured type (structure, object, ...).
This information is used to make sure that the procedure always has the same type of value in return. The returned value will always be converted to the specified type.
For example, if the return type is "Integer" and if the returned value is a string, the string will be automatically converted to integer.
<Procedure code>:
WLanguage code of procedure to declare.
Remarks

Creating a procedure

See Global procedures for more details.
See Local procedures for more details.

Exiting from a procedure

To force the exit from a procedure, use the RETURN keyword. In the procedure, not all processes after the RETURN keyword are run.
For example:
PROCEDURE Calculate(Dividend)
IF Dividend = 0 THEN
        Error("Unable to divide by zero")
        RETURN
ELSE
        ...
END
Notes:
  • If the procedure returns a result, use the RESULT keyword.
  • RETURN and RESULT cannot be used in the same process.

"At the end of the event containing the call"

The procedures with the option "At the end of the event containing the call" enabled, and called from a callback procedure (procedure used by fListFile, Event, etc.) are run at the end of each call to the callback.
Example:
// -----------------
// standard case
// -----------------
Click of button
// beginning of button click code
Proc1
// beginning of Procedure1 code
Proc2
// beginning of Procedure2 code

Call to EndEvent procedure
// end of Proc2 code
// end of Proc1 code
// end of button click code
Execution of EndEvent procedure
// -------------------
// callback case
// -------------------
Click of button
Proc1
Proc2
use of fListFile
Callback1 procedure
// beginning of code of Callback1 Procedure
CallbackProc2
// beginning of code of Callback2 Procedure
Call to ProcEndEvent
// end of ProcedureCallback2 code
// end of ProcedureCallback1 code
Execution of ProcEndEvent
ProcedureCallback1
// beginning of ProcedureCallback1 code
ProcedureCallback2
// beginning of ProcedureCallback2 code
Call to ProcEndEvent
// end of ProcedureCallback2 code
// end of ProcedureCallback1 code
Execution of ProcEndEvent

Returning a result

To return the procedure result to the calling process, use RESULT. This keyword is used to return:
  • a value,
  • Versions 19 and later
    several values.
    New in version 19
    several values.
    several values.
For example:
// Procedure that returns a value
PROCEDURE Find(FileName, Key, Value)
HReadSeek(FileName, Key, Value)
IF HFound() = True THEN
RESULT True
ELSE
RESULT False
END
Versions 19 and later
// Procedure that returns several values
PROCEDURE MyProc()

// Process
RESULT(1, 2, 3)


// Code for calling the procedure
( x, y, z ) = MyProc()
// x is set to 1, y to 2 and z to 3
New in version 19
// Procedure that returns several values
PROCEDURE MyProc()

// Process
RESULT(1, 2, 3)


// Code for calling the procedure
( x, y, z ) = MyProc()
// x is set to 1, y to 2 and z to 3
// Procedure that returns several values
PROCEDURE MyProc()

// Process
RESULT(1, 2, 3)


// Code for calling the procedure
( x, y, z ) = MyProc()
// x is set to 1, y to 2 and z to 3
Tip: For the procedures that return a result, we recommend that you use the FUNCTION keyword instead of PROCEDURE to simplify the code reading.
Important: The RETURN keyword must not be used to force the exit from a procedure that returns a result. Indeed, the call to the procedure expects a status report that will not be returned if the exit from the procedure is forced.
Versions 18 and later

Stamping the return value

To specify the type of return value, all you have to do is specify this type (preceded by ':') when declaring the procedure. For example:
PROCEDURE Calculation(): Integer
 
IF MyExpression = True THEN
RESULT "1"  // The string "1" will be converted to integer
ELSE
RESULT 0
END
Versions 19 and later
Case of multiple return values
You have the ability to assign a type to the return values. The syntax is as follows:
PROCEDURE ProcedureName(): ([<Type value 1>, [<Type value 2>, ... , [<Type Value N>]]])
Note: There is no need to specify the type for all return values. To avoid specifying the type of a return value, all you have to do is omit the type or use the '?' character.
Example:
PROCEDURE Procedure_Name(): (string..String)
 
RESULT(1,2,3)

PROCEDURE Procedure_Name(): (string,?,string)
 
RESULT(1,2,3)
You have the ability to assign a type to the return values from version 190040.
New in version 19
Case of multiple return values
You have the ability to assign a type to the return values. The syntax is as follows:
PROCEDURE ProcedureName(): ([<Type value 1>, [<Type value 2>, ... , [<Type Value N>]]])
Note: There is no need to specify the type for all return values. To avoid specifying the type of a return value, all you have to do is omit the type or use the '?' character.
Example:
PROCEDURE Procedure_Name(): (string..String)
 
RESULT(1,2,3)

PROCEDURE Procedure_Name(): (string,?,string)
 
RESULT(1,2,3)
You have the ability to assign a type to the return values from version 190040.
Case of multiple return values
You have the ability to assign a type to the return values. The syntax is as follows:
PROCEDURE ProcedureName(): ([<Type value 1>, [<Type value 2>, ... , [<Type Value N>]]])
Note: There is no need to specify the type for all return values. To avoid specifying the type of a return value, all you have to do is omit the type or use the '?' character.
Example:
PROCEDURE Procedure_Name(): (string..String)
 
RESULT(1,2,3)

PROCEDURE Procedure_Name(): (string,?,string)
 
RESULT(1,2,3)
You have the ability to assign a type to the return values from version 190040.
The following types of return are allowed:
TypesChecks performed during the compilationChecks/Actions performed at run time
booleanAutomatic WLanguage conversions
unsigned integerAutomatic WLanguage conversions
unsigned integer on 8 bytesAutomatic WLanguage conversions
intAutomatic WLanguage conversions
8-byte integerAutomatic WLanguage conversions
system integerAutomatic WLanguage conversions
currencyAutomatic WLanguage conversions
numericAutomatic WLanguage conversions
realAutomatic WLanguage conversions
4-byte realAutomatic WLanguage conversions
characterAutomatic WLanguage conversions
stringAutomatic WLanguage conversions
ANSI stringOnly the strings without size are allowedAutomatic WLanguage conversions
UNICODE stringOnly the strings without size are allowedAutomatic WLanguage conversions
bufferOnly the strings without size are allowedAutomatic WLanguage conversions
dateAutomatic WLanguage conversions
timeAutomatic WLanguage conversions
datetimeAutomatic WLanguage conversions
durationAutomatic WLanguage conversions
procedureOnly the Procedure types are allowedOnly the Procedure types are allowed
fontOnly the Font types are allowedOnly the Font types are allowed
<enumeration>
<combination>
<class>
  • "dynamic" is not allowed
  • The classes must be correlated
Conversions allowed only
<structure>
  • "dynamic" is not allowed
  • the structures must be the same.
The structures must be the same.
<advanced type>
  • "dynamic" not allowed
  • The advanced types must be the same.
The advanced types must be the same.
<.NET class>"dynamic" not allowed
table
  • "dynamic" not allowed
  • Checking the type of elements
  • Checking the number of dimensions
  • Checking the type of elements
  • Checking the number of dimensions if the dimensions are supplied,
  • Checking each dimension
associative arrayChecking the type of elementsChecking the type of elements
stackChecking the type of elementsChecking the type of elements
queueChecking the type of elementsChecking the type of elements
listChecking the type of elementsChecking the type of elements
New in version 18

Stamping the return value

To specify the type of return value, all you have to do is specify this type (preceded by ':') when declaring the procedure. For example:
PROCEDURE Calculation(): Integer
 
IF MyExpression = True THEN
RESULT "1"  // The string "1" will be converted to integer
ELSE
RESULT 0
END
Versions 19 and later
Case of multiple return values
You have the ability to assign a type to the return values. The syntax is as follows:
PROCEDURE ProcedureName(): ([<Type value 1>, [<Type value 2>, ... , [<Type Value N>]]])
Note: There is no need to specify the type for all return values. To avoid specifying the type of a return value, all you have to do is omit the type or use the '?' character.
Example:
PROCEDURE Procedure_Name(): (string..String)
 
RESULT(1,2,3)

PROCEDURE Procedure_Name(): (string,?,string)
 
RESULT(1,2,3)
You have the ability to assign a type to the return values from version 190040.
New in version 19
Case of multiple return values
You have the ability to assign a type to the return values. The syntax is as follows:
PROCEDURE ProcedureName(): ([<Type value 1>, [<Type value 2>, ... , [<Type Value N>]]])
Note: There is no need to specify the type for all return values. To avoid specifying the type of a return value, all you have to do is omit the type or use the '?' character.
Example:
PROCEDURE Procedure_Name(): (string..String)
 
RESULT(1,2,3)

PROCEDURE Procedure_Name(): (string,?,string)
 
RESULT(1,2,3)
You have the ability to assign a type to the return values from version 190040.
Case of multiple return values
You have the ability to assign a type to the return values. The syntax is as follows:
PROCEDURE ProcedureName(): ([<Type value 1>, [<Type value 2>, ... , [<Type Value N>]]])
Note: There is no need to specify the type for all return values. To avoid specifying the type of a return value, all you have to do is omit the type or use the '?' character.
Example:
PROCEDURE Procedure_Name(): (string..String)
 
RESULT(1,2,3)

PROCEDURE Procedure_Name(): (string,?,string)
 
RESULT(1,2,3)
You have the ability to assign a type to the return values from version 190040.
The following types of return are allowed:
TypesChecks performed during the compilationChecks/Actions performed at run time
booleanAutomatic WLanguage conversions
unsigned integerAutomatic WLanguage conversions
unsigned integer on 8 bytesAutomatic WLanguage conversions
intAutomatic WLanguage conversions
8-byte integerAutomatic WLanguage conversions
system integerAutomatic WLanguage conversions
currencyAutomatic WLanguage conversions
numericAutomatic WLanguage conversions
realAutomatic WLanguage conversions
4-byte realAutomatic WLanguage conversions
characterAutomatic WLanguage conversions
stringAutomatic WLanguage conversions
ANSI stringOnly the strings without size are allowedAutomatic WLanguage conversions
UNICODE stringOnly the strings without size are allowedAutomatic WLanguage conversions
bufferOnly the strings without size are allowedAutomatic WLanguage conversions
dateAutomatic WLanguage conversions
timeAutomatic WLanguage conversions
datetimeAutomatic WLanguage conversions
durationAutomatic WLanguage conversions
procedureOnly the Procedure types are allowedOnly the Procedure types are allowed
fontOnly the Font types are allowedOnly the Font types are allowed
<enumeration>
<combination>
<class>
  • "dynamic" is not allowed
  • The classes must be correlated
Conversions allowed only
<structure>
  • "dynamic" is not allowed
  • the structures must be the same.
The structures must be the same.
<advanced type>
  • "dynamic" not allowed
  • The advanced types must be the same.
The advanced types must be the same.
<.NET class>"dynamic" not allowed
table
  • "dynamic" not allowed
  • Checking the type of elements
  • Checking the number of dimensions
  • Checking the type of elements
  • Checking the number of dimensions if the dimensions are supplied,
  • Checking each dimension
associative arrayChecking the type of elementsChecking the type of elements
stackChecking the type of elementsChecking the type of elements
queueChecking the type of elementsChecking the type of elements
listChecking the type of elementsChecking the type of elements

Stamping the return value

To specify the type of return value, all you have to do is specify this type (preceded by ':') when declaring the procedure. For example:
PROCEDURE Calculation(): Integer
 
IF MyExpression = True THEN
RESULT "1"  // The string "1" will be converted to integer
ELSE
RESULT 0
END
Versions 19 and later
Case of multiple return values
You have the ability to assign a type to the return values. The syntax is as follows:
PROCEDURE ProcedureName(): ([<Type value 1>, [<Type value 2>, ... , [<Type Value N>]]])
Note: There is no need to specify the type for all return values. To avoid specifying the type of a return value, all you have to do is omit the type or use the '?' character.
Example:
PROCEDURE Procedure_Name(): (string..String)
 
RESULT(1,2,3)

PROCEDURE Procedure_Name(): (string,?,string)
 
RESULT(1,2,3)
You have the ability to assign a type to the return values from version 190040.
New in version 19
Case of multiple return values
You have the ability to assign a type to the return values. The syntax is as follows:
PROCEDURE ProcedureName(): ([<Type value 1>, [<Type value 2>, ... , [<Type Value N>]]])
Note: There is no need to specify the type for all return values. To avoid specifying the type of a return value, all you have to do is omit the type or use the '?' character.
Example:
PROCEDURE Procedure_Name(): (string..String)
 
RESULT(1,2,3)

PROCEDURE Procedure_Name(): (string,?,string)
 
RESULT(1,2,3)
You have the ability to assign a type to the return values from version 190040.
Case of multiple return values
You have the ability to assign a type to the return values. The syntax is as follows:
PROCEDURE ProcedureName(): ([<Type value 1>, [<Type value 2>, ... , [<Type Value N>]]])
Note: There is no need to specify the type for all return values. To avoid specifying the type of a return value, all you have to do is omit the type or use the '?' character.
Example:
PROCEDURE Procedure_Name(): (string..String)
 
RESULT(1,2,3)

PROCEDURE Procedure_Name(): (string,?,string)
 
RESULT(1,2,3)
You have the ability to assign a type to the return values from version 190040.
The following types of return are allowed:
TypesChecks performed during the compilationChecks/Actions performed at run time
booleanAutomatic WLanguage conversions
unsigned integerAutomatic WLanguage conversions
unsigned integer on 8 bytesAutomatic WLanguage conversions
intAutomatic WLanguage conversions
8-byte integerAutomatic WLanguage conversions
system integerAutomatic WLanguage conversions
currencyAutomatic WLanguage conversions
numericAutomatic WLanguage conversions
realAutomatic WLanguage conversions
4-byte realAutomatic WLanguage conversions
characterAutomatic WLanguage conversions
stringAutomatic WLanguage conversions
ANSI stringOnly the strings without size are allowedAutomatic WLanguage conversions
UNICODE stringOnly the strings without size are allowedAutomatic WLanguage conversions
bufferOnly the strings without size are allowedAutomatic WLanguage conversions
dateAutomatic WLanguage conversions
timeAutomatic WLanguage conversions
datetimeAutomatic WLanguage conversions
durationAutomatic WLanguage conversions
procedureOnly the Procedure types are allowedOnly the Procedure types are allowed
fontOnly the Font types are allowedOnly the Font types are allowed
<enumeration>
<combination>
<class>
  • "dynamic" is not allowed
  • The classes must be correlated
Conversions allowed only
<structure>
  • "dynamic" is not allowed
  • the structures must be the same.
The structures must be the same.
<advanced type>
  • "dynamic" not allowed
  • The advanced types must be the same.
The advanced types must be the same.
<.NET class>"dynamic" not allowed
table
  • "dynamic" not allowed
  • Checking the type of elements
  • Checking the number of dimensions
  • Checking the type of elements
  • Checking the number of dimensions if the dimensions are supplied,
  • Checking each dimension
associative arrayChecking the type of elementsChecking the type of elements
stackChecking the type of elementsChecking the type of elements
queueChecking the type of elementsChecking the type of elements
listChecking the type of elementsChecking the type of elements
Versions 23 and later

Extension attributes

The available extension attributes are:
  • extension attribute for managing zombie procedures:
    <zombie [comment = "text"]>Used to define an obsolete procedure (also called zombie procedure). The optional comment keyword is used to indicate the text that will be displayed in the compilation error associated with the obsolete procedure. See Zombie procedures for more details.
  • extension attribute for managing the debugger:
    <without step by step>Used to specify that the procedure will be ignored by the debugger when debugging in "Step by step" mode.
  • Versions 24 and later
    extension attributes specific to local, global or internal procedures:
    <automatic>Used to specify that this procedure will be run automatically after the initialization code (of the window, page or project).

    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.

    Caution, this extension attribute cannot be applied to an internal procedure.
    <end process>Used to specify that this procedure will be run after the process that contains the call to the procedure.

    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
    <end event>Used to specify that this procedure will be run after the process that contains the call to the procedure. See "At the end of the event containing the call" for more details.

    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
    New in version 24
    extension attributes specific to local, global or internal procedures:
    <automatic>Used to specify that this procedure will be run automatically after the initialization code (of the window, page or project).

    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.

    Caution, this extension attribute cannot be applied to an internal procedure.
    <end process>Used to specify that this procedure will be run after the process that contains the call to the procedure.

    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
    <end event>Used to specify that this procedure will be run after the process that contains the call to the procedure. See "At the end of the event containing the call" for more details.

    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
    extension attributes specific to local, global or internal procedures:
    <automatic>Used to specify that this procedure will be run automatically after the initialization code (of the window, page or project).

    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.

    Caution, this extension attribute cannot be applied to an internal procedure.
    <end process>Used to specify that this procedure will be run after the process that contains the call to the procedure.

    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
    <end event>Used to specify that this procedure will be run after the process that contains the call to the procedure. See "At the end of the event containing the call" for more details.

    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
  • Versions 24 and later
    extension attribute to manage timers:
    <timer [=interval in hundredths of a second]>Used to specify that the procedure will be run in a Timer.
    This extension attribute is equivalent to TimerSys. Repetition is automatic. The optional value interval in hundredths of a second is used to specify the time interval between 2 repetitions:
    • If this value is not specified, it is necessary to specify the time interval between 2 repetitions using <interval>.
    • If this value is not specified, the values of <delay> and <interval> are initialized with the value of the specified interval.
    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
    <repetition [=number of repetitions]>Used to specify that the procedure is called several times in a row (repetitions). The optional value number of repetitions is used to specify the number of calls to the procedure.
    • If this value is not specified, the repetition will go on until:
      • EndAutomatedProcedure is called.
      • the element to which the procedure belongs is closed (window, page, report).
      • the instance to which the procedure belongs is destroyed (for more details about the concept of instance, see the help on Instantiation of an object).
      • the end of the application (application closed by the user, or use of EndProgram).
    • If this value is specified, the procedure will be called as many times as the specified number.
    This extension attribute is not compatible with <timer>. In a Timer, repetition is automatic and infinite (until the Timer stops)..

    Additionally, you can see the help about Automatic procedures.
    <interval=duration in hundredths of a second>Used to specify the duration (interval) between 2 calls to the procedure.
    This extension attribute must be used with <timer> or <repetition>. The optional value interval in hundredths of a second is used to specify this time interval.
    If this value is not specified, you must specify this value with <timer>.

    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
    <call again[=type of call]>Used to specify, in a procedure called in a Timer, the operating mode of subsequent calls. This extension attribute must be used with <timer>. The optional value of this extension attribute can be:
    ignore
    (Default value)
    The procedure is called immediately. There is no wait time for calling the procedure. The procedure is called only once without repetition.
    newA new Timer is triggered. The procedure is called in this new Timer.
    Caution, the previous Timer has not stopped. The Timers will pile up in memory.
    restartUsed to restart the Timer automatically at the end of the procedure. <Interval> is used to define the time interval between each call to the procedure.
    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
    <delay=duration un hundredths of a second>Used to specify the wait time before the start of the procedure in a Timer (during the first call). This extension attribute must be used with <timer>. The optional value delay in hundredths of a second is used to specify this wait time.
    If this value is not specified, you must specify this value when using <timer>.

    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
    New in version 24
    extension attribute to manage timers:
    <timer [=interval in hundredths of a second]>Used to specify that the procedure will be run in a Timer.
    This extension attribute is equivalent to TimerSys. Repetition is automatic. The optional value interval in hundredths of a second is used to specify the time interval between 2 repetitions:
    • If this value is not specified, it is necessary to specify the time interval between 2 repetitions using <interval>.
    • If this value is not specified, the values of <delay> and <interval> are initialized with the value of the specified interval.
    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
    <repetition [=number of repetitions]>Used to specify that the procedure is called several times in a row (repetitions). The optional value number of repetitions is used to specify the number of calls to the procedure.
    • If this value is not specified, the repetition will go on until:
      • EndAutomatedProcedure is called.
      • the element to which the procedure belongs is closed (window, page, report).
      • the instance to which the procedure belongs is destroyed (for more details about the concept of instance, see the help on Instantiation of an object).
      • the end of the application (application closed by the user, or use of EndProgram).
    • If this value is specified, the procedure will be called as many times as the specified number.
    This extension attribute is not compatible with <timer>. In a Timer, repetition is automatic and infinite (until the Timer stops)..

    Additionally, you can see the help about Automatic procedures.
    <interval=duration in hundredths of a second>Used to specify the duration (interval) between 2 calls to the procedure.
    This extension attribute must be used with <timer> or <repetition>. The optional value interval in hundredths of a second is used to specify this time interval.
    If this value is not specified, you must specify this value with <timer>.

    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
    <call again[=type of call]>Used to specify, in a procedure called in a Timer, the operating mode of subsequent calls. This extension attribute must be used with <timer>. The optional value of this extension attribute can be:
    ignore
    (Default value)
    The procedure is called immediately. There is no wait time for calling the procedure. The procedure is called only once without repetition.
    newA new Timer is triggered. The procedure is called in this new Timer.
    Caution, the previous Timer has not stopped. The Timers will pile up in memory.
    restartUsed to restart the Timer automatically at the end of the procedure. <Interval> is used to define the time interval between each call to the procedure.
    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
    <delay=duration un hundredths of a second>Used to specify the wait time before the start of the procedure in a Timer (during the first call). This extension attribute must be used with <timer>. The optional value delay in hundredths of a second is used to specify this wait time.
    If this value is not specified, you must specify this value when using <timer>.

    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
    extension attribute to manage timers:
    <timer [=interval in hundredths of a second]>Used to specify that the procedure will be run in a Timer.
    This extension attribute is equivalent to TimerSys. Repetition is automatic. The optional value interval in hundredths of a second is used to specify the time interval between 2 repetitions:
    • If this value is not specified, it is necessary to specify the time interval between 2 repetitions using <interval>.
    • If this value is not specified, the values of <delay> and <interval> are initialized with the value of the specified interval.
    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
    <repetition [=number of repetitions]>Used to specify that the procedure is called several times in a row (repetitions). The optional value number of repetitions is used to specify the number of calls to the procedure.
    • If this value is not specified, the repetition will go on until:
      • EndAutomatedProcedure is called.
      • the element to which the procedure belongs is closed (window, page, report).
      • the instance to which the procedure belongs is destroyed (for more details about the concept of instance, see the help on Instantiation of an object).
      • the end of the application (application closed by the user, or use of EndProgram).
    • If this value is specified, the procedure will be called as many times as the specified number.
    This extension attribute is not compatible with <timer>. In a Timer, repetition is automatic and infinite (until the Timer stops)..

    Additionally, you can see the help about Automatic procedures.
    <interval=duration in hundredths of a second>Used to specify the duration (interval) between 2 calls to the procedure.
    This extension attribute must be used with <timer> or <repetition>. The optional value interval in hundredths of a second is used to specify this time interval.
    If this value is not specified, you must specify this value with <timer>.

    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
    <call again[=type of call]>Used to specify, in a procedure called in a Timer, the operating mode of subsequent calls. This extension attribute must be used with <timer>. The optional value of this extension attribute can be:
    ignore
    (Default value)
    The procedure is called immediately. There is no wait time for calling the procedure. The procedure is called only once without repetition.
    newA new Timer is triggered. The procedure is called in this new Timer.
    Caution, the previous Timer has not stopped. The Timers will pile up in memory.
    restartUsed to restart the Timer automatically at the end of the procedure. <Interval> is used to define the time interval between each call to the procedure.
    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
    <delay=duration un hundredths of a second>Used to specify the wait time before the start of the procedure in a Timer (during the first call). This extension attribute must be used with <timer>. The optional value delay in hundredths of a second is used to specify this wait time.
    If this value is not specified, you must specify this value when using <timer>.

    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
  • Versions 24 and later
    extension attribute to manage threads:
    <thread>Used to specify that the procedure will be run in a secondary thread. For more details on threads, see Management of threads.

    This extension attribute is not compatible with <timer> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
    <main thread>Used to specify that the procedure will be run in a secondary thread. For more details on threads, see Management of threads.

    This extension attribute is not compatible with <timer> and <thread>.

    Additionally, you can see the help about Automatic procedures.
    <light HFSQL context>Triggers the immediate copy of part of current HFSQL context.
    Only the directories containing the data files in HFSQL Classic mode and/or the connections in HFSQL Client/Server mode are stored.

    This extension attribute must be used with <thread>. For more details on the management of threads, see the help about ThreadExecute.
    Additionally, you can see the help about Automatic procedures.
    <full HFSQL context>Triggers the immediate copy of current HFSQL context.
    Recommended if the thread must take into account the current positions in the files and queries of caller context.

    This extension attribute must be used with <thread>. For more details on the management of threads, see the help about ThreadExecute.

    Additionally, you can see the help about Automatic procedures.
    New in version 24
    extension attribute to manage threads:
    <thread>Used to specify that the procedure will be run in a secondary thread. For more details on threads, see Management of threads.

    This extension attribute is not compatible with <timer> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
    <main thread>Used to specify that the procedure will be run in a secondary thread. For more details on threads, see Management of threads.

    This extension attribute is not compatible with <timer> and <thread>.

    Additionally, you can see the help about Automatic procedures.
    <light HFSQL context>Triggers the immediate copy of part of current HFSQL context.
    Only the directories containing the data files in HFSQL Classic mode and/or the connections in HFSQL Client/Server mode are stored.

    This extension attribute must be used with <thread>. For more details on the management of threads, see the help about ThreadExecute.
    Additionally, you can see the help about Automatic procedures.
    <full HFSQL context>Triggers the immediate copy of current HFSQL context.
    Recommended if the thread must take into account the current positions in the files and queries of caller context.

    This extension attribute must be used with <thread>. For more details on the management of threads, see the help about ThreadExecute.

    Additionally, you can see the help about Automatic procedures.
    extension attribute to manage threads:
    <thread>Used to specify that the procedure will be run in a secondary thread. For more details on threads, see Management of threads.

    This extension attribute is not compatible with <timer> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
    <main thread>Used to specify that the procedure will be run in a secondary thread. For more details on threads, see Management of threads.

    This extension attribute is not compatible with <timer> and <thread>.

    Additionally, you can see the help about Automatic procedures.
    <light HFSQL context>Triggers the immediate copy of part of current HFSQL context.
    Only the directories containing the data files in HFSQL Classic mode and/or the connections in HFSQL Client/Server mode are stored.

    This extension attribute must be used with <thread>. For more details on the management of threads, see the help about ThreadExecute.
    Additionally, you can see the help about Automatic procedures.
    <full HFSQL context>Triggers the immediate copy of current HFSQL context.
    Recommended if the thread must take into account the current positions in the files and queries of caller context.

    This extension attribute must be used with <thread>. For more details on the management of threads, see the help about ThreadExecute.

    Additionally, you can see the help about Automatic procedures.
New in version 23

Extension attributes

The available extension attributes are:
  • extension attribute for managing zombie procedures:
    <zombie [comment = "text"]>Used to define an obsolete procedure (also called zombie procedure). The optional comment keyword is used to indicate the text that will be displayed in the compilation error associated with the obsolete procedure. See Zombie procedures for more details.
  • extension attribute for managing the debugger:
    <without step by step>Used to specify that the procedure will be ignored by the debugger when debugging in "Step by step" mode.
  • Versions 24 and later
    extension attributes specific to local, global or internal procedures:
    <automatic>Used to specify that this procedure will be run automatically after the initialization code (of the window, page or project).

    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.

    Caution, this extension attribute cannot be applied to an internal procedure.
    <end process>Used to specify that this procedure will be run after the process that contains the call to the procedure.

    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
    <end event>Used to specify that this procedure will be run after the process that contains the call to the procedure. See "At the end of the event containing the call" for more details.

    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
    New in version 24
    extension attributes specific to local, global or internal procedures:
    <automatic>Used to specify that this procedure will be run automatically after the initialization code (of the window, page or project).

    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.

    Caution, this extension attribute cannot be applied to an internal procedure.
    <end process>Used to specify that this procedure will be run after the process that contains the call to the procedure.

    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
    <end event>Used to specify that this procedure will be run after the process that contains the call to the procedure. See "At the end of the event containing the call" for more details.

    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
    extension attributes specific to local, global or internal procedures:
    <automatic>Used to specify that this procedure will be run automatically after the initialization code (of the window, page or project).

    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.

    Caution, this extension attribute cannot be applied to an internal procedure.
    <end process>Used to specify that this procedure will be run after the process that contains the call to the procedure.

    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
    <end event>Used to specify that this procedure will be run after the process that contains the call to the procedure. See "At the end of the event containing the call" for more details.

    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
  • Versions 24 and later
    extension attribute to manage timers:
    <timer [=interval in hundredths of a second]>Used to specify that the procedure will be run in a Timer.
    This extension attribute is equivalent to TimerSys. Repetition is automatic. The optional value interval in hundredths of a second is used to specify the time interval between 2 repetitions:
    • If this value is not specified, it is necessary to specify the time interval between 2 repetitions using <interval>.
    • If this value is not specified, the values of <delay> and <interval> are initialized with the value of the specified interval.
    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
    <repetition [=number of repetitions]>Used to specify that the procedure is called several times in a row (repetitions). The optional value number of repetitions is used to specify the number of calls to the procedure.
    • If this value is not specified, the repetition will go on until:
      • EndAutomatedProcedure is called.
      • the element to which the procedure belongs is closed (window, page, report).
      • the instance to which the procedure belongs is destroyed (for more details about the concept of instance, see the help on Instantiation of an object).
      • the end of the application (application closed by the user, or use of EndProgram).
    • If this value is specified, the procedure will be called as many times as the specified number.
    This extension attribute is not compatible with <timer>. In a Timer, repetition is automatic and infinite (until the Timer stops)..

    Additionally, you can see the help about Automatic procedures.
    <interval=duration in hundredths of a second>Used to specify the duration (interval) between 2 calls to the procedure.
    This extension attribute must be used with <timer> or <repetition>. The optional value interval in hundredths of a second is used to specify this time interval.
    If this value is not specified, you must specify this value with <timer>.

    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
    <call again[=type of call]>Used to specify, in a procedure called in a Timer, the operating mode of subsequent calls. This extension attribute must be used with <timer>. The optional value of this extension attribute can be:
    ignore
    (Default value)
    The procedure is called immediately. There is no wait time for calling the procedure. The procedure is called only once without repetition.
    newA new Timer is triggered. The procedure is called in this new Timer.
    Caution, the previous Timer has not stopped. The Timers will pile up in memory.
    restartUsed to restart the Timer automatically at the end of the procedure. <Interval> is used to define the time interval between each call to the procedure.
    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
    <delay=duration un hundredths of a second>Used to specify the wait time before the start of the procedure in a Timer (during the first call). This extension attribute must be used with <timer>. The optional value delay in hundredths of a second is used to specify this wait time.
    If this value is not specified, you must specify this value when using <timer>.

    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
    New in version 24
    extension attribute to manage timers:
    <timer [=interval in hundredths of a second]>Used to specify that the procedure will be run in a Timer.
    This extension attribute is equivalent to TimerSys. Repetition is automatic. The optional value interval in hundredths of a second is used to specify the time interval between 2 repetitions:
    • If this value is not specified, it is necessary to specify the time interval between 2 repetitions using <interval>.
    • If this value is not specified, the values of <delay> and <interval> are initialized with the value of the specified interval.
    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
    <repetition [=number of repetitions]>Used to specify that the procedure is called several times in a row (repetitions). The optional value number of repetitions is used to specify the number of calls to the procedure.
    • If this value is not specified, the repetition will go on until:
      • EndAutomatedProcedure is called.
      • the element to which the procedure belongs is closed (window, page, report).
      • the instance to which the procedure belongs is destroyed (for more details about the concept of instance, see the help on Instantiation of an object).
      • the end of the application (application closed by the user, or use of EndProgram).
    • If this value is specified, the procedure will be called as many times as the specified number.
    This extension attribute is not compatible with <timer>. In a Timer, repetition is automatic and infinite (until the Timer stops)..

    Additionally, you can see the help about Automatic procedures.
    <interval=duration in hundredths of a second>Used to specify the duration (interval) between 2 calls to the procedure.
    This extension attribute must be used with <timer> or <repetition>. The optional value interval in hundredths of a second is used to specify this time interval.
    If this value is not specified, you must specify this value with <timer>.

    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
    <call again[=type of call]>Used to specify, in a procedure called in a Timer, the operating mode of subsequent calls. This extension attribute must be used with <timer>. The optional value of this extension attribute can be:
    ignore
    (Default value)
    The procedure is called immediately. There is no wait time for calling the procedure. The procedure is called only once without repetition.
    newA new Timer is triggered. The procedure is called in this new Timer.
    Caution, the previous Timer has not stopped. The Timers will pile up in memory.
    restartUsed to restart the Timer automatically at the end of the procedure. <Interval> is used to define the time interval between each call to the procedure.
    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
    <delay=duration un hundredths of a second>Used to specify the wait time before the start of the procedure in a Timer (during the first call). This extension attribute must be used with <timer>. The optional value delay in hundredths of a second is used to specify this wait time.
    If this value is not specified, you must specify this value when using <timer>.

    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
    extension attribute to manage timers:
    <timer [=interval in hundredths of a second]>Used to specify that the procedure will be run in a Timer.
    This extension attribute is equivalent to TimerSys. Repetition is automatic. The optional value interval in hundredths of a second is used to specify the time interval between 2 repetitions:
    • If this value is not specified, it is necessary to specify the time interval between 2 repetitions using <interval>.
    • If this value is not specified, the values of <delay> and <interval> are initialized with the value of the specified interval.
    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
    <repetition [=number of repetitions]>Used to specify that the procedure is called several times in a row (repetitions). The optional value number of repetitions is used to specify the number of calls to the procedure.
    • If this value is not specified, the repetition will go on until:
      • EndAutomatedProcedure is called.
      • the element to which the procedure belongs is closed (window, page, report).
      • the instance to which the procedure belongs is destroyed (for more details about the concept of instance, see the help on Instantiation of an object).
      • the end of the application (application closed by the user, or use of EndProgram).
    • If this value is specified, the procedure will be called as many times as the specified number.
    This extension attribute is not compatible with <timer>. In a Timer, repetition is automatic and infinite (until the Timer stops)..

    Additionally, you can see the help about Automatic procedures.
    <interval=duration in hundredths of a second>Used to specify the duration (interval) between 2 calls to the procedure.
    This extension attribute must be used with <timer> or <repetition>. The optional value interval in hundredths of a second is used to specify this time interval.
    If this value is not specified, you must specify this value with <timer>.

    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
    <call again[=type of call]>Used to specify, in a procedure called in a Timer, the operating mode of subsequent calls. This extension attribute must be used with <timer>. The optional value of this extension attribute can be:
    ignore
    (Default value)
    The procedure is called immediately. There is no wait time for calling the procedure. The procedure is called only once without repetition.
    newA new Timer is triggered. The procedure is called in this new Timer.
    Caution, the previous Timer has not stopped. The Timers will pile up in memory.
    restartUsed to restart the Timer automatically at the end of the procedure. <Interval> is used to define the time interval between each call to the procedure.
    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
    <delay=duration un hundredths of a second>Used to specify the wait time before the start of the procedure in a Timer (during the first call). This extension attribute must be used with <timer>. The optional value delay in hundredths of a second is used to specify this wait time.
    If this value is not specified, you must specify this value when using <timer>.

    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
  • Versions 24 and later
    extension attribute to manage threads:
    <thread>Used to specify that the procedure will be run in a secondary thread. For more details on threads, see Management of threads.

    This extension attribute is not compatible with <timer> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
    <main thread>Used to specify that the procedure will be run in a secondary thread. For more details on threads, see Management of threads.

    This extension attribute is not compatible with <timer> and <thread>.

    Additionally, you can see the help about Automatic procedures.
    <light HFSQL context>Triggers the immediate copy of part of current HFSQL context.
    Only the directories containing the data files in HFSQL Classic mode and/or the connections in HFSQL Client/Server mode are stored.

    This extension attribute must be used with <thread>. For more details on the management of threads, see the help about ThreadExecute.
    Additionally, you can see the help about Automatic procedures.
    <full HFSQL context>Triggers the immediate copy of current HFSQL context.
    Recommended if the thread must take into account the current positions in the files and queries of caller context.

    This extension attribute must be used with <thread>. For more details on the management of threads, see the help about ThreadExecute.

    Additionally, you can see the help about Automatic procedures.
    New in version 24
    extension attribute to manage threads:
    <thread>Used to specify that the procedure will be run in a secondary thread. For more details on threads, see Management of threads.

    This extension attribute is not compatible with <timer> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
    <main thread>Used to specify that the procedure will be run in a secondary thread. For more details on threads, see Management of threads.

    This extension attribute is not compatible with <timer> and <thread>.

    Additionally, you can see the help about Automatic procedures.
    <light HFSQL context>Triggers the immediate copy of part of current HFSQL context.
    Only the directories containing the data files in HFSQL Classic mode and/or the connections in HFSQL Client/Server mode are stored.

    This extension attribute must be used with <thread>. For more details on the management of threads, see the help about ThreadExecute.
    Additionally, you can see the help about Automatic procedures.
    <full HFSQL context>Triggers the immediate copy of current HFSQL context.
    Recommended if the thread must take into account the current positions in the files and queries of caller context.

    This extension attribute must be used with <thread>. For more details on the management of threads, see the help about ThreadExecute.

    Additionally, you can see the help about Automatic procedures.
    extension attribute to manage threads:
    <thread>Used to specify that the procedure will be run in a secondary thread. For more details on threads, see Management of threads.

    This extension attribute is not compatible with <timer> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
    <main thread>Used to specify that the procedure will be run in a secondary thread. For more details on threads, see Management of threads.

    This extension attribute is not compatible with <timer> and <thread>.

    Additionally, you can see the help about Automatic procedures.
    <light HFSQL context>Triggers the immediate copy of part of current HFSQL context.
    Only the directories containing the data files in HFSQL Classic mode and/or the connections in HFSQL Client/Server mode are stored.

    This extension attribute must be used with <thread>. For more details on the management of threads, see the help about ThreadExecute.
    Additionally, you can see the help about Automatic procedures.
    <full HFSQL context>Triggers the immediate copy of current HFSQL context.
    Recommended if the thread must take into account the current positions in the files and queries of caller context.

    This extension attribute must be used with <thread>. For more details on the management of threads, see the help about ThreadExecute.

    Additionally, you can see the help about Automatic procedures.

Extension attributes

The available extension attributes are:
  • extension attribute for managing zombie procedures:
    <zombie [comment = "text"]>Used to define an obsolete procedure (also called zombie procedure). The optional comment keyword is used to indicate the text that will be displayed in the compilation error associated with the obsolete procedure. See Zombie procedures for more details.
  • extension attribute for managing the debugger:
    <without step by step>Used to specify that the procedure will be ignored by the debugger when debugging in "Step by step" mode.
  • Versions 24 and later
    extension attributes specific to local, global or internal procedures:
    <automatic>Used to specify that this procedure will be run automatically after the initialization code (of the window, page or project).

    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.

    Caution, this extension attribute cannot be applied to an internal procedure.
    <end process>Used to specify that this procedure will be run after the process that contains the call to the procedure.

    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
    <end event>Used to specify that this procedure will be run after the process that contains the call to the procedure. See "At the end of the event containing the call" for more details.

    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
    New in version 24
    extension attributes specific to local, global or internal procedures:
    <automatic>Used to specify that this procedure will be run automatically after the initialization code (of the window, page or project).

    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.

    Caution, this extension attribute cannot be applied to an internal procedure.
    <end process>Used to specify that this procedure will be run after the process that contains the call to the procedure.

    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
    <end event>Used to specify that this procedure will be run after the process that contains the call to the procedure. See "At the end of the event containing the call" for more details.

    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
    extension attributes specific to local, global or internal procedures:
    <automatic>Used to specify that this procedure will be run automatically after the initialization code (of the window, page or project).

    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.

    Caution, this extension attribute cannot be applied to an internal procedure.
    <end process>Used to specify that this procedure will be run after the process that contains the call to the procedure.

    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
    <end event>Used to specify that this procedure will be run after the process that contains the call to the procedure. See "At the end of the event containing the call" for more details.

    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
  • Versions 24 and later
    extension attribute to manage timers:
    <timer [=interval in hundredths of a second]>Used to specify that the procedure will be run in a Timer.
    This extension attribute is equivalent to TimerSys. Repetition is automatic. The optional value interval in hundredths of a second is used to specify the time interval between 2 repetitions:
    • If this value is not specified, it is necessary to specify the time interval between 2 repetitions using <interval>.
    • If this value is not specified, the values of <delay> and <interval> are initialized with the value of the specified interval.
    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
    <repetition [=number of repetitions]>Used to specify that the procedure is called several times in a row (repetitions). The optional value number of repetitions is used to specify the number of calls to the procedure.
    • If this value is not specified, the repetition will go on until:
      • EndAutomatedProcedure is called.
      • the element to which the procedure belongs is closed (window, page, report).
      • the instance to which the procedure belongs is destroyed (for more details about the concept of instance, see the help on Instantiation of an object).
      • the end of the application (application closed by the user, or use of EndProgram).
    • If this value is specified, the procedure will be called as many times as the specified number.
    This extension attribute is not compatible with <timer>. In a Timer, repetition is automatic and infinite (until the Timer stops)..

    Additionally, you can see the help about Automatic procedures.
    <interval=duration in hundredths of a second>Used to specify the duration (interval) between 2 calls to the procedure.
    This extension attribute must be used with <timer> or <repetition>. The optional value interval in hundredths of a second is used to specify this time interval.
    If this value is not specified, you must specify this value with <timer>.

    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
    <call again[=type of call]>Used to specify, in a procedure called in a Timer, the operating mode of subsequent calls. This extension attribute must be used with <timer>. The optional value of this extension attribute can be:
    ignore
    (Default value)
    The procedure is called immediately. There is no wait time for calling the procedure. The procedure is called only once without repetition.
    newA new Timer is triggered. The procedure is called in this new Timer.
    Caution, the previous Timer has not stopped. The Timers will pile up in memory.
    restartUsed to restart the Timer automatically at the end of the procedure. <Interval> is used to define the time interval between each call to the procedure.
    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
    <delay=duration un hundredths of a second>Used to specify the wait time before the start of the procedure in a Timer (during the first call). This extension attribute must be used with <timer>. The optional value delay in hundredths of a second is used to specify this wait time.
    If this value is not specified, you must specify this value when using <timer>.

    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
    New in version 24
    extension attribute to manage timers:
    <timer [=interval in hundredths of a second]>Used to specify that the procedure will be run in a Timer.
    This extension attribute is equivalent to TimerSys. Repetition is automatic. The optional value interval in hundredths of a second is used to specify the time interval between 2 repetitions:
    • If this value is not specified, it is necessary to specify the time interval between 2 repetitions using <interval>.
    • If this value is not specified, the values of <delay> and <interval> are initialized with the value of the specified interval.
    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
    <repetition [=number of repetitions]>Used to specify that the procedure is called several times in a row (repetitions). The optional value number of repetitions is used to specify the number of calls to the procedure.
    • If this value is not specified, the repetition will go on until:
      • EndAutomatedProcedure is called.
      • the element to which the procedure belongs is closed (window, page, report).
      • the instance to which the procedure belongs is destroyed (for more details about the concept of instance, see the help on Instantiation of an object).
      • the end of the application (application closed by the user, or use of EndProgram).
    • If this value is specified, the procedure will be called as many times as the specified number.
    This extension attribute is not compatible with <timer>. In a Timer, repetition is automatic and infinite (until the Timer stops)..

    Additionally, you can see the help about Automatic procedures.
    <interval=duration in hundredths of a second>Used to specify the duration (interval) between 2 calls to the procedure.
    This extension attribute must be used with <timer> or <repetition>. The optional value interval in hundredths of a second is used to specify this time interval.
    If this value is not specified, you must specify this value with <timer>.

    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
    <call again[=type of call]>Used to specify, in a procedure called in a Timer, the operating mode of subsequent calls. This extension attribute must be used with <timer>. The optional value of this extension attribute can be:
    ignore
    (Default value)
    The procedure is called immediately. There is no wait time for calling the procedure. The procedure is called only once without repetition.
    newA new Timer is triggered. The procedure is called in this new Timer.
    Caution, the previous Timer has not stopped. The Timers will pile up in memory.
    restartUsed to restart the Timer automatically at the end of the procedure. <Interval> is used to define the time interval between each call to the procedure.
    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
    <delay=duration un hundredths of a second>Used to specify the wait time before the start of the procedure in a Timer (during the first call). This extension attribute must be used with <timer>. The optional value delay in hundredths of a second is used to specify this wait time.
    If this value is not specified, you must specify this value when using <timer>.

    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
    extension attribute to manage timers:
    <timer [=interval in hundredths of a second]>Used to specify that the procedure will be run in a Timer.
    This extension attribute is equivalent to TimerSys. Repetition is automatic. The optional value interval in hundredths of a second is used to specify the time interval between 2 repetitions:
    • If this value is not specified, it is necessary to specify the time interval between 2 repetitions using <interval>.
    • If this value is not specified, the values of <delay> and <interval> are initialized with the value of the specified interval.
    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
    <repetition [=number of repetitions]>Used to specify that the procedure is called several times in a row (repetitions). The optional value number of repetitions is used to specify the number of calls to the procedure.
    • If this value is not specified, the repetition will go on until:
      • EndAutomatedProcedure is called.
      • the element to which the procedure belongs is closed (window, page, report).
      • the instance to which the procedure belongs is destroyed (for more details about the concept of instance, see the help on Instantiation of an object).
      • the end of the application (application closed by the user, or use of EndProgram).
    • If this value is specified, the procedure will be called as many times as the specified number.
    This extension attribute is not compatible with <timer>. In a Timer, repetition is automatic and infinite (until the Timer stops)..

    Additionally, you can see the help about Automatic procedures.
    <interval=duration in hundredths of a second>Used to specify the duration (interval) between 2 calls to the procedure.
    This extension attribute must be used with <timer> or <repetition>. The optional value interval in hundredths of a second is used to specify this time interval.
    If this value is not specified, you must specify this value with <timer>.

    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
    <call again[=type of call]>Used to specify, in a procedure called in a Timer, the operating mode of subsequent calls. This extension attribute must be used with <timer>. The optional value of this extension attribute can be:
    ignore
    (Default value)
    The procedure is called immediately. There is no wait time for calling the procedure. The procedure is called only once without repetition.
    newA new Timer is triggered. The procedure is called in this new Timer.
    Caution, the previous Timer has not stopped. The Timers will pile up in memory.
    restartUsed to restart the Timer automatically at the end of the procedure. <Interval> is used to define the time interval between each call to the procedure.
    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
    <delay=duration un hundredths of a second>Used to specify the wait time before the start of the procedure in a Timer (during the first call). This extension attribute must be used with <timer>. The optional value delay in hundredths of a second is used to specify this wait time.
    If this value is not specified, you must specify this value when using <timer>.

    This extension attribute is not compatible with <thread> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
  • Versions 24 and later
    extension attribute to manage threads:
    <thread>Used to specify that the procedure will be run in a secondary thread. For more details on threads, see Management of threads.

    This extension attribute is not compatible with <timer> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
    <main thread>Used to specify that the procedure will be run in a secondary thread. For more details on threads, see Management of threads.

    This extension attribute is not compatible with <timer> and <thread>.

    Additionally, you can see the help about Automatic procedures.
    <light HFSQL context>Triggers the immediate copy of part of current HFSQL context.
    Only the directories containing the data files in HFSQL Classic mode and/or the connections in HFSQL Client/Server mode are stored.

    This extension attribute must be used with <thread>. For more details on the management of threads, see the help about ThreadExecute.
    Additionally, you can see the help about Automatic procedures.
    <full HFSQL context>Triggers the immediate copy of current HFSQL context.
    Recommended if the thread must take into account the current positions in the files and queries of caller context.

    This extension attribute must be used with <thread>. For more details on the management of threads, see the help about ThreadExecute.

    Additionally, you can see the help about Automatic procedures.
    New in version 24
    extension attribute to manage threads:
    <thread>Used to specify that the procedure will be run in a secondary thread. For more details on threads, see Management of threads.

    This extension attribute is not compatible with <timer> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
    <main thread>Used to specify that the procedure will be run in a secondary thread. For more details on threads, see Management of threads.

    This extension attribute is not compatible with <timer> and <thread>.

    Additionally, you can see the help about Automatic procedures.
    <light HFSQL context>Triggers the immediate copy of part of current HFSQL context.
    Only the directories containing the data files in HFSQL Classic mode and/or the connections in HFSQL Client/Server mode are stored.

    This extension attribute must be used with <thread>. For more details on the management of threads, see the help about ThreadExecute.
    Additionally, you can see the help about Automatic procedures.
    <full HFSQL context>Triggers the immediate copy of current HFSQL context.
    Recommended if the thread must take into account the current positions in the files and queries of caller context.

    This extension attribute must be used with <thread>. For more details on the management of threads, see the help about ThreadExecute.

    Additionally, you can see the help about Automatic procedures.
    extension attribute to manage threads:
    <thread>Used to specify that the procedure will be run in a secondary thread. For more details on threads, see Management of threads.

    This extension attribute is not compatible with <timer> and <main thread>.

    Additionally, you can see the help about Automatic procedures.
    <main thread>Used to specify that the procedure will be run in a secondary thread. For more details on threads, see Management of threads.

    This extension attribute is not compatible with <timer> and <thread>.

    Additionally, you can see the help about Automatic procedures.
    <light HFSQL context>Triggers the immediate copy of part of current HFSQL context.
    Only the directories containing the data files in HFSQL Classic mode and/or the connections in HFSQL Client/Server mode are stored.

    This extension attribute must be used with <thread>. For more details on the management of threads, see the help about ThreadExecute.
    Additionally, you can see the help about Automatic procedures.
    <full HFSQL context>Triggers the immediate copy of current HFSQL context.
    Recommended if the thread must take into account the current positions in the files and queries of caller context.

    This extension attribute must be used with <thread>. For more details on the management of threads, see the help about ThreadExecute.

    Additionally, you can see the help about Automatic procedures.
Versions 23 and later

Zombie (or obsolete) procedure

In most cases, an old code contains procedures that are used but that do no longer match the current quality standard.
In this case, a new procedure version is created, with different parameters.
As all the existing calls cannot be modified straightaway, you have the ability to indicate that the former version becomes a zombie procedure.
In this case:
  • When recompiling the project, a warning is used to indicate all the calls to the zombie procedure.
  • Whenever the zombie procedure is used, a specific logo is displayed beside the call during 10 seconds and a compilation warning is generated.
  • The zombie procedures is grayed and struck out in the project explorer.
How to proceed?
To indicate that a procedure is a zombie procedure, the procedure declaration must be followed by the <Zombie> attribute extension.

The syntax is as follows:
PROCEDURE <Procedure name>(<Parameters>) <zombie [comment = "text"]> [: <Type of return>]
PROCEDURE <Procedure name>() <zombie [comment = "text"]> [: <Type of return>]
In these syntaxes, the optional comment keyword is used to specify the text that will be displayed in the compilation error associated with the obsolete procedure.
Example
  • Procedure code:
    PROCÉDURE AddTreeView(sNode, sMonth, sImageDate, sImage)<zombie comment = "use AjFull">

    // Check to find out whether the year exists
    IF TreeStatus(TreeCommand, sNode) = tvError THEN
    // it does not exist, create it with all the months
    TreeAdd(TreeCommand, sNode, sImageDate, sImageDate, "", tvLast)
    AddMonth(sNode)
    END
  • The zombie procedures is grayed and struck out in the project explorer (as soon as the element is recompiled).
  • When typing the call to the function, a specific icon will be displayed during 10 seconds :
    and a compilation error containing the comment will be displayed:
New in version 23

Zombie (or obsolete) procedure

In most cases, an old code contains procedures that are used but that do no longer match the current quality standard.
In this case, a new procedure version is created, with different parameters.
As all the existing calls cannot be modified straightaway, you have the ability to indicate that the former version becomes a zombie procedure.
In this case:
  • When recompiling the project, a warning is used to indicate all the calls to the zombie procedure.
  • Whenever the zombie procedure is used, a specific logo is displayed beside the call during 10 seconds and a compilation warning is generated.
  • The zombie procedures is grayed and struck out in the project explorer.
How to proceed?
To indicate that a procedure is a zombie procedure, the procedure declaration must be followed by the <Zombie> attribute extension.

The syntax is as follows:
PROCEDURE <Procedure name>(<Parameters>) <zombie [comment = "text"]> [: <Type of return>]
PROCEDURE <Procedure name>() <zombie [comment = "text"]> [: <Type of return>]
In these syntaxes, the optional comment keyword is used to specify the text that will be displayed in the compilation error associated with the obsolete procedure.
Example
  • Procedure code:
    PROCÉDURE AddTreeView(sNode, sMonth, sImageDate, sImage)<zombie comment = "use AjFull">

    // Check to find out whether the year exists
    IF TreeStatus(TreeCommand, sNode) = tvError THEN
    // it does not exist, create it with all the months
    TreeAdd(TreeCommand, sNode, sImageDate, sImageDate, "", tvLast)
    AddMonth(sNode)
    END
  • The zombie procedures is grayed and struck out in the project explorer (as soon as the element is recompiled).
  • When typing the call to the function, a specific icon will be displayed during 10 seconds :
    and a compilation error containing the comment will be displayed:

Zombie (or obsolete) procedure

In most cases, an old code contains procedures that are used but that do no longer match the current quality standard.
In this case, a new procedure version is created, with different parameters.
As all the existing calls cannot be modified straightaway, you have the ability to indicate that the former version becomes a zombie procedure.
In this case:
  • When recompiling the project, a warning is used to indicate all the calls to the zombie procedure.
  • Whenever the zombie procedure is used, a specific logo is displayed beside the call during 10 seconds and a compilation warning is generated.
  • The zombie procedures is grayed and struck out in the project explorer.
How to proceed?
To indicate that a procedure is a zombie procedure, the procedure declaration must be followed by the <Zombie> attribute extension.

The syntax is as follows:
PROCEDURE <Procedure name>(<Parameters>) <zombie [comment = "text"]> [: <Type of return>]
PROCEDURE <Procedure name>() <zombie [comment = "text"]> [: <Type of return>]
In these syntaxes, the optional comment keyword is used to specify the text that will be displayed in the compilation error associated with the obsolete procedure.
Example
  • Procedure code:
    PROCÉDURE AddTreeView(sNode, sMonth, sImageDate, sImage)<zombie comment = "use AjFull">

    // Check to find out whether the year exists
    IF TreeStatus(TreeCommand, sNode) = tvError THEN
    // it does not exist, create it with all the months
    TreeAdd(TreeCommand, sNode, sImageDate, sImageDate, "", tvLast)
    AddMonth(sNode)
    END
  • The zombie procedures is grayed and struck out in the project explorer (as soon as the element is recompiled).
  • When typing the call to the function, a specific icon will be displayed during 10 seconds :
    and a compilation error containing the comment will be displayed:
Minimum version required
  • Version 9
This page is also available for…
Comments
Click [Add] to post a comment