Automation Syntax

Comments

Comments allows descriptive text to be included that is not placed into the output of the Automation Engine. Comments are a useful way of reminding yourself and explaining to others what your Automation Template statements are doing, or any other purpose you find useful. Below is an example of a comment in the Automation Template.

## This is a single line comment.

A single line comment begins with ## and finishes at the end of the line. If you're going to write a few lines of commentary, there's no need to have numerous single line comments. Multi-line comments, which begin with # and end with #, are available to handle this scenario.

This is text that is outside the multi-line comment.
Online visitors can see it.

#*
  Thus begins a multi-line comment. Online visitors won't
  see this text because the Templating Engine will
  ignore it.
*#

Here is text outside the multi-line comment; it is visible.

Here are a few examples to clarify how single line and multi-line comments work:

This text is visible. ## This text is not.
This text is visible.
This text is visible. #* This text, as part of a multi-line
comment, is not visible. This text is not visible; it is also
part of the multi-line comment. This text still not
visible. *# This text is outside the comment, so it is visible.
## This text is not visible.

There is a third type of comment, the Automation Template comment block, which may be used to store any sort of extra information you want to track in the template (e.g. javadoc-style author and versioning information):

#**
  This is a comment block and
  may be used to store such information
  as the document author and versioning
  information:
    @author John Doe
    @version 5
*#

References

There are three types of references: variables, properties and methods. As a designer, you and your engineers must come to an agreement on the specific names of references so you can use them correctly in your templates.

Variables

The shorthand notation of a variable consists of a leading "$" character followed by an Identifier. An Identifier must start with an alphabetic character (a .. z or A .. Z). The rest of the characters are limited to the following types of characters:

  • alphabetic (a .. z, A .. Z)
  • numeric (0 .. 9)
  • hyphen ("-")
  • underscore ("_")

Here are some examples of valid variable references:

$foo
$mudSlinger
$mud-slinger
$mud_slinger
$mudSlinger1

When you reference a variable, such as $foo, the variable can get its value from either a set directive in the template, or from the Java code. For example, if the Java variable $foo has the value bar at the time the template is requested, bar replaces all instances of $foo on the web page. Alternatively, if I include the statement

#set( $foo = "bar" )

The output will be the same for all instances of $foo that follow this directive.

Properties

The second flavor references are properties, and properties have a distinctive format. The shorthand notation consists of a leading $ character followed an Identifier, followed by a dot character (".") and another Identifier. These are examples of valid property references:

$customer.Address
$purchase.Total

Take the first example, $customer.Address. It can have two meanings. It can mean, Look in the hashtable identified as customer and return the value associated with the key Address. But $customer.Address can also be referring to a method (references that refer to methods will be discussed in the next section); $customer.Address could be an abbreviated way of writing $customer.getAddress(). When your code is requested, the Automation will determine which of these two possibilities makes sense, and then return the appropriate value.

Methods

A method is defined in the Java code and is capable of doing something useful, like running a calculation or arriving at a decision. Methods are references that consist of a leading "$" character followed an Identifier, followed by a Method Body. A Method Body consists of an Identifier followed by an left parenthesis character ("("), followed by an optional parameter list, followed by right parenthesis character (")"). These are examples of valid method references:

$customer.getAddress()
$purchase.getTotal()
$page.setTitle( "My Home Page" )
$person.setAttributes( ["Strange", "Weird", "Excited"] )

The first two examples -- $customer.getAddress() and $purchase.getTotal() -- may look similar to those used in the Properties section above, $customer.Address and $purchase.Total. If you guessed that these examples must be related some in some fashion, you are correct!

Properties can be used as a shorthand notation for Methods. The Property $customer.Address has the exact same effect as using the Method $customer.getAddress(). It is generally preferable to use a Property when available. The main difference between Properties and Methods is that you can specify a parameter list to a Method.

The shorthand notation can be used for the following Methods

$sun.getPlanets()
$annelid.getDirt()
$album.getPhoto()

We might expect these methods to return the names of planets belonging to the sun, feed our earthworm, or get a photograph from an album. Only the long notation works for the following Methods.

$sun.getPlanet( ["Earth", "Mars", "Neptune"] )
## Can't pass a parameter list with $sun.Planets

$sisyphus.pushRock()
## Automation assumes I mean $sisyphus.getRock()

$book.setTitle( "Homage to Catalonia" )
## Can't pass a parameter

All array references are treated as if they are fixed-length lists. This means that you can call java.util.List methods on array references. So, if you have a reference to an array (let's say this one is a String[] with three values), you can do:

$myarray.isEmpty()

$myarray.size()

$myarray.get(2)

$myarray.set(1, 'test')
Case Substitution

Now that you are familiar with references, you can begin to apply them effectively in your templates. References take advantage of some Java principles that template designers will find easy to use. For example:

$foo

$foo.getBar()
## is the same as
$foo.Bar

$data.setUser("jon")
## is the same as
#set( $data.User = "jon" )

$data.getRequest().getServerName()
## is the same as
$data.Request.ServerName
## is the same as
${data.Request.ServerName}

These examples illustrate alternative uses for the same references. The Automation Engine takes advantage of Java's introspection and bean features to resolve the reference names to both objects in the Context as well as the objects methods. It is possible to embed and evaluate references almost anywhere in your template.

The Automation Engine is case sensitive; however, its developers have strove to catch and correct user errors wherever possible. When the method getFoo() is referred to in a template by $bar.foo, the engine will first try $getfoo. If this fails, it will then try $getFoo. Similarly, when a template refers to $bar.Foo, the engine will try $getFoo() first and then try getfoo().

Note: References to instance variables in a template are not resolved. Only references to the attribute equivalents of JavaBean getter/setter methods are resolved (i.e. $foo.Name does resolve to the class Foo's getName() instance method, but not to a public Name instance variable of Foo).

Directives

References allow template designers to generate dynamic content for web sites, while directives -- easy to use script elements that can be used to creatively manipulate the output of Java code -- permit web designers to truly take charge of the appearance and content of the web site.

Directives always begin with a #. Like references, the name of the directive may be bracketed by a { and a } symbol. This is useful with directives that are immediately followed by text. For example the following produces an error:

#if($a==1)true enough#elseno way!#end

In such a case, use the brackets to separate #else from the rest of the line.

#if($a==1)true enough#{else}no way!#end

Set

The #set directive is used for setting the value of a reference. A value can be assigned to either a variable reference or a property reference, and this occurs in brackets, as demonstrated:

#set( $primate = "monkey" )
#set( $customer.Behavior = $primate )

The left hand side (LHS) of the assignment must be a variable reference or a property reference. The right hand side (RHS) can be one of the following types:

  • Variable reference
  • String literal
  • Property reference
  • Method reference
  • Number literal
  • ArrayList
  • Map

These examples demonstrate each of the aforementioned types:

#set( $monkey = $bill ) ## variable reference
#set( $monkey.Friend = "monica" ) ## string literal
#set( $monkey.Blame = $whitehouse.Leak ) ## property reference
#set( $monkey.Plan = $spindoctor.weave($web) ) ## method reference
#set( $monkey.Number = 123 ) ##number literal
#set( $monkey.Say = ["Not", $my, "fault"] ) ## ArrayList
#set( $monkey.Map = {"banana" : "good", "roast beef" : "bad"}) ## Map

NOTE: For the ArrayList example the elements defined with the [..] operator are accessible using the methods defined in the ArrayList class. So, for example, you could access the first element above using $monkey.Say.get(0).

Similarly, for the Map example, the elements defined within the { } operator are accessible using the methods defined in the Map class. So, for example, you could access the first element above using $monkey.Map.get("banana") to return a String 'good', or even $monkey.Map.banana to return the same value.

The RHS can also be a simple arithmetic expression:

#set( $value = $foo + 1 )
#set( $value = $bar - 1 )
#set( $value = $foo * $bar )
#set( $value = $foo / $bar )

If the RHS is a property or method reference that evaluates to null, it will not be assigned to the LHS. It is usually not possible to remove an existing reference from the context via this mechanism. This can be confusing for newcomers. For example:

#set( $result = $query.criteria("name") )
The result of the first query is $result

#set( $result = $query.criteria("address") )
The result of the second query is $result

If $query.criteria("name") returns the string "bill", and $query.criteria("address") returns null, the above syntax will render as the following:

The result of the first query is bill

The result of the second query is bill

This tends to confuse newcomers who construct #foreach loops that attempt to #set a reference via a property or method reference, then immediately test that reference with an #if directive. For example:

#set( $criteria = ["name", "address"] )

#foreach( $criterion in $criteria )

    #set( $result = $query.criteria($criterion) )

    #if( $result )
        Query was successful
    #end

#end

In the above example, it would not be wise to rely on the evaluation of $result to determine if a query was successful. After $result has been #set (added to the context), it cannot be set back to null (removed from the context). The details of the #if and #foreach directives are covered later in this document.

One solution to this would be to pre-set $result to false. Then if the $query.criteria() call fails, you can check.

#set( $criteria = ["name", "address"] )

#foreach( $criterion in $criteria )

    #set( $result = false )
    #set( $result = $query.criteria($criterion) )

    #if( $result )
       Query was successful
    #end

#end

The #set directive does not have an #end statement.

Literals

When using the #set directive, string literals that are enclosed in double quote characters will be parsed and rendered, as shown:

#set( $directoryRoot = "www" )
#set( $templateName = "index.vm" )
#set( $template = "$directoryRoot/$templateName" )
$template

The output will be

www/index.vm

However, when the string literal is enclosed in single quote characters, it will not be parsed:

#set( $foo = "bar" )
$foo
#set( $blargh = '$foo' )
$blargh

This renders as:

bar
$foo

By default, this feature of using single quotes to render unparsed text is available.

Alternately, the #[[don't parse me!]]# syntax allows the template designer to easily use large chunks of uninterpreted and unparsed content in Automation Template code. This can be especially useful in place of escaping multiple directives or escaping sections which have content that would otherwise be invalid (and thus unparseable) Automation Template.

#[[
#foreach ($woogie in $boogie)
  nothing will happen to $woogie
#end
]]#

