Contract Express Author - A Complete Overview
Whether you're new to Contract Express authoring or simply looking for a refresher, this article will guide you through the essential tools and techniques, from setting up templates and variables to mastering advanced automation, so you can build smarter, more efficient document templates with confidence.
The purpose of this article is to provide simple examples of the major Contract Express Author functionality and to refresh any prior automation training.
Terms to know (jargon buster)
Let's review some of the commonly used terms in Contract Express.
CE
: Contract Express.Author
: The individual who automates templates, or the name of the Contract Express Word add-in.User
: The end user who completes questionnaires to generate finished documents.Variable / Field
: Usually takes the form of a question, marking the point in the document where the user's answers are inserted. Can also be used as the basis for business rules.Spans / Business Rules
: A rule that controls the inclusion, exclusion, or behaviour of a section of text and/or questionnaire content within the document.Setting up your template: Template properties and options
note
Remember to save the document in the .docx format.
Template properties
- Set aTemplate Reference(consider the character requirements when doing this). This is compulsory in order to upload and test the templates.
- Set aTemplate Name(consider whether you want to use dynamic text when doing this).
- ConsiderVersioningyour template. This is optional and if you do not specify a version, a timestamp will be given to the template each time it is uploaded.
- Consider which style ofBracketsyou wish to use.

note
If a document already contains certain characters, e.g. [square brackets], it is a good idea to choose alternate Span brackets in the
Template Properties
. Note that this should be done before beginning any automation as the brackets do not update automatically. Many Authors choose to use the following brackets:
- Fields: { }
- Spans: < >
Options
Changing the Default Brackets
You do not have to change the brackets every time you begin a new template. Go to the
button in the CE ribbon and change the
Options
button in the CE ribbon and change the Default Brackets
in this view to apply to the current and all future templates.
note
Other helpful options available in the
General
tab in the Options
section. For example, Automatically save template before upload
will save your template in Word when you hit the Test
button and Use file based external dictionary
searches the local file system for previously created templates, enabling variables from those templates to be reused across multiple documents.Changing the Server
If you have access to multiple Contract Express sites, you can change the site where templates are uploaded. In the
Options
section, open the Servers
tab and select the site you want to target.
If you need to add any further sites, click the
Add
button, specify the name and the URL of the Contract Express site you are uploading to.note
- If you are using the Multi-tenant Contract Express cloud, you should use the closest appropriate region. This will be advised when the initial set up is conducted.
- If you are using HighQ with the Contract Express module (also known asDocAuto), then you should specify the CE URL and the HighQ URL in the server options. These details will be advised upon set up.
Fields / Variables
Variables collect data from the user's answers to the questions defined within them. This data can either be inserted directly into the document or collected and used to control further rules.
To create a new variable, click on
Insert field
in the CE ribbon. This button will insert the field at the point where your cursor is in the document. If you do not want to use the question directly in the document, click on the "+" in the Dictionary Editor
and select New Variable
.
Creating a new field will bring up the
Variable Editor
:- TheNameis for the author's reference only, it will appear in the task pane and in the document in { } brackets.
- TheQuestionbox allows you to specify the question that should appear in the questionnaire.
- Typeallows you to choose between different types of question (see below for examples).
The type of variable used depends upon what kind of information being collected. For example, a party name is typically captured using a
Text
variable, which allows the user to enter their answer freely. Other types of information may require different variable types, for instance, when collecting an address, we could use Multi-line Text
to allow the user additional space for a more detailed response.Furthermore, if we already have a list of options that we want to give the user, we can use the
Text Selection
, or Yes/No
variable types.See below for examples:
- Text: {Name}
- Multi-line Text: {Address}
- Text Selection: {Selection}
- Yes / No: {YesNo}
- Whole Number: {Number}
- Decimal Number: {Currency}
- Date: {Date}
- Time: {Time}
Business Rules / Spans
Spans are commonly used to control whether a section of text appears in the final document draft, or to control the relevancy of the questions asked. We have already seen an example of spans being used to control pieces of text, however we can also use spans to control whether certain questions appear or not (i.e. control the relevance). For example:
<
Jurisdiction Is "England & Wales"
The jurisdiction is England & Wales.><
Jurisdiction Is "United States of America"
The jurisdiction is the state of {State}, the United States of America.>Combining Business Rules
The examples shown so far have used simple, standalone rules. However, multiple rules can be combined within a single span. For example, if you want a piece of text or a variable to appear only when several conditions are met, you can use a single span to evaluate all of those conditions.
<
MultiColours is "Red" and MultiColours is "Blue"
This paragraph should only appear if red and blue are chosen.>To do this, we can use the connecting words suggested in the span editor.

