~~Title: Vars ~~
===Vars===
The **Vars** object represents a collection of user and script-defined variables. There are a number of different sets of variables, with differing scopes. Some sets support persistent variables, that are saved and re-loaded from one session to the other.
$$ Scope
$$ Accessed by
$$ **Supports Persistence**
$$ Description
$$ Global
$$ **[[dopus|DOpus]].vars**
$$ Yes
$$ Variables that are available throughout Opus. They can be accessed by any function or script.
$$ Lister
$$ **[[lister|Lister]].vars**
$$ Yes
$$ Variables that are local to a Lister. Persistent variables are saved on a per-Lister basis in Lister Layouts.
$$ Tab
$$ **[[tab|Tab]].vars**
$$ Yes
$$ Variables that are local to a particular tab. Persistent variables are saved per-Tab in Lister Layouts.
$$ Script
$$ **[[script|Script]].vars\\
[[scriptinitdata|ScriptInitData]].vars**
$$ Yes
$$ Variables that are local to a particular script add-in.
$$ Dialog
$$ **[[dialog|Dialog]].Vars**
$$ Yes
$$ Variables that are tied to a particular [[:scripting:script_dialogs|script dialog]].
$$ Command
$$ **[[command|Command]].vars**
$$ No
$$ Variables that are local to a particular function. They are not saved from one invocation of the function to another and do not support persistence.
$$ Property Name
$$ Return Type
$$ Description
$$ (#)////
$$ //collection://**[[var|Var]]**
$$ Returns a collection of the variables in the collection. You can enumerate the **[[var|Var]]** elements or refer to a specific one by its index or by its name. An example of how to do that is in the **Set** documentation, below.
$$ Method Name
$$ **Arguments**
$$ Return Type
$$ Description
$$ Delete
$$
$$ //none//
$$ Deletes the named variable from the collection. You can also specify a [[..:..:wildcard_reference:pattern_matching_syntax|wildcard pattern]] to delete multiple variables (or * for all).
$$ Exists
$$
$$ //bool//
$$ Returns **True** if the named variable exists in the collection, or **False** if it doesn't exist.
$$ Get
$$
$$ //variant//
$$ Returns the value of the named variable.\\
You can use this method as an alternative to indexing the collection. One difference to note is that this method directly returns the //value// stored in the variable. If you need the **[[var|Var]]** object which contains the value (for example, to call **var.Delete** or change **var.persist**) then you should index the collection instead. An example of how to do that is in the **Set** documentation, just below.
$$ Set
$$ \\
$$ //none//
$$ Sets the named value to the specified value. You can use this method as an alternative to indexing the collection.
You can store any type of variable in a **Vars** collection, although not all types can be saved to disk. If you want your variable to be persistent you should only use //bool//, //int//, //string//, //date//, //currency// or a **[[vector|Vector]]** of those types.\\
Variables are not persistent by default. If you need them to be saved across a restart, you need to request it explicitly. Here is an example in VBScript:\\
Dim varName, varValue1, varValue2
varName = "MyVariableName"
if (DOpus.Vars.Exists(varName)) then
varValue1 = DOpus.Vars.Get(varName)
DOpus.Output varName & " = " & varValue1
else
DOpus.Output varName & " does not exist yet."
end if
varValue2 = "My Variable Value"
DOpus.Vars.Set varName, varValue2
DOpus.Vars(varName).persist = True
Here is the same example in JScript:\\
var varName = "MyVariableName";
if (DOpus.Vars.Exists(varName)) {
var varValue1 = DOpus.Vars.Get(varName);
DOpus.Output(varName + " = " + varValue1);
} else {
DOpus.Output(varName + " does not exist yet.");
}
var varValue2 = "My Variable Value";
DOpus.Vars.Set(varName, varValue2);
DOpus.Vars(varName).persist = true;
On the first run, the example code will say the variable does not against and set it to a value, turning on persistence afterwards. If it is then run again, it will report the variable's value, and the value will persist across a restart.