Renders as:

#foreach ($woogie in $boogie)
  nothing will happen to $woogie
#end

Conditionals

If / ElseIf / Else

The #if directive allows for text to be included when the web page is generated, on the conditional that the if statement is true. For example:

#if( $foo )
  <strong>Hello!</strong>
#end

The variable $foo is evaluated to determine whether it is true, which will happen under one of two circumstances: (i) $foo is a boolean (true/false) which has a true value, or (ii) the value is not null. Remember that the Autometion Engine context only contains Objects, so when we say 'boolean', it will be represented as a Boolean (the class). This is true even for methods that return boolean - the introspection infrastructure will return a Boolean of the same logical value.

The content between the #if and the #end statements become the output if the evaluation is true. In this case, if $foo is true, the output will be: "Hello!". Conversely, if $foo has a null value, or if it is a boolean false, the statement evaluates as false, and there is no output.

An #elseif or #else element can be used with an #if element. Note that the Automation Engine will stop at the first expression that is found to be true. In the following example, suppose that $foo has a value of 15 and $bar has a value of 6.

#if( $foo < 10 )
    **Go North**
#elseif( $foo == 10 )
    **Go East**
#elseif( $bar == 6 )
    **Go South**
#else
    **Go West**
#end

In this example, $foo is greater than 10, so the first two comparisons fail. Next $bar is compared to 6, which is true, so the output is Go South.

Relational and Logical Operators

The Automation Engine uses the equivalent operator to determine the relationships between variables. Here is a simple example to illustrate how the equivalent operator is used.

#set ($foo = "deoxyribonucleic acid")
#set ($bar = "ribonucleic acid")

#if ($foo == $bar)
  In this case it's clear they aren't equivalent. So...
#else
  They are not equivalent and this will be the output.
#end

Note that the semantics of == are slightly different than Java where == can only be used to test object equality. In the Automation Syntax the equivalent operator can be used to directly compare numbers, strings, or objects. When the objects are of different classes, the string representations are obtained by calling toString() for each object and then compared.

The Authomation Syntax has logical AND, OR and NOT operators as well. Below are examples demonstrating the use of the logical AND, OR and NOT operators.

## logical AND

#if( $foo && $bar )
  ** This AND that**
#end

The #if() directive will only evaluate to true if both $foo and $bar are true. If $foo is false, the expression will evaluate to false; $bar will not be evaluated. If $foo is true, the Automation Engine will then check the value of $bar; if $bar is true, then the entire expression is true and This AND that becomes the output. If $bar is false, then there will be no output as the entire expression is false.

Logical OR operators work the same way, except only one of the references need evaluate to true in order for the entire expression to be considered true. Consider the following example.

## logical OR

#if( $foo || $bar )
    **This OR That**
#end

If $foo is true, the Automation Engine has no need to look at $bar; whether $bar is true or false, the expression will be true, and This OR That will be output. If $foo is false, however, $bar must be checked. In this case, if $bar is also false, the expression evaluates to false and there is no output. On the other hand, if $bar is true, then the entire expression is true, and the output is This OR That

With logical NOT operators, there is only one argument :

##logical NOT

#if( !$foo )
  **NOT that**
#end