note
The combined rules do not have to originate from the same variable. In the above example, the question MultiColours is used for both rules, however, this does not need to be the case.
It is also possible to control a piece of text and/or questions depending upon whether one of a list of options is met. To do this, we can use the or / xor logical operator, for example:
<
MultiColours is "Red" or MultiColours is "Blue"
This paragraph should only appear if red or blue are chosen, or both are chosen.><
MultiColours is "Red" xor MultiColours is "Blue"
This paragraph should only appear if red or blue are chosen, but not both are chosen.>For additional examples of combining business rules, click here.
Excluding Options
Typically, span rules are configured to display content when a particular result is selected. However, you can also create rules that exclude specific results. This approach is useful when you have many possible options and want content to be displayed unless one or more specified options are chosen.
To do this, we would use the 'isnot' logical operator. For example:
<
MultiColours isnot "Green"
This paragraph should appear if any option but green is chosen.>Building a relevancy structure
So far, the span rules used have only been limited to one level or relevancy. However, it is possible to layer the rules to dictate the relevancy of a particular section or the appearance of subsequent questions.
For example, before collecting Guarantor information, the following must first be confirmed:
- Whether there is a Guarantor for this contract, and;
- That the name of the Guarantor is known
These two conditions could be placed side by side, as shown in the previous
AND
example. However, to ensure the questions appear in a specific sequence, the rules should be layered. For example, if the user answers Yes
to the question "Is there a guarantor?"
, they are then shown the question "Do you know the guarantor's name?"
. Only if they answer Yes
to that question will the field for entering the guarantor's name be displayed. To achieve this behavior, the rules must be layered in the required order:<GuarantorYN<GuarantorNameKnow
{GuarantorName}>>
By nesting one rule within another, each question can be made dependent on the response to the previous question. For example, the question asking whether the guarantor's name is known is displayed only if a guarantor exists. Similarly, the field for entering the guarantor's name is displayed only if the user confirms that they know the guarantor's name.
Span Syntax
The structure of a span rule depends on the type of question used as the basis for the rule. In the guarantor example above, the span rule references only the variable name. This is because both questions,
"Is there a Guarantor?"
and "Do you know the name of the Guarantor?"
, are Yes / No
question types, where the rule evaluates whether the response is Yes
.In this example, the intention is to check that the user has answered
Yes
to both questions. Because these are Yes/No
(Boolean or True/False) question types, the expected answer does not need to be specified explicitly. When a business rule references a Yes/No variable by name, Contract Express assumes the value is True
(Yes
) by default. To create the opposite condition, for example, to indicate that there is
no guarantor
, prefix the variable name with Not
. This instructs Contract Express to evaluate the variable as False
(No
). For example:<
Not GuarantorYN
If there is no guarantor then the name does not apply and this alternative text shall appear.>Markup Editor
Editing spans in bulk can be done using the
Markup Editor
. To use this, open it from the home ribbon and place the cursor within the span. The associated question or field is automatically highlighted in the document, allowing you to quickly locate the content governed by the rule.In the
Expression
tab, the current span rule is displayed and can be edited directly. As you type, Contract Express provides predictive text suggestions, including operators such as And
, Or
, Not
, and comparison functions, helping you build or modify the rule more efficiently.
Once you have completed a change, you can click
Apply
to apply the change to the document. The dropdown gives you the option to update only the selected markup, or to all matching markup. This second option will allow you to edit a span throughout the document if you need to make general changes.The tab
Relevance
shows you the conditions under which the highlighted area (or text where your cursor is) will appear in the generated document. Simply click in the section you wish to check and then click Refresh
to check the relevancy.
Dictionary Editor
The
Dictionary Editor
is used to manage the variables created within a template. It also provides tools for organising the questionnaire structure, managing lookup tables, and configuring warnings and custom functions required by the template.
The Dictionary Editor can be used as a standalone editor or in docked mode which will place it to the side of the Word screen. You can either click and drag it to the side of your screen, or click the
button.
Dock
button.All Variables
The
All Variables
option allows you to easily see and control the variables created in your template. You can edit existing variables by highlighting the name in the Dictionary Editor and using the tabs provided at the bottom of the task pane to make any necessary changes.
Variables can also be dragged from the dictionary editor to the appropriate place in the document, or by right clicking on the variable and selecting
Insert to Document
. The Dictionary Editor is also helpful for finding instances of a variable in the document. This can be done by selecting either the left (search up) or right (search down) arrow in the Dictionary Editor. The
option can be used to search within the Dictionary Editor for specific variable types.
Filter
option can be used to search within the Dictionary Editor for specific variable types. 
The
option can be used to search for the name of a specific variable.
Search
option can be used to search for the name of a specific variable.
Questionnaire
The
Questionnaire
section of the Dictionary Editor is used to control the order in which the questions are asked in the questionnaire.Pages
To order the questions, first create the questionnaire pages by selecting the plus button at the top of the editor and selecting
New Page
. You may specify the details such as the title and any guidance you wish to appear on the page whilst the page is highlighted in the Dictionary Editor.
Groups
Once the page is created, you can add groups to this page by again selecting the plus button at the top of the editor and choosing
New Group
. You must specify which page the group is to go into before creating the new group. You cannot create a group that is not designated to a particular page. You may add multiple groups to each page, if needed.
note
Any questions not yet ordered will be placed in the
Unallocated Variables
folder at the bottom of the Questionnaire. You can order the questions as you create them, and this is the recommended approach as it makes keeping track of the order in which questions should be asked much easier.For example, the Guarantor questions used earlier follow a clear relevancy path based on their dependencies. The question "
Is there a Guarantor?
" must be answered first, followed by "Do you know the name of the Guarantor?
". As a result, the questions should be positioned in the questionnaire in the same order. If a question is placed before another question on which it depends, for example, asking for the Guarantor's name before the preceding questions have been answered, Contract Express displays the following message:
This is shown because of the order of the questions in the questionnaire. Once
GuarantorName
is moved to the correct position in the questionnaire, after the questions on which it depends, the relevancy path is resolved and the error message no longer appears. This ensures that the question is displayed only when the required conditions have been met.
Lookup Tables
Lookup tables are useful when a template needs to work with a large amount of structured data that is reused regularly. They allow information to be retrieved automatically based on a user's selection. There are two common methods for working with lookup tables.
The first approach is to use
Select
statements within variables.A primary lookup variable is required to act as the connection to the lookup table. This variable must be configured as a
Text Selection
variable. Instead of defining the selection list manually, select Dynamic
to retrieve values from the lookup table.This instructs Contract Express to retrieve the available options from the lookup table. Next, specify the column from which the values should be returned. In this example, the
LookupName
column contains the names to be displayed, so the query is:Select LookupName

