Expressions Overview
An expression is a single statement 
 in the HotDocs scripting 
 language that resolves to a value; 
 an expression can range in complexity from a single literal 
 value or a variable (which represents 
 a value stored in an answer 
 set) to a calculation based on any combination of literal values, 
 variables, operators, or functions 
 (whether system functions 
 or computation components). For 
 example, the expression YEARS FROM(DateVar1, TODAY) 
 tells HotDocs to calculate the number of years between today's date and 
 a value your template user 
 supplies for DateVar1 in the interview.
In this topic ShowHide
Overview
An expression tells HotDocs to evaluate its elements and resolve all 
 of them to a single value. The possible 
 elements of an expression include one or more values that help HotDocs 
 to calculate a final value from the expression. References to such values 
 can include a literal, a reference to a variable, or a call to a function, 
 among others. For example, when a placeholder 
 field references a variable, the variable reference acts as a simple 
 expression that HotDocs evaluates to locate and access the answer to the 
 relevant interview question, and then pass in the answer 
 as the value that replaces the placeholder field during document assembly.
Common Tasks
Among others, expressions enable you to perform the following common 
 tasks:
Workflow
To help you create expressions, Author provides system 
 function and operator models. When 
 you write 
 a script on the Script 
 tab of a computation or dialog, you can drag and drop a model onto 
 the Script tab from the Model 
 tab to its right.  Once on the Script tab, the model shows you 
 the syntax HotDocs 
 expects to make the function or operator work properly. You can then drag 
 a component from the Component 
 tab onto the red placeholders of the model.
Alternatively, you can select the placeholders, then type the proper 
 value. When typing, HotDocs provides an 
 auto-complete feature that tries to help you by guessing what you 
 are typing. If you push CTRL + SPACE BAR on 
 your keyboard, a list of syntax features appears from which you can select 
 the element you need. You use the down and up arrow keys to change the 
 selected element in the list.
HotDocs also provides syntax 
 highlighting and error 
 validation to help you create your expressions. If your syntax is 
 correct, elements appear in various colors and font weights to help you 
 better read your script. If your syntax is incorrect, HotDocs underlines 
 the offending element with a red squiggly line to alert you that there 
 is an error in the syntax. If you do not have any errors in your syntax, 
 you can test your expression by clicking the Test 
 button at the top of the current component editor.
Possible 
 Elements of an Expression
When you are creating an expression using the syntax 
 of the HotDocs scripting language, the elements you can add to an 
 expression include:
	- Literals – represent a specific known 
	 value. When you want to represent a known value in your expression, 
	 you type it as a literal. For example, you type a text 
	 literal within quotation marks, like this: "I 
	 am a text literal".
- Variables – represent 
	 a value that is unknown to you at the time you create your expression. 
	 When you reference a variable in your expression, you are referencing 
	 a value that your template user 
	 provides during the interview, 
	 which HotDocs then stores in an answer 
	 set. A variable reference tells HotDocs to retrieve a value from 
	 the answer set when it evaluates your expression. You reference a 
	 variable by using its name within your expression, like this: VarA.
You can also use local 
 variables in an expression.
	- Computations (with or without 
	 a list of parameters) – 
	 represent a value that is unknown to you when you write your expression. 
	 Using a computation's name as part of an expression causes HotDocs 
	 to evaluate that system function and pass a computed value of a certain 
	 type into your expression, since computations have a result type.  If 
	 the computation requires parameters, 
	 when you type the name of the computation, you must include the list 
	 of parameters that computation has (if any) immediately following 
	 its name, enclosed in parentheses and separated by commas, like this: 
	 CompA(param1, param2, param3).
- System functions 
	 (with or without a list of parameters) – represent a value that 
	 is unknown to you when you write your expression. Using a system function’s 
	 name as part of an expression causes HotDocs to evaluate that system 
	 function and pass a computed value of a certain type into your expression, 
	 since system functions have a result type. If the function requires 
	 parameters, when you type the name of the system function, you must 
	 include the list of parameters that computation has (if any) immediately 
	 following its name, enclosed in parentheses and separated by commas, 
	 like this: SystemFuncA(param1, param2, param3).
	- Operators – represent 
	 an operation you want HotDocs to carry out to further evaluation of 
	 your expression. There are two kinds of operators:
- 
		- A binary operator – a symbol or key 
		 word in HotDocs that computes a value by acting on exactly 
		 two operands. It uses a familiar (<operand1> <operator> 
		 <operand2>) syntax, and results in a computed value of a 
		 type that depends on the specific operator. A very common example 
		 is NUMBER + NUMBER, such as 2 + 4. 
		 The plus operator (+) arrives at a number result by adding the 
		 values of its two operands.
- A unary operator – a symbol or key word in HotDocs that 
		 computes a value by acting on exactly one operand. Some unary 
		 operators use prefix notation (<operator> <operand>), 
		 for example the unary minus operator: -5. 
		 The unary minus operator (-) immediately precedes its operand 
		 (5), and it arrives at a number result by changing the mathematical 
		 sign of its operand. Some unary operators use postfix notation 
		 (<operand> <operator>), for example the percent operator: 
		  10%. The operand 
		 (10) is followed immediately by the operator (%), which arrives 
		 at a number result by dividing its operand by 100.
 
Single Line Expressions
There are times when you want to create an expression directly within 
 your template. To facilitate this, HotDocs enables you to add 
 a placeholder field for an other expression. When you add such a field, 
 you can type a single line expression into that field.
This single line expression does not provide the syntax highlighting 
 and error validation available in the computations 
 you write in the Component Studio.
Expression Examples
To better understand expressions, review the following examples. Remember, 
 each expression implicitly tells HotDocs to calculate a single value by 
 evaluating all the elements (whether these be one or many) in the expression. 
 For more examples of expressions, see the example code provided for each 
 function and operator.
Number Value Expressions
The following example expressions are classified as number 
 value expressions because the expressions all resolve to a number 
 value:
	- 5 – a number 
	 literal, that HotDocs evaluates to a number value of 5
- YEAR OF(Birth 
	 Date) – evaluates to a number value representing the year portion 
	 of the answer your template user would provide to a Date 
	 variable called Birth Date (e.g., if the answer to Birth Date 
	 is 4 JUL 1976, the expression evaluates to the number 1,976)
- YEAR OF(Birth Date) + 18 – evaluates 
	 to a number value representing the year in which someone providing 
	 an answer to the Number variable Birth Date turns 18 years old (e.g., 
	 if the answer to Birth Date is 2000, the expression evaluates to 2,018)
- MAX(Num1, 
	 Num2) – compares the two number 
	 values you specify and returns the greater of the two values (e.g., 
	 if Num1 evaluates to 5, and Num2 to 3, then the MAX function returns 
	 a number value of 5)
Text Value Expressions
The following example expressions are classified as text 
 value expressions because the expressions all resolve to a text value:
	- First Name + " " + Last Name 
	 – computes a text value by concatenating the answer to First Name 
	 (a Text variable), a single 
	 space character, and the answer to Last Name (another Text variable)
- FIRST(First 
	 Name, 1) – Gives a result that is a text value equal to the 
	 first character of the answer to First Name (a Text variable)
- FORMAT(TODAY, "8 NOVEMBER 2018") 
	 – converts another value 
	 type (in this case, a date 
	 value) into a text value consisting of today’s date formatted 
	 as a text value according to the format you specify
Date Value Expressions
The following example expressions are classified as date 
 value expressions because the expressions all resolve to a date value:
	- 20 JUN 2019 – a date 
	 literal, that HotDocs evaluates to a text value of 20 JUN 2019
- TODAY 
	 – evaluates to a date value representing the current date as supplied 
	 by the system clock
- Signing Date + DAYS – evaluates 
	 to a date value representing the answer to a Date variable plus the 
	 number of days you add to the answer
True/False Value Expressions
The following example expressions are classified as true/false 
 value expressions because the expressions all resolve to a true/false 
 value:
	- TRUE – a true/false 
	 literal, that HotDocs evaluates to a true/false value of TRUE
- ANSWERED 
	 (First Name)  – evaluates to a true/false value of TRUE 
	 if the template user answered 
	 a Text variable called First Name in the interview
- Client is Married AND 
	 Client has Children – evaluates to a true/false value 
	 of TRUE if both the True/False 
	 variable Client is Married and the True/False variable Client 
	 has Children are true
Common Reference Topics
Among others, the following reference topics may relate to this conceptual 
 area: