Taskvariablen können aus einer Prozedur heraus nur angesprochen werden, wenn dies explizit vorgesehen wird. Es gibt drei verschiedene Möglichkeiten hierzu:
Deklaration einer Taskvariablen
Mit einem Kommando /DECLARE-VARIABLE ...,SCOPE = *TASK kann eine Taskvariable erzeugt werden; sie ist anschließend unter dem angegebenen Namen in der deklarierenden Prozedur ansprechbar.
Wenn eine Taskvariable gleichen Namens bereits existierte, wird sie durch das DECLARE-VARIABLE-Kommando ebenfalls zugänglich gemacht; die weiteren Operanden des Kommandos dürfen allerdings nicht den Attributen der bestehenden Variablen widersprechen.
Import einer Taskvariablen
Soll von einer Prozedur aus auf eine Taskvariable zugegriffen werden, von der bekannt ist, dass sie bereits existiert, so genügt es, ein IMPORT-VARIABLE-Kommando für diese Variable in die Prozedur aufzunehmen.
Das Importieren einer Variablen ist gleichwertig zur Deklaration mittels eines DECLARE-VARIABLE-Kommandos mit der Angabe SCOPE = *TASK, jedoch kann dabei keine neue Variable erzeugt werden. Dafür erspart es eine erneute, widerspruchsfreie Angabe der Attribute TYPE und MULTIPLE-ELEMENTS (mit ggf. daranhängenden Unterstrukturen).
Beispiel
Eine Taskvariable ARBEITSBIBLIOTHEK soll nur dann neu angelegt und initialisiert werden, wenn sie noch nicht vorhanden ist. Andernfalls soll die aktuelle Prozedur die bestehende Definition verwenden:
/IF IS-DECLARED('ARBEITSBIBLIOTHEK',SCOPE=*TASK) / IMPORT-VARIABLE ARBEITSBIBLIOTHEK "Die Variable kann jeden beliebigen Datentyp haben" /ELSE / DECLARE-VARIABLE ARBEITSBIBLIOTHEK(INITIAL-VALUE='#WORKLIB',/ TYPE=*STRING) /END-IF
Nutzung einer Taskvariable als Behälter
Die beiden vorgenannten Möglichkeiten erlauben die Verwendung einer Taskvariablen innerhalb einer Prozedur nur unter ihrem Originalnamen. Wenn dies nicht erwünscht ist, weil z.B. eine prozedurlokale Variable gleichen Namens vorhanden ist oder auch der Name der Taskvariablen (wegen der notwendigen taskweiten Eindeutigkeit) zu lang und zu umständlich ist, kann eine Taskvariable als Behälter (Container) für eine in der Prozedur eingerichtete Variable benutzt werden.
Beispiel
/DECLARE-VARIABLE I(INIT-VALUE=0,TYPE=*INTEGER), -
/ CONTAINER=*VAR(ZAEHLER-FUER-PROZ-A,SCOPE=*TASK)
Nach dieser Deklaration kann mit Kommandos wie
/I = I + 1
auf die Taskvariable zugegriffen werden, deren tatsächlicher Name ZAEHLER-FUER-PROZ-A Konflikte mit den Namen anderer Taskvariablen vermeidet.
Die als Behälter benutzte Taskvariable muss schon vorher vorhanden sein. Darum dürfen auch keine Attribute für die Variable, die auf den Variablenbehälter Bezug nimmt, vereinbart werden, die der Deklaration des Variablenbehälters widersprechen (TYPE, DEFINITION, MULTIPLE-ELEMENTS).
Prozedur-Unterbrechung
Bei Prozedur-Unterbrechung sind nur die Variablen sichtbar, die in der gerade unterbrochenen Prozedur sichtbar sind.