note
Any spaces in a column or table name should be enclosed with single quotes.
This displays the values from the
LookupName
column as selectable options.Next, this second variable is used to display the address associated with the name selected in the first variable. Like the first variable, it should be configured as a
Text Selection
question with Dynamic
selected. In the Selection List Items
box, enter:Select LookupAddress Where LookupName Is [Selected Value]
This query retrieves the value from the
LookupAddress
column that corresponds to the selected value in the primary lookup variable. When a value is selected from the
LookupName
column, for example, if the user selects Adam
from the list of names, Contract Express uses that selection to locate the corresponding record and returns Adam's address from the LookupAddress
column.
The same approach can be used to retrieve additional information. The primary lookup variable acts as the main point of contact for the lookup table, so all related variables reference the selected value from that variable. For example, to retrieve the profession associated with the selected record, enter:
Select LookupProfession Where LookupName Is [Selected Value]
i.e. pinpoint profession when the user has made their initial choice, in this case, Adam.

One advantage of this method is that related information can be displayed within the questionnaire. If the
Other
option is enabled for the dependent variables, the retrieved values can be edited when necessary if the provided answers are not appropriate.Lookup tables can also be referenced directly within the document. This syntax uses the selected lookup record as a reference, followed by a period (
.
) and the name of the column whose value should be returned. The variable used to make the lookup table selection must be configured as a Text Selection
variable with Dynamic
selected and an appropriate Select
statement defined. When the document is generated, values from the corresponding row in the lookup table are inserted automatically into the document. Unlike the previous approach, these related values are not displayed in the questionnaire and cannot be modified during the interview process. The values are retrieved directly from the lookup table when the document is generated.
Name | Address | Profession |
|---|---|---|
{LookupOut1 Format "^L"} | {LookupOut1 . LookupAddressTwo Format "^L"} | {LookupOut1 . LookupProfessionTwo Format "^L"} |
This takes the form of the original variable which will be used to make the choice, in this case
LookupOut1
, followed by a full stop and then the column title you want to appear in that position.As before with select statements, the first variable is the main point of contact, so it still needs to be a
Text Selection
variable with Dynamic
ticked and a Select statement in the list items box. Using this method, the information associated with the user's only choice (here, the name) is pulled through automatically into the final document. The user will not see the other information associated with their choice in the questionnaire and will not have the option to alter it.Warnings
Warnings (previously known as Alerts) can be used to control the way the users provide their answers in the questionnaire.
To create a new warning, select the plus button in the
Dictionary Editor
, then New Warning
. Specify the message you want to appear in the questionnaire if the warning is triggered.
Next, select the
Condition
tab and specify when the warning should appear. This is done in the same manner as writing a business rule.
You can configure two types of warnings in a questionnaire:
- Regular warningswill provide the user with pop up guidance in the questionnaire but will not prevent them from continuing with their given answers.
- Compulsory warningswill prevent the user from continuing with the questionnaire until they have amended their answers. This can be useful if you wish to be more restrictive about a certain set of answers being given. To create a compulsory warning, check theCompulsorybox in the warning during creation.