Here, the if $foo is true, then !$foo evaluates to false, and there is no output. If $foo is false, then !$foo evaluates to true and NOT that will be output. Be careful not to confuse this with the quiet reference $!foo which is something altogether different.

There are text versions of all logical operators, including eq, ne, and, or, not, gt, ge, lt, and le.

One more useful note. When you wish to include text immediately following a #else directive you will need to use curly brackets immediately surrounding the directive to differentiate it from the following text. (Any directive can be delimited by curly brackets, although this is most useful for #else).

#if( $foo == $bar)it's true!#{else}it's not!#end

Loops

Foreach Loop

The #foreach element allows for looping. For example:

<ul>
#foreach( $product in $allProducts )
    <li>$product</li>
#end
</ul>

This #foreach loop causes the $allProducts list (the object) to be looped over for all of the products (targets) in the list. Each time through the loop, the value from $allProducts is placed into the $product variable.

The contents of the $allProducts variable is a Vector, a Hashtable or an Array. The value assigned to the $product variable is a Java Object and can be referenced from a variable as such. For example, if $product was really a Product class in Java, its name could be retrieved by referencing the $product.Name method (ie: $Product.getName()).

Lets say that $allProducts is a Hashtable. If you wanted to retrieve the key values for the Hashtable as well as the objects within the Hashtable, you can use code like this:

<ul>
#foreach( $key in $allProducts.keySet() )
    <li>Key: $key -> Value: $allProducts.get($key)</li>
#end
</ul>

The Automation Syntax provides an easy way to get the loop counter so that you can do something like the following:

<table>
#foreach( $customer in $customerList )
    <tr><td>$foreach.count</td><td>$customer.Name</td></tr>
#end
</table>

The Automation Syntax also now provides an easy way to tell if you are on the last iteration of a loop:

#foreach( $customer in $customerList )
    $customer.Name#if( $foreach.hasNext ),#end
#end

If you want a zero-based index of the #foreach loop, you can just use $foreach.index instead of $foreach.count. Likewise, $foreach.first and $foreach.last are provided to compliment $foreach.hasNext. If you want to access these properties for an outer #foreach loop, you can reference them directly through the $foreach.parent or $foreach.topmost properties (e.g. $foreach.parent.index or $foreach.topmost.hasNext).

If you want to stop looping in a foreach from within your template, you can now use the #break directive to stop looping at any time:

## list first 5 customers only
#foreach( $customer in $customerList )
    #if( $foreach.count > 5 )
        #break
    #end
    $customer.Name
#end

Include

The #include script element allows the template designer to import a local file, which is then inserted into the location where the #include directive is defined. The contents of the file are not rendered through the Automation Engine. For security reasons, the file to be included may only be under TEMPLATE_ROOT.

#include( "one.txt" )

The file to which the #include directive refers is enclosed in quotes. If more than one file will be included, they should be separated by commas.

#include( "one.gif","two.txt","three.htm" )

The file being included need not be referenced by name; in fact, it is often preferable to use a variable instead of a filename. This could be useful for targeting output according to criteria determined when the page request is submitted. Here is an example showing both a filename and a variable.

#include( "greetings.txt", $seasonalstock )

Parse

The #parse script element allows the template designer to import a local file that contains Automation Syntax. The Automation Engine will parse the script and render the template specified.

#parse( "me.vm" )

Like the #include directive, #parse can take a variable rather than a template. Any templates to which #parse refers must be included under TEMPLATE_ROOT. Unlike the #include directive, #parse will only take a single argument.

Automation Engine templates can have #parse statements referring to templates that in turn have #parse statements.  Recursion is permitted, for example, if the template dofoo.vm contains the following lines:

Count down.
#set( $count = 8 )
#parse( "parsefoo.vm" )
All done with dofoo.vm!

It would reference the template parsefoo.vm, which might contain the following Automation Template:

$count
#set( $count = $count - 1 )
#if( $count > 0 )
    #parse( "parsefoo.vm" )
#else
    All done with parsefoo.vm!
#end

After "Count down." is displayed, the Automation Engine passes through parsefoo.vm, counting down from 8. When the count reaches 0, it will display the "All done with parsefoo.vm!" message. At this point, the Automation Engine will return to dofoo.vm and output the "All done with dofoo.vm!" message.

Break

The #break directive stops any further rendering of the current execution scope. An "execution scope" is essentially any directive with content (i.e. #foreach, #parse, #evaluate, #define, #macro, or #@somebodymacro) or any "root" scope (i.e. template.merge(...). Unlike #stop, #break will only stop the innermost, immediate scope, not all of them.

