$List Global and $List Session: Difference between revisions
m (→Products authorizing $List_Global and $List_Session: link repair) |
m (misc formatting) |
||
Line 2: | Line 2: | ||
<span class="pageSubtitle">$List_Global and $List_Session: Access/create global/session $list</span> | <span class="pageSubtitle">$List_Global and $List_Session: Access/create global/session $list</span> | ||
<p class="warn"><b>Note: </b> | <p class="warn"><b>Note:</b> Many $functions have been deprecated in favor of Object Oriented methods. There is no OO equivalent for the <var>$List_Global</var> and <var>$List_Session</var> functions because of the OO ability to declare any object Global or Session (that is, this function is part of <var>Stringlist</var> declaration). </p> | ||
<var>$List_Global</var> and <var>$List_Session</var> return a [[$lists|$list]] identifier by which one may refer to a global or session $list in a request. The global or session $list may be one that already exists because of a previous <var>$List_Global</var>, <var>$List_Session</var>, or <var>[[$ListSav and $ListSave|$ListSave]]</var> function, or it may be created by the <var>$List_Global</var> or <var>$List_Session</var> function. | |||
==Syntax== | ==Syntax== | ||
Line 109: | Line 109: | ||
</p> | </p> | ||
the global $list identified by < | the global $list identified by <code>WHATEVER</code> would have a single item with content <code>WANT NOT</code>. Just as type <code>ANY</code> is the default for <var>$List_Global</var>, <code>PREP</code> is the same as <code>PREPANY</code>. </li> | ||
<li>Global $lists can only be restored with a <var>$ListRst</var> if they have not been accessed as <var>$List_Global</var> in the procedure that issues the <var>$ListRst</var>. You can clean up any global $lists with $ | <li>Global $lists can only be restored with a <var>$ListRst</var> if they have not been accessed as <var>$List_Global</var> in the procedure that issues the <var>$ListRst</var>. You can clean up any global $lists with <var>$List_Global_Del</var>, which can be issued whether or not a name was referenced in the current procedure with a <var>$List_Global</var>. You can clean up any session $lists with <var>$List_Session_Del</var>, which can be issued whether or not a name was referenced in the current procedure with a <var>$List_Global</var>. </li> | ||
<li><var>$List_Global</var> and <var>$List_Session</var> have independent namespaces. That is, the same name used for <var>$List_Global</var> and <var>$List_Session</var> reference different $lists. </li> | <li><var>$List_Global</var> and <var>$List_Session</var> have independent namespaces. That is, the same name used for <var>$List_Global</var> and <var>$List_Session</var> reference different $lists. </li> |
Latest revision as of 21:31, 6 June 2018
$List_Global and $List_Session: Access/create global/session $list
Note: Many $functions have been deprecated in favor of Object Oriented methods. There is no OO equivalent for the $List_Global and $List_Session functions because of the OO ability to declare any object Global or Session (that is, this function is part of Stringlist declaration).
$List_Global and $List_Session return a $list identifier by which one may refer to a global or session $list in a request. The global or session $list may be one that already exists because of a previous $List_Global, $List_Session, or $ListSave function, or it may be created by the $List_Global or $List_Session function.
Syntax
%result = $List_Global(name, [type])
%result = $List_Session(name, [type])
%result | A numeric variable set to the identifier of the global or session $list, or set to a negative error code if an error occurred. Possible error codes are:
| ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
name | The name of the global or session $list. This is a required argument. | ||||||||||||||||||||
type | The type of processing $List_Global or $List_Session is to perform. Valid values are the following:
This is an optional argument that defaults to ANY. |
Usage notes
- A particular instance of $List_Global or $List_Session always returns the same $list identifier so it cannot be called multiple times for different global or session $list names to allow simultaneous reference to these $lists.
- The scope of a $List_Global or $List_Session identifier is the evaluation of the SOUL request in which it was contained. When evaluation is over, global $list data appears exactly like a $ListSave'd (or $ListSav'ed) $list and, in fact, can be $ListRst'ed. For a different request to access that same global $list, it must issue a $List_Global or $ListRst with the same name. A $List_Global can also be issued against a $list that was $ListSave'd, even in the same procedure, as in the following example:
%rc = $ListSave(%list, 'NEW.NAME') %glist = $List_Global('NEW.NAME')
- A $List_Session cannot access a $ListSave'd $list, and $ListRst cannot access a session $list.
- Separate $List_Global or $List_Session statements can be issued against the same name. If this is done, each instance of $List_Global or $List_Session will return a separate $list identifier, but they will actually refer to the same underlying $list. For example, the result of the following $List_Global statements is a single global $list with name
WHATEVER
that contains two items:WASTE NOT
is the first, andWANT NOT
is the second:%list1 = $List_Global('WHATEVER', 'NEW') %list2 = $List_Global('WHATEVER') %rc = $ListAdd(%list1, 'WASTE NOT') %rc = $ListAdd(%list2, 'WANT NOT')
- A $ListImg on a global $list identifier is associated with the $list identifier, not the underlying data, so in the case of multiple $List_Globals or $List_Sessions for the same name, the $ListImg only applies to the $list identifier for which it was issued. For example, the first $ListAddI below adds data to the global $list from image
MYIMAGE
, while the second $ListAddI adds data from imageYOURIMAGE
:%list1 = $List_Global('WHATEVER', 'NEW') %list2 = $List_Global('WHATEVER') %rc = $ListImg(%list1, %MYIMAGE:COUNT) %rc = $ListImg(%list2, %YOURIMAGE:COUNT) %rc = $ListAddI(%list1) %rc = $ListAddI(%list2)
- Global and session $list names are kept in CCATEMP. For every $List_Global or $List_Session call, logical I/O (and possibly physical I/O) must be performed to look up the name. As such, it is a good practice to avoid $List_Globals or $List_Sessions for constant names inside a loop, and to make global and session $list identifier variables COMMON rather than letting each subroutine issue a $List_Global or $List_Session function.
- If it is uncertain whether the global or session list has been already declared inside a subroutine (or anywhere for that matter), code like the following can be used to ensure that the $List_Global or $List_Session statement is only issued once:
IF NOT %MY.LIST THEN %MY.LIST = $List_Global('MY.LIST', 'ANY') END IF
- The PREP prefix or suffix for all the types indicates that the returned $list should be cleared of its contents. For example, after
%LIST1 = $List_Global('WHATEVER', 'NEW') %RC = $ListAdd(%LIST1, 'WASTE NOT') %LIST2 = $List_Global('WHATEVER', 'PREPOLD') %RC = $ListAdd(%LIST2, 'WANT NOT')
the global $list identified byWHATEVER
would have a single item with contentWANT NOT
. Just as typeANY
is the default for $List_Global,PREP
is the same asPREPANY
. - Global $lists can only be restored with a $ListRst if they have not been accessed as $List_Global in the procedure that issues the $ListRst. You can clean up any global $lists with $List_Global_Del, which can be issued whether or not a name was referenced in the current procedure with a $List_Global. You can clean up any session $lists with $List_Session_Del, which can be issued whether or not a name was referenced in the current procedure with a $List_Global.
- $List_Global and $List_Session have independent namespaces. That is, the same name used for $List_Global and $List_Session reference different $lists.
- A $List_Session call when there is no session open causes a request cancellation.