For more information, see .
Functions
In addition to the predefined functions available in Contract Express, Authors can create custom functions to simplify commonly used calculations or combinations of functions. For example, you might create a function that automatically adds VAT to an amount.
To create a custom function, open the
Dictionary Editor
, click the Add (+)
button, and select New Function
.
Here we want to multiply our variable by 1.2 to reflect the VAT rate. We can then apply this function to the variable when we use it in a field or a span.
{AddVAT(Variable)}
Within a custom function,
%1
represents the value or variable passed into the function. Using %1
makes the function reusable, so it can be applied to different variables without modifying the function itself. For example, if an
AddVAT
function is created, it can be used with any amount variable:{AddVAT(AgencyFee)}
AgencyFee
is used to colllect fee of an Agency.In this case,
AgencyFee
is passed to the function and replaces %1
. If a function requires multiple inputs, use additional placeholders such as %2
, %3
, and so on.Guidance
It is possible to provide additional instructions to users as they navigate through the questionnaire at several different points. A common use of this feature is to provide a "
landing page
" for users providing instructions and guidance on how to complete the questionnaire.If a questionnaire page is intended to provide guidance only and does not contain any questions, select
Always Show
to ensure the guidance is displayed. This option is available in the questionnaire section of the Dictionary Editor.

Guidance can also be added next to individual questions using the
Guidance
box in the Variable Editor
. This will place the guidance below the answer box associated with it. Alternatively, you can also provide preamble guidance for a specific question using the Preamble
section in the Variable Editor, this will go just above the question.Expandable guidance can also be added by using the
<+>
button. This is done in a similar way to hyperlinking, by selecting the text to be clicked to show the additional guidance.
Dynamic Guidance
When using certain types of questions, it is possible to present Dynamic guidance. This means that the user will be presented only with the guidance applicable to their answer to the question. To do this, use an "If Then Else" statement. For example:
{If ABCSelect Is "A" Then "Message for A" Else If ABCSelect Is "B" Then "This is a message for B" Else If ABCSelect Is "C" Then "This is a different message for C" Else ""}
The Else "" at the end of the statement is necessary to specify a blank value in the absence of the users answer to the question referenced. In this example, we have left the space blank by simply leaving the end of the statement as "", however, if preferred you may use this space to specify a default text which will appear until the specific guidance has been identified, e.g.:
{If ABCSelect Is "A" Then "Message for A" Else If ABCSelect Is "B" Then "This is a message for B" Else If ABCSelect Is "C" Then "This is a different message for C" Else ""}
note
The above examples apply to
Text Selection
questions being used as the basis for the statement, if for example you are using a Yes/No
question the syntax would be slightly different, (see the Spans / Business rules section for further details) e.g.:
{If ABCYN then "Message if yes" Else If Not ABCYN Then "Message if no" Else ""}
note
If you wish to specify guidance where no option has yet been selected, this can be done by using the Known and Not Known functions. Please see the example below:
{If Not Known(ABCYN) Then "There is no message yet. Please select an option." Else If ABCYN then "Message if yes" Else If Not ABCYN Then "Message if no" Else ""}
Formatting and Punctuation
Formatting
There are different ways of formatting the final presentation of the user's answers as they will appear in the document. In the
Variable Editor
, under the Document
tab, a Default Format
section can be found and used to control the format for that question.Click on the
Preview
button in the Document
tab and you will see a preview of your chosen format in this edit box. You may also create your own format by editing the pre-set formats, the preview will update dynamically as you amend the format.Select Preview Locale
option will not change the locale used in the template, it only gives a preview of the presentation.
If using the above method, the format will apply for all instances of that question. To apply formatting to a specific instance only, use the
Format
command instead within the merge field.- Uppercase: {Name Format Upper}
- Lowercase: {Name Format Lower}
- Address Line: {Address Format ", |,"}
- Address Lines: {Address Format "^L"}
Standard word formatting such as bolding, underlining, as well as autonumbering and house Word styles can be used in conjunction with CE Author. For example:
{Name}
/ {Name}
/ {Name}
Punctuation
Another way of applying formatting to the finished document is using the
Punctuation
function. This allows Authors to apply a specific format pattern to large portions of that may change depending upon the answers given in the questionnaire.For example:
<
Punctuation "; |; and |."
<
PunctuationExample Is "Apples"
I like apples{Mark}><
PunctuationExample Is "Oranges"
I like oranges{Mark}><
PunctuationExample Is "Pineapples"
I like pineapples{Mark}><
PunctuationExample Is "Bananas"
I like bananas{Mark}><
PunctuationExample Is "Grapes"
I like grapes{Mark}>>The
Mark
fields dictate where the applicable punctuation will be placed. Using this method, we can ensure that the correct punctuation is produced no matter how many clauses are included in the final document.The Punctuation is specified in 3 parameters as these correspond to the first, the middle, and the last respectively. In the above example, if I select "apples" and "oranges" in the questionnaire, the result will be:
I like apples; and
I like oranges.
If I select "apples", "oranges", "pineapples" and "grapes", the result will be:
I like apples;
I like oranges;
I like pineapples; and
I like grapes.
Known Function
The Known function can be used to test whether a question has been answered or not and can control the output of the generated document. It also gives the user an option to leave a question blank in the questionnaire if they do not know the answer rather than asking another question as to whether they do or not.
A common use of the Known function is to mark unanswered questions in the final word document output, or to provide an alternative text and/ or question at that point, for example:
<
Known(SigName)
{SigName}><Not Known(SigName)
[Signatory Name]><
Known(SigName)<Known(SigTitle)
{SigTitle}>><Not Known(SigTitle)
[Signatory Job Title]>In this case, the
Signatory Job Title
question above will only appear once the Signatory Name
question has been answered. This is a good example of the way the Known function can be used to also control relevancy.Multi-Select variables are always considered "known", even where the user does not make any selections, since this will count as "none of these apply". In order to check whether a Multi-Select has been answered (i.e. at least one option has been chosen), use
Count(MultiSelectVariableName) isatleast 1
as your span rule.IfKnownElse Function
Alternatively, if you are not using the Known function to control the appearance of another question or a section of text, it may be appropriate to use the IfKnownElse function.
The purpose of this function is to allow authors to set an alternative text/answer to appear at the given point in the document in the event that the user does not know or has not filled out the answer to the primary question.
A common use of this is to reference the full legal name of a party to a contract, and the shortened name by which the party shall be known throughout the contract. It may be that the user does not know the full legal name of the party when they are filling out the questionnaire, so to avoid any complications arising from this missing information, the IfKnownElse function can be used to specify and alternative answer to place at that point in the document. The preferred option should be placed before the comma, and the alternative after the comma as shown below:
{IfKnownElse(ClientFullName, ClientName)}
Equally, to specify plain text as the alternate if the primary question is not answered, use
{IfKnownElse(ClientFullName, "Client Name Plain Text")}
In the above example, we have enclosed the alternate text in double quotes because this is free plain text, not the name of a variable as in the first example. This is a common theme throughout CE Author where free text (as when specifying the applicable option in a span using a Text Selection question) must be encircled in double quotes to contain the free text.
OnlyOnInput
OnlyOnInput
is a useful function when you need to display a question in the questionnaire without including its response in the generated document. For example, it can be used to collect metadata for reporting purposes or to support questionnaire logic and relevancy rules, while preventing the information from being output in the final Word document.<
OnlyOnInput
{UnprintedQuestion}>There is also
OnlyOnOutput
function which is less commonly used, and works in the opposite manner to the above, by excluding the contained content from the questionnaire, but not the generated document.False
False is a useful function for testing purposes that invalidates any CE content contained within the False span from questionnaire and document relevancy. This is a helpful function to use when troubleshooting.
Repeats
Spans can also be used to repeat information using the function
Repeat
. For example, if we want to enter the name of several board members, we do not need to create new variables every time. Instead, we can ask how many there are and the information will be collected separately but only using one variable.<
Repeat BoardMemberNumber
{BoardMemberName}>note
When a variable is placed inside a repeat span, it becomes part of a
repeat context
. Any other instance of that variable (for example, BoardMemberName
) must also be used within the same repeat context. If the variable is referenced both inside and outside the repeat span, Contract Express displays an error indicating that the question is being used in multiple repetition contexts.This error occurs because the variable is treated as both repeating and non-repeating at the same time. To resolve the issue, ensure that all instances of the variable are placed within the same repeat context.
Unrepeated
If the same information needs to appear alongside repeating data, such as a company name displayed with each board member's name, the
Unrepeated
function can be used. This function removes a variable from the repeat context, allowing the related question to be asked only once while reusing the same answer throughout the repeated section.Board Member Name | Company |
|---|---|
< Repeat BoardMemberNumber {BoardMemberName} | {Unrepeated(CompanyName)}> |
Repeat spans can be nested to handle multiple levels of repeating data. For example, to list the employees associated with each board member, an additional repeat span can be added within the board member repeat span. This creates a hierarchical structure where each board member can have a separate list of employees.
Employee Name | Board Member Name | Company |
|---|---|---|
< Repeat BoardMemberNumber<Repeat EmployeeNumber {EmployeeName} | {Unrepeated(BoardMemberName)} | {Unrepeated(Unrepeated(CompanyName))}>> |
CompanyName
must be marked as Unrepeated
twice because it does not depend on either EmployeeNumber
or BoardMemberNumber
. BoardMemberName
must be marked as Unrepeated
once because it depends on BoardMemberNumber
but not on EmployeeNumber
. Adding a second repeat also affects the questionnaire structure. To maintain a green validation indicator, the employee-related questions should be placed on a separate questionnaire page. If they remain on the same page, a yellow indicator may appear. This does not prevent the questionnaire from functioning correctly, but it does indicate a potential structural issue.
Further uses of repeats
Repeats can also be used to control portions of the final document. A common example being specifying between the singular and plural reference to the parties. This can be achieved by using the
Is
, IsMoreThan
, and IsLessThan
functions in the span editor. For example, the sentences below will change based on the number of board members, using these functions:<
BoardMemberNumber Is 1
The Party to this agreement><
BoardMemberNumber IsMoreThan 1
The Parties to this agreement>When specifying numeric values, quotation marks are not required because numbers are predefined values recognised by Contract Express. Quotation marks are only required when specifying text values, as text can contain any combination of characters and must be identified as a literal value.
note
For templates that need to handle both singular and plural instances, a custom function can simplify the logic and save time. For example:
%1 IsMoreThan 1
Repeat Counter
It can also be useful to count the number of repeats within a repeat context. This is commonly used to make questionnaires clearer by indicating which party's details are being entered, for example, "Enter the name of the first, second, third, and so on, board member". Repeat counters can be formatted using the same commands described earlier:
<
Repeat BoardMemberNumber
{RepeatCounter}
{RepeatCounter Format "wth"}
{RepeatCounter Format "nth"}>
Pluralize
The Pluralize function, available from the CE ribbon, provides a quick way to create singular and plural versions of a word or phrase. This helps ensure that the correct wording is used automatically based on the relevant data. For example, consider the following:
The Tenant[s] [is/are] <
Repeat TenantNumber Punctuation ", |, and |."
{TenantName} whose registered address is at {TenantAddress}{Mark}>If there is only one tenant, the sentence should use "is"; if there is more than one tenant, it should use "are". The Pluralize function can be used to automatically select the correct form based on the number of tenants.

You simply need to enter what the singular and plural forms should be, and then choose a whole number variable for how many tenants there are. Contract Express will then set up the necessary spans for you.
The Tenant<
TenantNumber ismorethan 1
s> <TenantNumber is 1
is><TenantNumber isnot 1
are> <Repeat TenantNumber Punctuation ", |, and |."
{TenantName} whose registered address is at {TenantAddress}{Mark}>Computables
A useful way to think about computables is as storage containers. A computable is a variable that can store other variables, business rules, or expressions. This helps simplify template design, particularly in long documents or when complex business rules would otherwise need to be repeated in multiple places. By storing the logic in a computable, the rule can be defined once and reused throughout the template.
To create a computable, create a new variable and select
Computable Variable
as the variable type. Enter the expression, business rule, or logic to be stored in the Definition
box. The Definition box supports the same syntax and autocomplete functionality as the Span Editor, making it easier to build and validate expressions..Calculations
A common use of computables is to simplify calculations in Contract Express. For example, a questionnaire might collect a contract price that excludes VAT, while the document needs to display the total price including VAT.
To achieve this, a computable named
VATAmount
can be created to calculate 20% of the contract price the user has given:20 / 100 * ContractPrice
The total contract price (
TotalContractPrice
) including VAT can then be calculated by adding the contract price and VAT amount directly in the document:{ContractPrice + VATAmount}
For more complex scenarios, the entire calculation can be stored in a second computable, such as
TotalContractPrice
, and referenced throughout the template.Using computables in this way makes calculations easier to manage, improves readability, and avoids repeating the same logic in multiple places.
External Dictionary
The
External Dictionary
allows you to take variables from other templates and use them throughout multiple documents. This is particularly useful if creating a suite of documents.External Dictionaries can be implemented in two ways:
file-side dictionaries
and server-side dictionaries
. The difference between these approaches lies in where the dictionary data is stored. File-side dictionaries are stored within the template file, while server-side dictionaries are stored on the Contract Express server and can be accessed by multiple templates.File-side dictionaries reference templates stored locally on the file system, allowing access to templates that have previously been created and saved. Server-side dictionaries, by contrast, reference templates that have been uploaded to the Contract Express server, making them available for use across the server environment.
To choose between the two options, open the
Options
menu and select Use file-based external dictionary
to use a file-side dictionary. Leave this option unchecked to use a server-side dictionary.
To add variables through the External Dictionary, click on the button in the task pane and select
Attach
. You can either Attach without questionnaire pages and groups
, which will import the variables into the task pane but not alter the questionnaire in your current template, or Attach with questionnaire pages and groups
, which will alter the questionnaire to take into account the new variables.If using file-side dictionaries, select the Word file name of the template you wish to attach and click
Open
. If you are using server-side dictionaries, select the Template Reference of the template you wish to attach. Then close the dialogue box and the template will be updated. You should see the variables borrowed from the other template marked by pencil symbols in the task pane. If you already had existing questions in your current template these borrowed variables will be added to the task pane in addition. The template you have imported these variables from is known colloquially as the Dictionary Document or the library document.For file-side dictionaries, select the Word template file to attach and click
Open
. For server-side dictionaries, select the template reference of the template to attach. After closing the dialog box, the template is updated and the imported variables appear in the task pane, identified by a pencil icon. If the current template already contains variables, the imported variables are added alongside them. The template from which the variables are imported is commonly referred to as the Dictionary Document
or Library Document
.note
Be sure to check that the variables in the dictionary document are not named the same as in your current template. This will confuse the system and lead variables to be undefined.
To detach an imported template, select the attached template and click
Detach
. You can remove the imported variables completely by selecting Detach, removing local definitions
or keep the imported variables by selecting Detach, leaving local definitions
.Variables imported through an External Dictionary cannot be edited in the current template while the dictionary link remains in place. To modify an imported variable, the change must be made in the original template from which the variable was imported, often referred to as the dictionary document or library document. This centralised approach ensures that updates made to the source template are automatically available to any templates that use the External Dictionary connection, helping to maintain consistency across related templates.
File Based External Dictionary connections will filter these changes through automatically assuming that the file path has not changed.
Server Side External Dictionary connections, if any changes are made in the original template, simply click
Refresh, overwriting local definitions
within the current template to update the changes.You can override this behavior for an individual variable by clearing the
Use External Definition from [Template Name]
option. This breaks the link between the variable and its external definition, allowing the variable to be edited locally within the current template. Alternatively, the External Dictionary connection can be detached entirely, as described earlier.
Attach Statements
Attach statements are used to attach one document to another. The top or master document contains the statement, the sub-document (for example a schedule or appendix) is attached to the top/master. This can be placed at any point in the top document. If more than one sub-template is being attached, they will appear in the order that the Attach statements appear. Whether a document is attached or not can also be made dependent upon the answer to a question through using the span functionality.
<
SchOneYN
{Attach Template 'Schedule One'}>note
You must attach the Template Reference, not the Template Name or the Word file name.
There are many uses for the Attach function. Simply attaching schedules or appendices is a common use of the functionality, but it can also be used to create suites of documents. Using the external dictionary in conjunction with the Attach statement also saves time and effort when managing multiple templates.
For example, say we have a variable which is a question about the name of a company in our main agreement (the top/master document) which is also used in the schedules (sub-documents), that we want to attach to our main agreement. Since, the variable already exists in our top document, all we have to do is borrow this to use in our sub-document. In the sub-document, simply attach the questions from the top document using the External Dictionary. These can then be used as required in the sub document.
The advantage of using this method to share questions between documents is that it does not interfere with the order of the questionnaire, so questions used in either the top or sub-documents can be asked in any order.
If you create separate questions in the sub-document, these questions will be added to the end of the main questionnaire.
Creating Suites
Using the functionality described above, it is possible to create suites that generate multiple documents from a single questionnaire.
To achieve this, a top document is required to hold the Attach statements, the variables used in the sub-templates, and, in some cases, the questionnaire structure. Although there are several ways to implement this functionality, the method described below is commonly used and is generally the most suitable for larger document suites.
To begin, create your "top" or "master" document. This can be either a blank document or a template in itself. In this document, create your questions using the plus button in the task pane. Take into consideration that using this method, we need to create all questions to be used across all sub templates (i.e. if there is a question that only applies to one sub template, it still needs to be included in the top document task pane. This is to maintain the integrity of the questionnaire structure). Remember to structure the questionnaire in your top document using the
Questionnaire Editor
.Once this process is complete, the variables can be shared with the sub-templates that make up the suite by using the External Dictionary function in each sub-template.
note
When creating a suite, it is often more convenient to leave the top document attached so that you need only refresh the external dictionary if any changes are made.
Next, in each sub-template, insert the variables into the appropriate locations within the document. Business rules can also be created using the available questions.
The last step is to join the documents together to form a suite. This is done through the use of the Attach Statements detailed above. These statements are held in the top document, and, if needed it is possible to control which of the sub templates are used depending upon the users answers in the questionnaire. See making the attach statements dependable in the section above.
The final step is to bring the documents together to form a suite. This is done using the Attach statements described above. These statements are stored in the top document and can be configured to determine which sub-templates are included based on the user's responses in the questionnaire.

Include Statements
Include statements include text from another document at the specified point in the main document. Unlike Attach statements, which can be placed anywhere in the top template, the position of an
Include
statement determines where the content appears in the output document.A common use case is including standard clauses that are shared across multiple templates and may be updated periodically. By storing the clause in a separate document and including it within templates, any changes made to the source document are automatically reflected wherever the clause is used.
{Include Template 'Boilerplate Clause'}
Contract Express markup contained within the included document is also carried over. The External Dictionary can be used alongside Include statements in the same way as described earlier.
For greater flexibility, the File Upload variable type can be used to allow users to include content from another document. This presents a
Browse
button in the questionnaire, enabling users to select a Word document to include in the generated output.{Include Document 'ChooseADocument'}
When using a File Upload variable, use the
Include Document
function to insert the selected document into the output.Contract Express Support
For additional learning resources, see the
Help
tab in the Getting Started
section of the Contract Express Word ribbon. This links to the wider Contract Express Knowledge Base, which is actively maintained providingThe section contains short training walkthroughs, webinar recordings, and other guidance covering a variety of Contract Express topics: a wide range of helpful learning materials.
For more specific questions, contact the Contract Express Team at contractexpress-support@thomsonreuters.com. The team can provide additional guidance and support for Contract Express-related queries.