If you wish to break out of a specific execution scope that is not necessarily the most immediate one, then you can pass the scope control reference (i.e. $foreach, $template, $evaluate, $define, $macro, or $somebodymacro) as an argument to #break. (e.g. #break($macro)). This will stop rendering of all scopes up to the specified one. When within nested scopes of the same type, remember that you can always access the parent(s) via $.parent or $.topmost and pass those to #break instead (e.g. #break($foreach.parent) or #break($macro.topmost)).

Stop

The #stop directive stops any further rendering and execution of the template. This is true even when the directive is nested within another template accessed through #parse or located in a macro. The resulting merged output will contain all the content up to the point the #stop directive was encountered. This is handy as an early exit from a template. For debugging purposes, you may provide a message argument (e.g. #stop('$foo was not in context') ) that will be written to the logs (DEBUG level, of course) upon completion of the stop command.

Evaluate

The #evaluate directive can be used to dynamically evaluate the Automation Template. This allows the template to evaluate a string that is created at render time. Such a string might be used to internationalize the template or to include parts of a template from a database.

The example below will display abc.

#set($source1 = "abc")
#set($select = "1")
#set($dynamicsource = "$source$select")
## $dynamicsource is now the string '$source1'
#evaluate($dynamicsource)

Define

The #define directive lets one assign a block of Automation Template to a reference.

The example below will display Hello World!.

#define( $block )Hello $who#end
#set( $who = 'World!' )
$block

Automation

The Automation is a pervasive aspect of the LogicalDOC platform and represents the way you have to program things using a simple scripting language. Sometimes you wish LogicalDOC to execute your own logic when something special happens during a workflow or in reaction to specific events occurrend inside the repository: with the Automation you can inject your own algorithm to take the proper actions automatically. Many objects support Automation and allow you to define custom Automation's scripts(folders, workflows, emails, etc.)

Please look at the Automation Syntax Guide to familiarize with the syntax. You may also look at the Automation Snippets.

In your automation scripts you can reference the following variables(some of them are only available in certain contexts):

AUTOMATION CONTEXT: GENERAL
VariableJava ClassDescription
nlrepresents the new line
productname of the product
localecurrent locale
CURRENT_DATEcurrent date
tenantIdidentifier of the current tenant
dictionarymap with all the variables(variable_name > value)
keysset of all the keys in the dictionary
parametersmap with all the routine's invocation parameters(parameter_name > value)
parametersnamesset of all the routine's invocation parameters
systemDictionaryA transient and system-wide map useful to store data among automation executions
logLogToolgives access to the system's log
I18NI18NToolhandles the translations
DateToolAutomationDateToolmanipulation and formatting of dates
NumberToolAutomationNumberToolformats a number using the given format
CollectionToolCollectionToolutility methods to work with collections
RegexToolRegexToolfunctions to manipulate regular expressions
DocToolDocToolhandles documents and related resources
FolderToolFolderToolhandles folders and related resources
ClassToolClassToolcreates new instances of the given class
SystemToolSystemToolfunctions for interacting with the Operative System
MailToolMailToolfunctions to send e-mails
BarcodeToolBarcodeToolclass to extract barcode contents from documents
StampToolStampToolapplies stamps into documents
SignToolSignTooldigitally signs a document with the user's digital certificate
AutomationToolAutomationToolexecutes an automation routine in the same execution thread or a new one
ContextToolContextToolmethods to access the Application context
SplitToolSplitToolallows the splitting of a PDF in segments using different policies
SecurityToolSecurityToolhandles some security related operations
WorkflowToolWorkflowToolmethods to handle workflows and interact with them
WebsocketToolWebsocketToolutility functions to interact with the user interface
UserToolUserToolutility methods to handle some user related operations
SearchToolSearchToolutility methods to do searches
FormToolFormToolutility methods to handle forms
ReportToolReportToolutility methods to run custom reports
CalendarToolCalendarTooltool to deal with the calendar

AUTOMATION CONTEXT: EVENTS
VariableJava ClassDescription
eventHistorythe current event
documentDocumentthe document associated to the current event(if any)
folderFolderthe folder associated to the current event(if any)

AUTOMATION CONTEXT: WORKFLOW
VariableJava ClassDescription
candidatesUserlist of the current task's candidate users
documentsDocumentlist of the attached documents
documentDocumentfirst element of the documents list
taskthe current task
taskNamename of the current task
initiatorUserthe user that started the workflow
workflowname of the workflow
processIdidentifier of the current process
definitionIdidentifier of the process definition
actionslist of possible actions(transitions) declared for the current task
actionname of the current action(transition), only available inside the transition
assigneeuser assigned to the current task

AUTOMATION CONTEXT: CUSTOM ID / AUTO NAMING / AUTO FOLDING
VariableJava ClassDescription
documentDocumentthe document being currently saved

AUTOMATION CONTEXT: WELCOME MESSAGE
VariableJava ClassDescription
userUserthe currently logged in user
sessionSessionthe current session

AUTOMATION CONTEXT: DASHLETS
VariableJava ClassDescription
userUserel usuario actualmente conectado
sessionSessionla sesión actual
dashletDashletel objeto dashlet

AUTOMATION CONTEXT: CUSTOM ACTION
VariableJava ClassDescription
userUserthe currently logged in user
sessionSessionVariable
documentDocumentthe selected document
documentsDocumentthe selected documents
folderFolderthe selected folder

AUTOMATION CONTEXT: EMAIL IMPORT
VariableJava ClassDescription
emailEMailthe email being imported
accountEmailAccountthe account from which the email is being imported
messagethe message representation as returned by the mail server
documentDocumentthe document that will be used to save the email in the repository
documentsDocumentlist of documents that will be used to save the email and it's attachments in the repository

AUTOMATION CONTEXT: ZONAL OCR
VariableJava ClassDescription
documentDocumentthe document being processed
samplethe text extracted from the zone
valuethe value object(String, Date, Decimal ...) converted from the sample
zoneZonethe zone being processed, use zone.value if you want to change the value that will be saved in the document

AUTOMATION CONTEXT: EXTERNAL AUTHENTICATION
VariableJava ClassDescription
ldapUserLDAPUserthe user being authenticated

AUTOMATION CONTEXT: NEW DEVICE
VariableJava ClassDescription
userUserthe currently logged in user
deviceDevicethe device used to login
clientClientthe remote client connected to the platform
eventHistorythe login event

AUTOMATION CONTEXT: FORMS
VariableJava ClassDescription
formFormthe form being processed
documentDocumentthe document that contains the metadata

AUTOMATION CONTEXT: WEB FORMS
VariableJava ClassDescription
formFormthe form being processed
templateTemplatethe template associated to the form
senderUserthe sender user
responderemail address of the responder
titlethe title of the web form
descriptiondescription of the web form
footerthe footer of the web form
messagebody of the email message
prefilledMapa map containing pre-filled responses(used when inviting people)

AUTOMATION CONTEXT: STAMPS
VariableJava ClassDescription
stampStampthe stamp being applied
userUserthe user applying the stamp
documentDocumentthe document being stamped
parametersmap with all the parameters inputed by the user(parameter_name > value)
pageIntegerthe current page number
parametersnamesset of all the names of the inputed parameters
DATEcurrent date formatted using the user's locale
TIMESTAMPcurrent timestamp formatted using the user's locale

AUTOMATION CONTEXT: BRANDING
VariableJava ClassDescription
brandingBrandingthe object that represents the branding
requestthe HTTP request being processed
requestPaththe path invoked by the client
userUserthe currently logged in user
sessionSessionthe current session

AUTOMATION CONTEXT: SPLITTING
VariableJava ClassDescription
brandingBrandingthe object that represents the branding
requestthe HTTP request being processed
requestPaththe path invoked by the client
userUserthe currently logged in user
sessionSessionthe current session

AUTOMATION CONTEXT: DIGITAL SIGNATURE
VariableJava ClassDescription
documentDocumentthe document to sign
reasonthe reason specified for the signature
userUserthe user that signs

AUTOMATION CONTEXT: CALENDAR
VariableJava ClassDescription
eventEventthe event in the calendar
reminderReminderthe current reminder

AUTOMATION CONTEXT: VALIDATION
VariableJava ClassDescription
objectExtensibleObjectthe object under validation, for instance a Document or a Folder
eventHistorythe current event
errorsmap of strings. Key is the attribute name, Value is the error description
attributeNamename of the current attribute being validated (only available in attribute validator)
attributeAttributethe current attribute being validated (only available in attribute validator)
valuevalue of the current attribute being validated (only available in attribute validator)
errorValidationErrorkeeps the error description of the current attribute being validated (only available in attribute validator)

AUTOMATION CONTEXT: SEND MAIL
VariableJava ClassDescription
senderUserthe user sending the email message
documentDocumentfirst attached document
documentsDocumentcollection of attached documents