Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Introduction

What are Hash Variable?

English
Hash Variables gives users greater flexibility and freedom in accessing useful information or relevant run-time values from the system.

A hash variable is a special hash-escaped keyword that can be used in :

...

Tip
To conveniently access the list of all hash variables available, use shortcut combination Ctrl -+ Shift -+ in any of the components above to bring up the hash variable assistant.

Image Added


Nested Hash Variable

...

The parsed/returned Hash Variable may cause incompatibility with the current context/environment such as syntax error in a script. Therefore, one may pass in additional parameters into the hash variable declared to escape certain characters. Before ending a hash variable with a hash "#", add a question mark character "?" followed by the required format, for example "#form.table.photo?img2base64#". You may include multiple by defining semicolon ";" separated values.

  1. regex - Used to escape regular expression special characters
  2. json - Used to escape JSON special characters
  3. javascript - Used to escape Javascript special characters
  4. html - Used to escape HTML special characters
  5. xml - Used to escape XML special characters
  6. java - Used to escape Java special characters
  7. sql - Used to escape SQL special characters
  8. url - Used to escape URL special characters
  9. nl2br - Used to convert new line character to <br> HTML tag
  10. separator(SEPARATOR_CHARS) - Used to change the default separator ";" to the SEPARATOR_CHARS. eg. ?separator(, ) resulted "abc, def" instead of "abc;def".
  11. img2base64 - hash variable escape method to convert image tag src in a Rich Text Editor to base64 data string which can be displayed in email (however Gmail does not support Base64).
  12. expression - Used to escape String characters in nested hash variable that may otherwise conflict with syntax/symbols used in the Expression Hash Variable
  13. noescape - Used to escape SQL query strings in JDBC binders to prevent the "<>" "not equal" operator from being converted, i.e. disables XSS prevention checking. (Available from Joget DX 7.0.7 and higher.)

Note: The following escape formats will not be checked for XSS prevention: "regex, json, javascript, html, xml, java, sql, url, expression, noescape".

Code Block
titleExample
#envVariable.script
Code Block
titleExample
#envVariable.script?java#
#envVariable.script?nl2br;json#
#form.table.users?separator(, )#

...

Hash

...

Variable

...

To get workflow activity information of the current assignment.

...

  • #assignment.processId#
  • #assignment.processDefId#
  • #assignment.processDefIdWithoutVersion#
  • #assignment.processName#
  • #assignment.processVersion#
  • #assignment.processRequesterId#
  • #assignment.appId#
  • #assignment.activityId#
  • #assignment.activityName#
  • #assignment.activityDefId#
  • #assignment.assigneeId#

...

  • Elements within and part of a Process.
    1. Activity Name.
    2. Form mapped as part of process activity mapping.
    3. Email Tool configuration as part of process tool mapping.

...

To display the assignee's name:

#user.{assignment.assigneeId}.firstName# #user.{assignment.assigneeId}.lastName#

Return Values

  • If the record does not exist, "#form.table.field#" returns the same = "#form.table.field#". Use the ternary operator ( condition ? exprIfTrue : exprIfFalse ) to check and set to NULL if the return value matches the origin hash variable (if used in BeanShell or Javascript).
  • If record exist but field is empty, "#form.table.field#" returns empty = "".
  • If record exist and field has value "abc", "#form.table.field#" returns the value = "abc".

Hash Variable Features In Joget DX Community Edition

Some hash variables listed below are not available in the Joget Community Edition, read the Detailed Plugin Comparison Between Editions for more information.

List Of Joget DX Hash Variables

Workflow Assignment Hash Variable

NameDescription
Prefixassignment
Description

To get workflow activity information of the current assignment.

Attributes
  • #assignment.processId#
  • #assignment.processDefId#
  • #assignment.processDefIdWithoutVersion#
  • #assignment.processName#
  • #assignment.processVersion#
  • #assignment.processRequesterId#
  • #assignment.appId#
  • #assignment.activityId#
  • #assignment.activityName#
  • #assignment.activityDefId#
  • #assignment.assigneeId#
Scope of Use
  • Elements within and part of a Process.
    1. Activity Name.
    2. Form mapped as part of process activity mapping.
    3. Email Tool configuration as part of process tool mapping.
Sample Attributes

To display the assignee's name:

#user.{assignment.assigneeId}.firstName# #user.{assignment.assigneeId}.lastName#

Workflow Process Hash Variable

Panel
borderColorpurple
titleBGColor#ddccff
borderStylesolid
titleNew in Joget DX

A new #process.recordId# hash variable was introduced in Joget DX to retrieve the process database table id (or primary key value) which will return the UUID id value of the process record stored in app_fd_[form_table_name], if the General Settings > Run Process Primary Key is set to "UUID". If the "Run Process Primary Key" option in General Settings is set to "Process instance ID", the "#process.recordId#" will return the same value as "#process.processId#".

Read related documentation:

NameDescription
Prefixprocess
Description

To retrieve information of a workflow process instance.

Attributes
  • #process.recordId#
  • #process.appId#

  • #process.processId#

  • #process.processDefId#

  • #process.processDefIdWithoutVersion#

  • #process.processName#

  • #process.processVersion#

  • #process.processRequesterId#

  • #process.state#

  • #process.startedTime#

  • #process.limit#

  • #process.due#

  • #process.delay#

  • #process.delayInSeconds#

  • #process.finishTime#

  • #process.timeConsumingFromDateStarted#

  • #process.timeConsumingFromDateStartedInSeconds#

  • #process.

Workflow Process Hash Variable

Panel
borderColorpurple
titleBGColor#ddccff
borderStylesolid
titleNew in Joget DX

A new #process.recordId# hash variable was introduced in Joget DX to retrieve the process database table id (or primary key value) which will return the UUID id value of the process record stored in app_fd_[form_table_name], if the General Settings > Run Process Primary Key is set to "UUID". If the "Run Process Primary Key" option in General Settings is set to "Process instance ID", the "#process.recordId#" will return the same value as "#process.processId#".

Read related documentation:

NameDescription
Prefixprocess
Description

To retrieve information of a workflow process instance.

Attributes
  • #process.recordId#
  • #process.appId#

  • #process.processId#

  • #process.processDefId#

  • #process.processDefIdWithoutVersion#

  • #process.processName#

  • #process.processVersion#

  • #process.processRequesterId#

  • #process.state#

  • #process.startedTime#

  • #process.limit#

  • #process.due#

  • #process.delay#

  • #process.delayInSeconds#

  • #process.finishTime#

  • #process.timeConsumingFromDateStarted#

  • #process.timeConsumingFromDateStartedInSeconds#

  • #process.activityInst.ACTIVITY_DEF_ID.instanceId#

  • #process.activityInst.ACTIVITY_DEF_ID.name#

  • #process.activityInst.ACTIVITY_DEF_ID.status#

  • #process.activityInst.ACTIVITY_DEF_ID.state#

  • #process.activityInst.ACTIVITY_DEF_ID.type#

  • #process.activityInst.ACTIVITY_DEF_ID.startedTime#

  • #process.activityInst.ACTIVITY_DEF_ID.limit#

  • #process.activityInst.ACTIVITY_DEF_ID.limitInSeconds#

  • #process.activityInst.ACTIVITY_DEF_ID.due#

  • #process.activityInst.ACTIVITY_DEF_ID.delay#

  • #process.activityInst.ACTIVITY_DEF_ID.delayInSeconds#

  • #process.activityInst.ACTIVITY_DEF_ID.finishTime#

  • #process.activityInst.ACTIVITY_DEF_ID.timeConsumingFromDateStarted#

  • #process.activityInst.ACTIVITY_DEF_ID.timeConsumingFromDateStartedInSeconds#

  • #process.activityInst.ACTIVITY_DEF_ID.performer#instanceId#

  • #process.activityInst.ACTIVITY_DEF_ID.performerUser#name#

  • #process.activityInst.ACTIVITY_DEF_ID.assignmentUsers#status#

  • #process.appId[PROCESS_INSTANCEactivityInst.ACTIVITY_DEF_ID]#.state#

  • #process.processDefId[PROCESS_INSTANCEactivityInst.ACTIVITY_DEF_ID]#.type#

  • #process.activityInst.processDefIdWithoutVersion[PROCESSACTIVITY_INSTANCEDEF_ID]#.startedTime#

  • #process.processName[PROCESS_INSTANCEactivityInst.ACTIVITY_DEF_ID]#.limit#

  • #process.processVersion[PROCESS_INSTANCEactivityInst.ACTIVITY_DEF_ID]#.limitInSeconds#

  • #process.activityInst.processRequesterId[PROCESSACTIVITY_INSTANCEDEF_ID]#.due#

  • #process.activityInst.startedTime[PROCESSACTIVITY_INSTANCEDEF_ID]#.delay#

  • #process.limit[PROCESS_INSTANCEactivityInst.ACTIVITY_DEF_ID]#.delayInSeconds#

  • #process.due[PROCESS_INSTANCEactivityInst.ACTIVITY_DEF_ID]#.finishTime#

  • #process.delay[PROCESS_INSTANCEactivityInst.ACTIVITY_DEF_ID]#.timeConsumingFromDateStarted#

  • #process.delayInSeconds[PROCESS_INSTANCEactivityInst.ACTIVITY_DEF_ID]#.timeConsumingFromDateStartedInSeconds#

  • #process.finishTime[PROCESS_INSTANCEactivityInst.ACTIVITY_DEF_ID]#.performer#

  • #process.timeConsumingFromDateStarted[PROCESS_INSTANCEactivityInst.ACTIVITY_DEF_ID]##process.timeConsumingFromDateStartedInSeconds[PROCESS_INSTANCE_ID]#.performerUser#

  • #process.activityInst.ACTIVITY_DEF_ID.assignmentUsers#


  • #process.instanceIdappId[PROCESS_INSTANCE_ID]#

  • #process.activityInst.ACTIVITY_DEFprocessDefId[PROCESS_INSTANCE_ID]#

  • #process.nameprocessDefIdWithoutVersion[PROCESS_INSTANCE_ID]#

  • #process.activityInst.ACTIVITY_DEF_ID.statusprocessName[PROCESS_INSTANCE_ID]#

  • #process.activityInst.ACTIVITY_DEF_ID.stateprocessVersion[PROCESS_INSTANCE_ID]#

  • #process.activityInst.ACTIVITY_DEF_ID.typeprocessRequesterId[PROCESS_INSTANCE_ID]#

  • #process.activityInst.ACTIVITY_DEF_ID.startedTime[PROCESS_INSTANCE_ID]#

  • #process.activityInst.ACTIVITY_DEF_ID.limit[PROCESS_INSTANCE_ID]#

  • #process.due[PROCESS_INSTANCE_ID]#

  • #process.delay[PROCESS_INSTANCE_ID]#

  • #process.delayInSeconds[PROCESS_INSTANCE_ID]#

  • #process.finishTime[PROCESS_INSTANCE_ID]#

  • #process.timeConsumingFromDateStarted[PROCESS_INSTANCE_ID]#

  • #process.timeConsumingFromDateStartedInSecondsactivityInst.ACTIVITY_DEF_ID.limitInSeconds[PROCESS_INSTANCE_ID]#

  • #process.activityInst.ACTIVITY_DEF_ID.dueinstanceId[PROCESS_INSTANCE_ID]#

  • #process.activityInst.ACTIVITY_DEF_ID.delayname[PROCESS_INSTANCE_ID]#

  • #process.activityInst.ACTIVITY_DEF_ID.delayInSecondsstatus[PROCESS_INSTANCE_ID]#

  • #process.activityInst.ACTIVITY_DEF_ID.finishTimestate[PROCESS_INSTANCE_ID]#

  • #process.activityInst.ACTIVITY_DEF_ID.timeConsumingFromDateStartedtype[PROCESS_INSTANCE_ID]#

  • #process.activityInst.ACTIVITY_DEF_ID.timeConsumingFromDateStartedInSecondsstartedTime[PROCESS_INSTANCE_ID]#

  • #process.activityInst.ACTIVITY_DEF_ID.performerlimit[PROCESS_INSTANCE_ID]#

  • #process.activityInst.ACTIVITY_DEF_ID.performerUserlimitInSeconds[PROCESS_INSTANCE_ID]#

  • #process.activityInst.ACTIVITY_DEF_ID.assignmentUsersdue[PROCESS_INSTANCE_ID]#

Scope of Use
  • Elements within and part of a Process.
    1. Activity Name.
    2. Form mapped as part of process activity mapping.
    3. Email Tool configuration as part of process tool mapping.
Sample Attributes

To display the performer username of an activity instance of a process instance:

#process.activityInst.assign.performerUser[{assignment.processId}]#

Current User Hash Variable

...

  • #currentUser.id#
  • #currentUser.username#
  • #currentUser.firstName#
  • #currentUser.lastName#
  • #currentUser.email#
  • #currentUser.active#
  • #currentUser.timeZone#
  • #currentUser.locale#
  • #currentUser.roles#

In Joget Enterprise edition, these additional attributes are available:-

User Meta

#currentUser.meta.KEY#
To read additional user meta data stored in dir_user_meta table.
Example: #currentUser.meta.duration#.
Image Removed

Employment

  • #currentUser.employee.code#
  • #currentUser.employee.jobTitle#
  • #currentUser.employee.isHod#

HOD

  • #currentUser.hod.username#
  • #currentUser.hod.firstName#
  • #currentUser.hod.lastName#
  • #currentUser.hod.email#
  • #currentUser.hod.active#
  • #currentUser.hod.timeZone#

Organization

  • #currentUser.organization.id#
  • #currentUser.organization.name#
  • #currentUser.organization.description#

Department

  • #currentUser.department.id#
  • #currentUser.department.name#
  • #currentUser.department.description#

Department HOD

  • #currentUser.department.hod.username#
  • #currentUser.department.hod.firstName#
  • #currentUser.department.hod.lastName#
  • #currentUser.department.hod.email#
  • #currentUser.department.hod.active#
  • #currentUser.department.hod.timeZone#

Grade

  • #currentUser.grade.id#
  • #currentUser.grade.name#
  • #currentUser.grade.description#

Group

  • #currentUser.groups.id#
  • #currentUser.groups.name#
  • #process.activityInst.ACTIVITY_DEF_ID.delay[PROCESS_INSTANCE_ID]#

  • #process.activityInst.ACTIVITY_DEF_ID.delayInSeconds[PROCESS_INSTANCE_ID]#

  • #process.activityInst.ACTIVITY_DEF_ID.finishTime[PROCESS_INSTANCE_ID]#

  • #process.activityInst.ACTIVITY_DEF_ID.timeConsumingFromDateStarted[PROCESS_INSTANCE_ID]#

  • #process.activityInst.ACTIVITY_DEF_ID.timeConsumingFromDateStartedInSeconds[PROCESS_INSTANCE_ID]#

  • #process.activityInst.ACTIVITY_DEF_ID.performer[PROCESS_INSTANCE_ID]#

  • #process.activityInst.ACTIVITY_DEF_ID.performerUser[PROCESS_INSTANCE_ID]#

  • #process.activityInst.ACTIVITY_DEF_ID.assignmentUsers[PROCESS_INSTANCE_ID]#

Scope of Use
  • Elements within and part of a Process.
    1. Activity Name.
    2. Form mapped as part of process activity mapping.
    3. Email Tool configuration as part of process tool mapping.
Sample Attributes

To display the performer username of an activity instance of a process instance:

#process.activityInst.assign.performerUser[{assignment.processId}]#

Current User Hash Variable

NameDescription
PrefixcurrentUser
DescriptionTo retrieve currently logged in user information.  More user hash variables here.
Attributes
  • #currentUser.username#
  • #currentUser.firstName#
  • #currentUser.lastName#
  • #currentUser.fullName#
  • #currentUser.email#
  • #currentUser.active#
  • #currentUser.timeZone#
  • #currentUser.locale#
  • #currentUser.roles#

In Joget Enterprise edition, these additional attributes are available:-

User Meta

  • #currentUser.meta.KEY#
    To read additional user meta data stored in dir_user_meta table.
    Example: #currentUser.meta.duration#.
    Image Added


Employment

  • #currentUser.employee.code#
  • #currentUser.employee.jobTitle#
  • #currentUser.employee.isHod#

HOD

  • #currentUser.hod.username#
  • #currentUser.hod.firstName#
  • #currentUser.hod.lastName#
  • #currentUser.hod.email#
  • #currentUser.hod.active#
  • #currentUser.hod.timeZone#

Organization

  • #currentUser.organization.id#
  • #currentUser.organization.name#
  • #currentUser.organization.description#

Department

  • #currentUser.department.id#
  • #currentUser.department.name#
  • #currentUser.department.description#

Department HOD

  • #currentUser.department.hod.username#
  • #currentUser.department.hod.firstName#
  • #currentUser.department.hod.lastName#
  • #currentUser.department.hod.email#
  • #currentUser.department.hod.active#
  • #currentUser.department.hod.timeZone#

Grade

  • #currentUser.grade.id#
  • #currentUser.grade.name#
  • #currentUser.grade.description#

Group

  • #currentUser.groups.id#
  • #currentUser.groups.name#

...

  • All components within the App.

Date Hash Variable  

INPUT_DATE_VALUE accepts any date value and even nested hash variables, e.g: form data hash variable. See example in sample attributes below.

INPUT_VALUE_FORMAT is the INPUT_DATE_VALUE original format.

DATE_FORMAT_TO defines the format to change to.
NameDescription
Prefixdate
Description

To get date time according to a specified format.

Info
titleLocalization

The returned value would follow current logged in user's timezone. If user's information is not available, then it will use server's timezone.

Attributes
  • #date.dateFormat#
  • #date.dateUnit[+-]integerValue.dateFormat#

    Info
    titleOptions

    dateFormat

    • In Java date format; e.g., yyyy-MM-dd for 2011-06-01

    dateUnit

    • YEAR
    • MONTH
    • DAY

    integerValue

    • Numeric integer value. E.g. 10
  • #date.DATE_FORMAT_TO[INPUT_DATE_VALUE | INPUT_VALUE_FORMAT]#

  • #date.dateUnit[+-]integerValue.DATE_FORMAT_TO[INPUT_DATE_VALUE | INPUT_VALUE_FORMAT]#

Info
Scope of Use
  • All components within the App.
Sample Attributes

#date.h:mm a# // shows current time of 12:08 PM

#date.EEE,d MMM yyyy h:mm:ss a# // shows current date time of Wed, 4 Jul 2014 12:08:56 PM

#date.DAY+7.EEE,d MMM yyyy h:mm:ss a# // Add 7 days on top of current date time - Wed, 11 Jul 2014 12:08:56 PM

#date.DAY-1.EEE,d MMM yyyy h:mm:ss a# // Minus 1 days on top of current date time - Wed, 3 Jul 2014 12:08:56 PM

#date.dd-MM-yyyy[{form.j_expense_claim.title}|yyyy-MM-dd]# // Retrieves date from j_expense_claim table, form field title, changes its origin format of yyyy-MM-dd to dd-MM-yyyy.

Environment Variable Hash Variable  

...

To retrieve Environment Variable values.

...

  • #envVariable.keyName #

...

  • Anywhere within the Joget app itself. (i.e. Process, Process Tool, Form, List, Userview)

...

#envVariable.smtpPort#

Form Data Hash Variable  

...

To get field value from form table.

...

  • #form.tableName.fieldId #
  • #form.tableName.fieldId [recordId]# (Available in 3.1 and above)

...

  • In a Process Tool part of a Process.
  • In a Form.
  • In a process design.

...

#form.registration.registeredDate[ 0001 ]# //0001 is the record ID to seek for
#form.registration.registeredDate[{variable.recordId}]# //using nested Hash Variable with curly bracket.

Date Hash Variable  

NameDescription
Prefixdate
Description

To get date time according to a specified format.

Info
titleLocalization

The returned value would follow current logged in user's timezone. If user's information is not available, then it will use server's timezone.

Attributes
  • #date.dateFormat#
  • #date.dateUnit[+-]integerValue.dateFormat#

  • #date.dateFormat|TZ# A new feature in Joget DX v7.0.8 to display the date time adjusted based on the Coordinated Universal Time (UTC) timezone value (0 to 12), for example, "#date.yyyy-MM-dd HH:mm|5#" will display the current date time based on UTC plus 5 hours. Read Display Date Time Based On UTC.


Info
titleOptions

dateFormat

  • In Java date format; e.g., yyyy-MM-dd for 2011-06-01

dateUnit

  • YEAR
  • MONTH
  • DAY

integerValue

  • Numeric integer value. E.g. 10


  • #date.DATE_FORMAT_TO[INPUT_DATE_VALUE| INPUT_VALUE_FORMAT]#

  • #date.dateUnit[+-]integerValue.DATE_FORMAT_TO[INPUT_DATE_VALUE| INPUT_VALUE_FORMAT]#

Info

INPUT_DATE_VALUE accepts any date value and even nested hash variables, e.g: form data hash variable. See example in sample attributes below.

INPUT_VALUE_FORMAT is the INPUT_DATE_VALUE original format.

DATE_FORMAT_TO defines the format to change to.

The above date hash with format control will use the login user's time zone setting and automatically adjust the date and time. If the user's time zone setting is blank, it wil revert to the System Settings "System Time Zone" property. If you want to perform a date formatting without using the time zone value, download and import the Date Formatter Hash Variable plugin from Joget Marketplace.

Scope of Use
  • All components within the App.
Sample Attributes

#date.h:mm a# // shows current time of 12:08 PM

#date.EEE,d MMM yyyy h:mm:ss a# // shows current date time of Wed, 4 Jul 2014 12:08:56 PM

#date.DAY+7.EEE,d MMM yyyy h:mm:ss a# // Add 7 days on top of current date time - Wed, 11 Jul 2014 12:08:56 PM

#date.DAY-1.EEE,d MMM yyyy h:mm:ss a# // Minus 1 days on top of current date time - Wed, 3 Jul 2014 12:08:56 PM

#date.dd-MM-yyyy[{form.j_expense_claim.title}|yyyy-MM-dd]# // Retrieves date from j_expense_claim table, form field title, changes its origin format of yyyy-MM-dd to dd-MM-yyyy.

Environment Variable Hash Variable  

NameDescription
PrefixenvVariable
Description

To retrieve Environment Variable values.

Attributes
  • #envVariable.keyName #
Scope of Use
  • Anywhere within the Joget app itself. (i.e. Process, Process Tool, Form, List, Userview)
Sample Attributes#envVariable.smtpServer#
#envVariable.smtpPort#

Form Data Hash Variable  

NameDescription
Prefixform
Description

To get field value from form table.

Attributes
  • #form.tableName.fieldId #
  • #form.tableName.fieldId[recordId]# (Available in v3.1 and above) where "recordid" is a reserved variable used by Joget to retrieve the subform's id.

Form Binder Hash Variable

NameDescription
Prefixbinder
Description

To get field value or field value label from the binder of a form via its form definition id .

The 'binder' prefix retrieves the field value, while the 'binder.options' prefix retrieves the lookup field (eg. select box, checkbox & radio button) option label.

The field value or field value label can also be obtained from other apps by including the APP_ID, else it uses the current app context.

By providing the PRIMARY_KEY argument, field value or field value label from a different record can be retrieved, else data from the current record id is retrieved instead.

Attributes
  • #binder.APP_ID.FORM_DEF_ID.FIELD_ID#
  • #binder.APP_ID.FORM_DEF_ID.FIELD_ID[PRIMARY_KEY]#
  • #binder.FORM_DEF_ID.FIELD_ID#
  • #binder.FORM_DEF_ID.FIELD_ID[PRIMARY_KEY]#
  • #binder.options.APP_ID.FORM_DEF_ID.FIELD_ID#
  • #binder.options.APP_ID.FORM_DEF_ID.FIELD_ID[PRIMARY_KEY]#
  • #binder.options.FORM_DEF_ID.FIELD_ID#
  • #binder.options.FORM_DEF_ID.FIELD_ID[PRIMARY_KEY]#
Scope of Use
  • In a Process Tool part of a Process.
  • In a Form.
  • In a process design.
Sample Attributes#binder#form.addCard.title#

#binder.cardViewer.addCard.title#

#binder.cardViewer.addCard.title[b30bce20-c0a82095-14976e70-fded1735]#

#binder.options.addCard.title#

#binder.options.cardViewer.addCard.title#

#binder.options.cardViewer.addCard.title[b30bce20-c0a82095-14976e70-fded1735]#

...

tableName.registeredDate# // Will use the current record ID
#form.tableName.registeredDate[0001]# // Where 0001 is the record ID to seek for
#form.tableName.registeredDate[{variable.varId}]# // Using nested Hash Variable with curly bracket.
#form.tableName.fieldId[{recordId}]# // For use in Subform Repeater to retrieve the subform's child id.

Form Binder Hash Variable

NameDescription
PrefixappDefbinder
Description

To retrieve App Definition information

Attributes
  • #appDef.appId#

  • #appDef.dateCreated#

  • #appDef.dateModified#

  • #appDef.version#

  • #appDef.license#

  • #appDef.name#

  • #appDef.published#

Scope of Use
  • All components within the App.
Sample Attributes

To display the app definition name:

#appDef.name#

App Message Hash Variable (Internationalization)  

...

To support language localization on application level.

...

  • #i18n.keyName#

...

  • All components within the App.

...

#i18n.logout#

Image Removed

...

Performer Hash Variable  

...

To get user information of the performer of an activity.

...

  • #performer.activityDefId.id#
  • #performer.activityDefId.username#
  • #performer.activityDefId.firstName#
  • #performer.activityDefId.lastName#
  • #performer.activityDefId.email#
  • #performer.activityDefId.active#
  • #performer.activityDefId.timeZone#

...

  • Elements within and part of a Process.
    1. Activity Name.
    2. Form mapped as part of process activity mapping.
    3. Email Tool configuration as part of process tool mapping.
Info

To get activityDefId (activity definition ID), mouseover the activity name in the Activity Mapping tab (Workflow Management Console); there will be an overlay showing the ID.

Warning

The activity chosen must had already been performed.

...

  • #performer.runProcess.firstName#
  • #performer.submitLeave.firstName#

get field value or field value label from the binder of a form via its form definition id .

The 'binder' prefix retrieves the field value, while the 'binder.options' prefix retrieves the lookup field (eg. select box, checkbox & radio button) option label.

The field value or field value label can also be obtained from other apps by including the APP_ID, else it uses the current app context.

By providing the PRIMARY_KEY argument, field value or field value label from a different record can be retrieved, else data from the current record id is retrieved instead.

Attributes
  • #binder.APP_ID.FORM_DEF_ID.FIELD_ID#
  • #binder.APP_ID.FORM_DEF_ID.FIELD_ID[PRIMARY_KEY]#
  • #binder.FORM_DEF_ID.FIELD_ID#
  • #binder.FORM_DEF_ID.FIELD_ID[PRIMARY_KEY]#
  • #binder.options.APP_ID.FORM_DEF_ID.FIELD_ID#
  • #binder.options.APP_ID.FORM_DEF_ID.FIELD_ID[PRIMARY_KEY]#
  • #binder.options.FORM_DEF_ID.FIELD_ID#
  • #binder.options.FORM_DEF_ID.FIELD_ID[PRIMARY_KEY]#
Scope of Use
  • In a Process Tool part of a Process.
  • In a Form.
  • In a process design.
Sample Attributes

#binder.addCard.title#

#binder.cardViewer.addCard.title#

#binder.cardViewer.addCard.title[b30bce20-c0a82095-14976e70-fded1735]#

#binder.options.addCard.title#

#binder.options.cardViewer.addCard.title#

#binder.options.cardViewer.addCard.title[b30bce20-c0a82095-14976e70-fded1735]#

App Definition Hash Variable

NameDescription
PrefixappDef
Description

To retrieve App Definition information

Attributes
  • #appDef.appId#

  • #appDef.dateCreated#

  • #appDef.dateModified#

  • #appDef.version#

  • #appDef.license#

  • #appDef.name#

  • #appDef.published#

  • #appDef.description# (Properties & Export > Notes)
Scope of Use
  • All components within the App.
Sample Attributes

To display the app definition name:

#appDef.name#

App Message Hash Variable (Internationalization)  

NameDescription
Prefixi18n
Description

To support language localization on application level.

Attributes
  • #i18n.keyName#

Request Parameter Hash Variable  

NameDescription
PrefixrequestParam
Description

To access request parameter' values.

Attributes
  • #requestParam.parameterName[separator]#
  • Separator (, or ;) can be indicated if requestParam is used in datalist filter with multiple values, to define the separator character in data output. Comma "," is used as default if no separator is indicated in cases of multiple values.
Scope of Use
  • All components within the App.
Sample Attributes
  • #requestParam.key# can be used specifically to obtain Userview Key value.
  • #requestParam.name[;]# to indicate 'name' variable will store multiple values separated by semicolon. For example, this SQL statement "select * from expenses where title in (#requestParam.title[,]#)" will be translated to "select * from expenses where title in (a,b,c)" to cater for multiple values in "where-in" statement.
  • In a Userview page, one may access the following attributes.
    • #requestParam.key#
    • #requestParam.userviewId#
    • #requestParam.menuId#
    • #requestParam.appId#
  • #requestParam.primaryKey# can be used to retrieve the value passed into Ajax Subforms. For example, when a select box is selected, the id value will be passed into the Ajax Subform and you can use the #requestParam.primaryKey# in JDBC SQL Where clause.

User Hash Variable  

...

To get user information based on username.

...

  • #user.username.id#
  • #user.username .username#
  • #user.username.firstName#
  • #user.username.lastName#
  • #user.username.email#
  • #user.username.active#
  • #user.username.timeZone#

In Joget Enterprise edition, these additional attributes are available:-

User Meta

  • #user.username.meta.KEY#
    To read additional user meta data stored in dir_user_meta table.
    Example: #user.cat.meta.duration# will return the value "100".
    Image Removed

Organization

  • #user.username.organization.id#
  • #user.username.organization.name#
  • #user.username.organization.description#

Department

  • #user.username.department.id#
  • #user.username.department.name#
  • #user.username.department.description#

Grade

  • #user.username.grade.id#
  • #user.username.grade.name#
  • #user.username.grade.description#
  • #user.username.grade.organizationId#

HOD

  • #user.username.hod.username#
  • #user.username.hod.firstName#
  • #user.username.hod.lastName#
  • #user.username.hod.email#
  • #user.username.hod.active#
  • #user.username.hod.timeZone#

Group

  • #user.username.groups.id#
  • #user.username.groups.name#

Employment

  • #user.username.employee.code#
  • #user.username.employee.jobTitle#
  • #user.username.employee.isHod#

Department HOD

  • #user.username.department.hod.username#
  • #user.username.department.hod.firstName#
  • #user.username.department.hod.lastName#
  • #user.username.department.hod.email#
  • #user.username.department.hod.active#
  • #user.username.department.hod.timeZone#

...

  • All components within the App.

...

  • #user.admin.email#
  • #user.cat.firstName#
  • #user.{requestParam.username}.email# to retrieve the email address of the user passed via url parameter

#i18n.logout#

Image Added

ExamplePlease see Add Message.

Performer Hash Variable  

NameDescription
Prefixperformer
Description

To get user information of the performer of an activity.

Attributes
  • #performer.activityDefId.id#
  • #performer.activityDefId.username#
  • #performer.activityDefId.firstName#
  • #performer.activityDefId.lastName#
  • #performer.activityDefId.email#
  • #performer.activityDefId.active#
  • #performer.activityDefId.timeZone#
Scope of Use
  • Elements within and part of a Process.
    1. Activity Name.
    2. Form mapped as part of process activity mapping.
    3. Email Tool configuration as part of process tool mapping.
Info

To get activityDefId (activity definition ID), mouseover the activity name in the Activity Mapping tab (Workflow Management Console); there will be an overlay showing the ID.

Warning

The activity chosen must had already been performed.

Sample Attributes
  • #performer.runProcess.firstName#
  • #performer.submitLeave.firstName#

Request Parameter Hash Variable  

NameDescription
PrefixrequestParam
Description

To access request parameter' values.

Attributes
  • #requestParam.parameterName[separator]#
  • Separator (, or ;) can be indicated if requestParam is used in datalist filter with multiple values, to define the separator character in data output. Comma "," is used as default if no separator is indicated in cases of multiple values.
Scope of Use
  • All components within the App.
Sample Attributes
  • #requestParam.key# can be used specifically to obtain Userview Key value.
  • #requestParam.name[;]# to indicate 'name' variable will store multiple values separated by semicolon. For example, this SQL statement "select * from expenses where title in (#requestParam.title[,]#)" will be translated to "select * from expenses where title in (a,b,c)" to cater for multiple values in "where-in" statement.
  • In a Userview page, one may access the following attributes.
    • #requestParam.key#
    • #requestParam.userviewId#
    • #requestParam.menuId#
    • #requestParam.appId#
  • #requestParam.primaryKey# can be used to retrieve the value passed into Ajax Subforms. For example, when a select box is selected, the id value will be passed into the Ajax Subform and you can use the #requestParam.primaryKey# in JDBC SQL Where clause.

User Hash Variable  

NameDescription
Prefixuser
Description

To get user information based on username.

Replace the username below in red with the actual username (example admin) or {currentUser.username}.

Attributes
  • #user.username.username#
  • #user.username.firstName#
  • #user.username.lastName#
  • #user.username.fullName#
  • #user.username.email#
  • #user.username.active#
  • #user.username.timeZone#

In Joget Enterprise edition, these additional attributes are available:-

User Meta

  • #user.username.meta.KEY#
    To read additional user meta data stored in dir_user_meta table.
    Example: #user.cat.meta.duration# will return the value "100".
    Image Added

Organization

  • #user.username.organization.id#
  • #user.username.organization.name#
  • #user.username.organization.description#

Department

  • #user.username.department.id#
  • #user.username.department.name#
  • #user.username.department.description#

Grade

  • #user.username.grade.id#
  • #user.username.grade.name#
  • #user.username.grade.description#
  • #user.username.grade.organizationId#

HOD

  • #user.username.hod.username#
  • #user.username.hod.firstName#
  • #user.username.hod.lastName#
  • #user.username.hod.email#
  • #user.username.hod.active#
  • #user.username.hod.timeZone#

Group

  • #user.username.groups.id#
  • #user.username.groups.name#

Employment

  • #user.username.employee.code#
  • #user.username.employee.jobTitle#
  • #user.username.employee.isHod#

Department HOD

  • #user.username.department.hod.username#
  • #user.username.department.hod.firstName#
  • #user.username.department.hod.lastName#
  • #user.username.department.hod.email#
  • #user.username.department.hod.active#
  • #user.username.department.hod.timeZone#

Userview Key Hash Variable  

...

Userview Key Hash Variable is used solely for the purpose of accessing the current Userview key's value.

Typical use case for this hash variable are:-

  • Filtering a Datalist based on Userview Key.
  • Preloading certain form data field (e.g. subform) in a Form or Form part of a process flow based on Userview Key.

...

  • #userviewKey#

...

Workflow Variable Hash Variable

...

To get the value of a workflow variable in a Process Flow.

...

  • #variable.variableName#

...

  • Elements within and part of a Process.
    1. Activity Name.
    2. Form mapped as part of process activity mapping.
    3. Email Tool configuration as part of process tool mapping.

...

Request Hash Variable

NameDescription
Prefixrequest
Description

To get the value from the current HttpServletRequest object of the page view.

Attributes
  • #request.characterEncoding#
  • #request.contextPath#
  • #request.header.NAME# , where NAME is the custom header name.
  • #request.locale#
  • #request.method#
  • #request.pathInfo#
  • #request.protocol#
  • #request.queryString#
  • #request.remoteAddr#
  • #request.requestURI#
  • #request.requestURL#
  • #request.requestedSessionId#
  • #request.scheme#
  • #request.serverName#
  • #request.serverPort#
  • #request.servletPath#
Scope of Use
  • All components within the App where there is valid HttpServletRequest object. Such object will not be available in background activity such as in Process Tool triggered as a result of Deadlines.
Sample Attributes

Image Removed

To retrieve the "Referer" header attribute value in the screenshot above, one may use the following hash variable.

Code Block
titleHash Variable
#request.header.Referer#

...

  • #user.admin.groups.name#
  • #user.{currentUser.username}.groups.name#
  • #user.admin.email#
  • #user.{currentUser.username}.email#
  • #user.cat.firstName#
  • #user.{requestParam.username}.email# to retrieve the email address of the user passed via url parameter

Userview Key Hash Variable  

NameDescription
PrefixplatformuserviewKey
DescriptionTo retrieve platform specific information.  
Attributes
  • #platform.name#

  • #platform.version#

  • #platform.jdbcDriver#

  • #platform.setting.dataFileBasePath#

  • #platform.setting.deadlineCheckerInterval#

  • #platform.setting.defaultUserview#

  • #platform.setting.fileSizeLimit#

  • #platform.setting.landingPage#

  • #platform.setting.systemDateFormat#

  • #platform.setting.systemLocale#

  • #platform.setting.systemTimeZone# 

Attributes For SMTP
  • #platform.setting.smtpHost#
  • #platform.setting.smtpPort#
  • #platform.setting.smtpSecurity#
  • #platform.setting.smtpUsername#
  • #platform.setting.smtpPassword#
  • #platform.setting.smtpEmail#
Additional attributes for
Joget Enterprise &
Professional editions
  • #platform.license.name#

  • #platform.license.holder#

  • #platform.license.users#

  • #platform.license.appLimit#

  • #platform.license.expiry#

  • #platform.license.activated#

  • #platform.systemKey#

Scope of Use
  • All components within the App.

Users Hash Variable

Userview Key Hash Variable is used solely for the purpose of accessing the current Userview key's value.

Typical use case for this hash variable are:-

  • Filtering a Datalist based on Userview Key.
  • Preloading certain form data field (e.g. subform) in a Form or Form part of a process flow based on Userview Key.
Attributes
  • #userviewKey#
Scope of Use

Workflow Variable Hash Variable

NameDescription
Prefixvariable
Description

To get the value of a workflow variable in a Process Flow.

Attributes
  • #variable.variableName#
Scope of Use
  • Elements within and part of a Process.
    1. Activity Name.
    2. Form mapped as part of process activity mapping.
    3. Email Tool configuration as part of process tool mapping.
Sample Attributes#variable.approvalStatus#

Request Hash Variable

NameDescription
Prefixrequest
Description

To get the value from the current HttpServletRequest object of the page view.

Attributes
  • #request.domainURL# Short syntax to retrieve the URL scheme and host name, for example "http://localhost:8080". (Available from Joget DX v7.0.8 and higher.)
  • #request.baseURL# Short syntax to retrieve the URL scheme, for example "http://localhost:8080/jw". (Available from Joget DX v7.0.8 and higher.)
  • #request.characterEncoding#
  • #request.contextPath#
  • #request.header.NAME# , where NAME is the custom header name.
  • #request.locale#
  • #request.method#
  • #request.pathInfo#
  • #request.protocol#
  • #request.queryString#
  • #request.remoteAddr#
  • #request.requestURI#
  • #request.requestURL#
  • #request.requestedSessionId#
  • #request.scheme#
  • #request.serverName#
  • #request.serverPort#
  • #request.servletPath#
Scope of Use
  • All components within the App where there is valid HttpServletRequest object. Such object will not be available in background activity such as in Process Tool triggered as a result of Deadlines.
Sample Attributes

Image Added

To retrieve the "Referer" header attribute value in the screenshot above, one may use the following hash variable.

Code Block
titleHash Variable
#request.header.Referer#

See following example of retrieving a Joget APP URL using the Request Hash Variable.

Code Block
languagetext
titleRequest Hash Variable for an App's URL
#request.scheme#://#request.serverName#:#request.serverPort##request.contextPath#/web...

Platform Hash Variable

NameDescription
Prefixplatform
DescriptionTo retrieve platform specific information.  
Attributes
  • #platform.name#

  • #platform.version#

  • #platform.jdbcDriver#

  • #platform.setting.dataFileBasePath#

  • #platform.setting.deadlineCheckerInterval#

  • #platform.setting.defaultUserview#

  • #platform.setting.fileSizeLimit#

  • #platform.setting.landingPage#

  • #platform.setting.systemDateFormat#

  • #platform.setting.systemLocale#

  • #platform.setting.systemTimeZone# 

Attributes For SMTP
  • #platform.setting.smtpHost#
  • #platform.setting.smtpPort#
  • #platform.setting.smtpSecurity#
  • #platform.setting.smtpUsername#
  • #platform.setting.smtpPassword#
  • #platform.setting.smtpEmail#
Additional attributes for
Joget Enterprise &
Professional editions
  • #platform.license.name#

  • #platform.license.holder#

  • #platform.license.users#

  • #platform.license.appLimit#

  • #platform.license.expiry#

  • #platform.license.activated#

  • #platform.systemKey#

Scope of Use
  • All components within the App.

Users Hash Variable

NameDescription
Prefixusers
DescriptionTo retrieve information of all the users in the selected group, grade, department and organization. Multiple results will be separated by semicolon. 
Attributes
  • #users.group.GROUP_ID.username#

  • #users.group.GROUP_ID.firstName#

  • #users.group.GROUP_ID.lastName#

  • #users.group.GROUP_ID.fullName#

  • #users.group.GROUP_ID.email#

  • #users.grade.GRADE_ID.username#

  • #users.grade.GRADE_ID.firstName#

  • #users.grade.GRADE_ID.lastName#

  • #users.grade.GRADE_ID.fullName#

  • #users.grade.GRADE_ID.email#

  • #users.department.DEPARTMENT_ID.username#

  • #users.department.DEPARTMENT_ID.firstName#

  • #users.department.DEPARTMENT_ID.lastName#

  • #users.department.DEPARTMENT_ID.fullName#

  • #users.department.DEPARTMENT_ID.email#

  • #users.organization.ORGANIZATION_ID.username#

  • #users.organization.ORGANIZATION_ID.firstName#

  • #users.organization.ORGANIZATION_ID.lastName#

  • #users.organization.ORGANIZATION_ID.fullName#

  • #users.organization.ORGANIZATION_ID.email#

Scope of Use
  • All components within the App.
Sample Attributes

To return all the users in the current user's groups id:

Bean Shell Hash Variable

NameDescription
Prefixbeanshell
DescriptionUsing environment variable to execute bean shell script. Passing parameter using URL query string syntax.
Attributes
  • #beanshell.ENVIRONMENT_VARIABLE#

  • #beanshell.ENVIRONMENT_VARIABLE[PARAMETERS_URL_QUERY_STRING]#

Scope of Use
  • All components within the App.
Sample Attributes

To execute a script stored in "welcome" environment variable with parameter "username" and "dept":

Code Block
languagejava
if (username != null && username.length == 1 && !username[0].isEmpty()) {
       return "Welcome " + username[0] + " (" + dept[0] + "),";
} else {
       return "";
}
Related Tutorials

Datalist Hash Variable (New)

Panel
borderColorpurple
borderWidth1
titleBGColor#ddccff
borderStylesolid
titleNew Feature

This is a new feature in Joget DX.

NameDescription
Prefixdatalist
DescriptionTo display the datalist records in a grid format in your form or email tool.
Attributes
  • #datalist.html.ID#
  • #datalist.csv.ID#
  • #datalist.size.ID# = Size returns only the number of records based on Datalist filter.
  • #datalist.total.ID# = Total returns the record count regardless of Datalist filter.
  • #datalist.html.ID[FILTER_PARAM1=FILTER_VALUE1&FILTER_PARAM2=FILTER_VALUE2]#
  • #datalist.csv.ID[FILTER_PARAM1=FILTER_VALUE1&FILTER_PARAM2=FILTER_VALUE2]#
  • #datalist.size.ID[FILTER_PARAM1=FILTER_VALUE1&FILTER_PARAM2=FILTER_VALUE2]#
  • #datalist.total.ID[FILTER_PARAM1=FILTER_VALUE1&FILTER_PARAM2=FILTER_VALUE2]#
NameDescription
Prefixusers
DescriptionTo retrieve information of all the users in the selected group, grade, department and organization. Multiple results will be separated by semicolon. 
Attributes
  • #users.group.GROUP_ID.username#

  • #users.group.GROUP_ID.firstName#

  • #users.group.GROUP_ID.lastName#

  • #users.group.GROUP_ID.fullName#

  • #users.group.GROUP_ID.email#

  • #users.grade.GRADE_ID.username#

  • #users.grade.GRADE_ID.firstName#

  • #users.grade.GRADE_ID.lastName#

  • #users.grade.GRADE_ID.fullName#

  • #users.grade.GRADE_ID.email#

  • #users.department.DEPARTMENT_ID.username#

  • #users.department.DEPARTMENT_ID.firstName#

  • #users.department.DEPARTMENT_ID.lastName#

  • #users.department.DEPARTMENT_ID.fullName#

  • #users.department.DEPARTMENT_ID.email#

  • #users.organization.ORGANIZATION_ID.username#

  • #users.organization.ORGANIZATION_ID.firstName#

  • #users.organization.ORGANIZATION_ID.lastName#

  • #users.organization.ORGANIZATION_ID.fullName#

  • #users.organization.ORGANIZATION_ID.email#
Scope of Use
  • All components within the App.
Sample Attributes

To return all the users in the current user's groups id:

Bean Shell Hash Variable

...

  • #beanshell.ENVIRONMENT_VARIABLE#

  • #beanshell.ENVIRONMENT_VARIABLE[PARAMETERS_URL_QUERY_STRING]#

...

  • All components within the App.

...

To execute a script stored in "welcome" environment variable with parameter "username" and "dept":

Code Block
languagejava
if (username != null && username.length == 1 && !username[0].isEmpty()) {
       return "Welcome " + username[0] + " (" + dept[0] + "),";
} else {
       return "";
}

...

  • #datalist.html.myDataList#
  • #datalist.csv.ImyDataList#
  • #datalist.size.ImyDataList# = Size returns only the number of records based on Datalist filter.
  • #datalist.total.ImyDataList# = Total returns the record count regardless of Datalist filter.
  • #datalist.html.myDataList[d-8015999-fn_name=James&d-6304176-fn_email=james@gmail.com]#
  • #datalist.csv.myDataList[d-8015999-fn_name=James&d-6304176-fn_email=james@gmail.com]#
  • #datalist.size.myDataList[d-8015999-fn_name=James&d-6304176-fn_email=james@gmail.com]#
  • #datalist.total.myDataList[d-8015999-fn_name=James&d-6304176-fn_email=james@gmail.com]#
  • #datalist.html.list_f1[d-1338250-fn_id={process.recordId}]#
  • #datalist.html.listId[filterId={form.table.field[{envVariable.variableId}]}]#

Expression

...

Hash Variable (New)

Panel
borderColorpurple
borderWidth1
titleBGColor#ddccff
borderStylesolid
titleNew Feature

This is a new feature in Joget DX.

NameDescription
Prefixdatalist
DescriptionTo display the datalist records in a grid format in your form or email tool.
exp
DescriptionMathematical and string operations on hash variables
Attributes#exp.variable#Attributes
  • #datalist.html.ID#
  • #datalist.csv.ID#
  • #datalist.html.ID[FILTER_PARAM1=FILTER_VALUE1&FILTER_PARAM2=FILTER_VALUE2]#
  • #datalist.csv.ID[FILTER_PARAM1=FILTER_VALUE1&FILTER_PARAM2=FILTER_VALUE2]#
    Scope of Use
    • All components within the App.
    Sample Attributes
    • #datalist.html.myDataList#
    • #datalist.csv.ImyDataList#
    • #datalist.html.myDataList[name=James&email=james@gmail.com]#
    • #datalist.csv.myDataList[name=James&email=james@gmail.com]#

    Expression Hash Variable (New)

    Panel
    borderColorpurple
    borderWidth1
    titleBGColor#ddccff
    borderStylesolid
    titleNew Feature

    This is a new feature in Joget DX.

    Testing Values

    • #envVariable.num1# = 55
    • #envVariable.num2# = 288
    • #envVariable.double1# = 123.45
    • #envVariable.double2# = 246.78
    • #envVariable.bool1# = true
    • #envVariable.bool2# = false
    • #envVariable.str1# = Hello World!
    • #envVariable.str2# = Using Joget Hash Variables!
    • #envVariable.empty# =
    • #envVariable.hashVariable# = #assignment.processId#

    Mathematical operators

    • #exp.{envVariable.num1} + {envVariable.num2}# = 343
    • #exp.{envVariable.num1} - {envVariable.num2}# = -233
    • #exp.{envVariable.double1} * {envVariable.double2}# = 30464.991
    • #exp.{envVariable.num2} / {envVariable.num1}# = 5
    • #exp.{envVariable.num1} % 7# = 6
    • #exp.({envVariable.num1} + 2) * 2# = 114
    • #exp.{envVariable.num1} + 2 * 2# = 59
    • #exp.2 ^ 2# = 4

    Logical

    NameDescription
    Prefix{hash variable}
    DescriptionMathematical and string operations on hash variables
    Attributes#exp.variable#
    Scope of Use
    • All components within the App.
    Sample Attributes

    Testing Values

    • #envVariable.num1# = 55
    • #envVariable.num2# = 288
    • #envVariable.double1# = 123.45
    • #envVariable.double2# = 246.78
    • #envVariable.bool1# = true
    • #envVariable.bool2# = false
    • #envVariable.str1# = Hello World!
    • #envVariable.str2# = Using Joget Hash Variables!
    • #envVariable.empty# =
    • #envVariable.hashVariable# = #assignment.processId#

    Mathematical operators

    • #exp.{envVariable.num1bool1} + and {envVariable.num2bool2}# = 343false
    • #exp.{envVariable.num1bool1} - or {envVariable.num2bool2}# = -233true
    • #exp.!{envVariable.double1} * {envVariable.double2bool1}# = 30464.991#exp.false

    Relational operators

    • #{envVariable.num2num1} / gt {envVariable.num1num2}# = 5false
    • #exp.#{envVariable.num1} % 7# = 6#exp.(ge {envVariable.num1} + 2) * 2# = 114#exp.# = true
    • #{envVariable.num1} + 2 * 2# = 59
    • #exp.2 ^ 2# = 4

    Logical operators

    • lt {envVariable.num2}# = true
    • ##exp.{envVariable.bool1num1} and le {envVariable.bool2num1}# = falsetrue#exp.
    • #{envVariable.bool1num1} or eq {envVariable.bool2num1}# = true
    • #exp.!#{envVariable.num1} ne {envVariable.bool1num1}# = false

    Relational operators

    Ternary Operator (If Else)

    • #exp.(#{envVariable.num1} gt lt {envVariable.num2}# = false#)?{envVariable.num1} ge :{envVariable.num1num2}#= true55
    • #{envVariable.num1} lt {envVariable.num2}# = true
    • #{envVariable.num1} le {envVariable.num1}# = true
    • #{envVariable.num1} eq {envVariable.num1}# = true
    • #{envVariable.num1} ne {envVariable.num1}# = false

    Ternary Operator (If Else)

    • #exp.'{envVariable.empty?expression}'.isEmpty()?'empty':'has value'#= empty

    String methods

    Note: Basically most of the String methods can be used, using `?expression` to escape single quote in value.

    • #exp.'{envVariable.str1?expression}' + ' ' + '{envVariable.str2?expression}'# = Hello World! Using Joget Hash Variables
    • #exp.'{envVariable.str1?expression}'.substring(5)# = World!
    • #exp.'{envVariable.str1?expression}'.toLowerCase()# = hello world!
    • #exp.'{envVariable.str1?expression}'.toUpperCase()# = HELLO WORLD!#exp.({envVariable.num1} lt {envVariable.num2})?{envVariable.num1}:{envVariable.num2}#= 55
    • #exp.'{envVariable.emptystr1?javascriptexpression}'.isEmptyreplace()?'emptyworld':, 'has valuethere')# = empty

    String methods

    Note: Basically most of the String methods can be used, using `?javascript` to escape single quote in value.
    • Hello World!
    • #exp.'{envVariable.str1?expression}'.replaceFirst('[a-z]', '*')# = H*llo World!
    • #exp.'{envVariable.str1?
    • javascript
    • expression}'
    • + ' ' + '{envVariable.str2?javascript}'# = Hello World! Using Joget Hash Variables
    • .replaceAll('[a-z]', '*')# = H**** W****!
    • #exp.'{envVariable.str1?javascriptexpression}'.substringcharAt(50)# = World!H
    • #exp.'{envVariable.str1?javascriptexpression}'.toLowerCasecontains('World')# = hello world!#exp.true
    • #exp.'{envVariable.str1?expression}'.equalsIgnoreCase('{envVariable.str1?javascriptexpression}'.toUpperCasetoLowerCase())# = HELLO WORLD!true
    • #exp.'{envVariable.str1empty?javascriptexpression}'.replace('world', 'there'isEmpty()# = Hello World!true
    • #exp.'{envVariable.str1?javascriptexpression}'.replaceFirstindexOf('[a-z]', '*'World')# = H*llo World!6
    • #exp.'{envVariable.str1?javascriptexpression}'.replaceAlllastIndexOf('[a-z]', '*'World')# = H**** W****!6
    • #exp.'{envVariable.str1?javascriptexpression}'.charAt(0startsWith('H')# = Htrue
    • #exp.'{envVariable.str1?javascriptexpression}'.containsendsWith('World!')# = true

    Custom Methods

    • #exp.$isParsed('{envVariable.str1?javascripthashVariable}'.equalsIgnoreCase('{envVariable.str1?javascript}'.toLowerCase())# = true
    • #exp.'{envVariable.empty?javascript}'.isEmpty()# = true
    • #exp.'{envVariable.str1?javascript}'.indexOf('World')# = 6
    • #exp.'{envVariable.str1?javascript}'.lastIndexOf('World')# = 6
    • #exp.'{envVariable.str1?javascript}'.startsWith('H')# = true
    • #exp.'{envVariable.str1?javascript}'.endsWith('!')# = true

    Custom Methods

    • #exp.$isParsed('{envVariable.hashVariable}')# = false

    Math methods

    Note: All java.lang.Math methods can be used.

    • #exp.$sin(30)# = -0.9880316240928618
    • #exp.$cos(30)# = 0.15425144988758405
    • #exp.$tan(30)# = -6.405331196646276
    • #exp.$asin(30)# = NaN
    • #exp.$acos(30)# = NaN
    • #exp.$atan(30)# = 1.5374753309166493
    • #exp.$sinh(30)# = 5.343237290762231E12
    • #exp.$cosh(30)# = 5.343237290762231E12
    • #exp.$tanh(30)# = 1.0
    • #exp.$abs(-7)# = 7.0
    • #exp.$max(60,30)# = 60.0
    • #exp.$min(60,30)# = 30
    • #exp.$round(79.52)# = 80
    • #exp.$sqrt(12)# = 3.4641016151377544
    • #exp.$cbrt(81)# = 4.326748710922225
    • #exp.$pow(4, 2)# = 16.0
    • #exp.$signum(82.7)# = 1.0
    • #exp.$ceil(82.7)# = 83.0
    • #exp.$copySign(740.4, -29.1)# = -740.4
    • #exp.$nextAfter(84352.24, 154.284)# = 84352.234
    • #exp.$nextUp(744.93)# = 744.93005
    • #exp.$nextDown(744.93)# = 744.9299999999998
    • #exp.$floor(744.93)# = 744.0
    • #exp.$floorDiv(25, 3)# = 8
    • #exp.$random()# = 0.3988245190916774
    • #exp.$rint(81.68)# = 82.0
    • #exp.$hypot(8, 6)# = 10.0
    • #exp.$ulp(8.1)# = 9.536743E-7
    • #exp.$getExponent(50.45)# = 5
    • #exp.$IEEEremainder(387.1, 4.2)# = 0.7000000000000064
    • #exp.$addExact(469, 737)# = 1206
    • #exp.$subtractExact(469, 737)# = -268
    • #exp.$multiplyExact(469, 737)# = 345653
    • #exp.$incrementExact(674)# = 675
    • #exp.$decrementExact(674)# = 673
    • #exp.$negateExact(674)# = -674
    • #exp.$toIntExact(-829)# = -829
    • #exp.$log(38.9)# = 3.6609942506244004
    • #exp.$log10(38.9)# = 1.5899496013257077
    • #exp.$log1p(26)# = 3.295836866004329
    • #exp.$exp(2)# = 7.38905609893065
    • #exp.$expm1(2)# = 6.38905609893065
    • #exp.$toDegrees(5)# = 286.4788975654116
    • #exp.$toRadians(180.0)# = 3.141592653589793

    ...

    • )# = false

    Math methods

    Note: All java.lang.Math methods can be used.

    • #exp.$sin(30)# = -0.9880316240928618
    • #exp.$cos(30)# = 0.15425144988758405
    • #exp.$tan(30)# = -6.405331196646276
    • #exp.$asin(30)# = NaN
    • #exp.$acos(30)# = NaN
    • #exp.$atan(30)# = 1.5374753309166493
    • #exp.$sinh(30)# = 5.343237290762231E12
    • #exp.$cosh(30)# = 5.343237290762231E12
    • #exp.$tanh(30)# = 1.0
    • #exp.$abs(-7)# = 7.0
    • #exp.$max(60,30)# = 60.0
    • #exp.$min(60,30)# = 30
    • #exp.$round(79.52)# = 80
    • #exp.$sqrt(12)# = 3.4641016151377544
    • #exp.$cbrt(81)# = 4.326748710922225
    • #exp.$pow(4, 2)# = 16.0
    • #exp.$signum(82.7)# = 1.0
    • #exp.$ceil(82.7)# = 83.0
    • #exp.$copySign(740.4, -29.1)# = -740.4
    • #exp.$nextAfter(84352.24, 154.284)# = 84352.234
    • #exp.$nextUp(744.93)# = 744.93005
    • #exp.$nextDown(744.93)# = 744.9299999999998
    • #exp.$floor(744.93)# = 744.0
    • #exp.$floorDiv(25, 3)# = 8
    • #exp.$random()# = 0.3988245190916774
    • #exp.$rint(81.68)# = 82.0
    • #exp.$hypot(8, 6)# = 10.0
    • #exp.$ulp(8.1)# = 9.536743E-7
    • #exp.$getExponent(50.45)# = 5
    • #exp.$IEEEremainder(387.1, 4.2)# = 0.7000000000000064
    • #exp.$addExact(469, 737)# = 1206
    • #exp.$subtractExact(469, 737)# = -268
    • #exp.$multiplyExact(469, 737)# = 345653
    • #exp.$incrementExact(674)# = 675
    • #exp.$decrementExact(674)# = 673
    • #exp.$negateExact(674)# = -674
    • #exp.$toIntExact(-829)# = -829
    • #exp.$log(38.9)# = 3.6609942506244004
    • #exp.$log10(38.9)# = 1.5899496013257077
    • #exp.$log1p(26)# = 3.295836866004329
    • #exp.$exp(2)# = 7.38905609893065
    • #exp.$expm1(2)# = 6.38905609893065
    • #exp.$toDegrees(5)# = 286.4788975654116
    • #exp.$toRadians(180.0)# = 3.141592653589793

    Report Builder Hash Variable (New)

    Panel
    borderColorpurple
    borderWidth1
    titleBGColor#ddccff
    borderStylesolid
    titleNew Feature

    This is a new feature in Joget DX if you are using the Report Builder custom plugin.

    Warning

    The API IP/Domain Whitelist setting in General Settings needs to be configured in order for reportLink hash variable to work. If a request is from a non-whitelisted IP/domain, the response will be a HTTP 400 Bad Request.

    NameDescription
    PrefixreportLink
    Description

    To retrieve the particular report based on the reportId.

    To know more about Report Builder, see here.

    Attributes
    • #reportLink.rp_report01#
    Scope of Use
    • All components within the App.
    Sample Attributes
    • #reportLink.financialReport#

    Code Builder Hash Variable (New)

    Panel
    borderColorpurple
    borderWidth1
    titleBGColor#ddccff
    borderStylesolid
    titleNew Feature

    This is a new feature in Joget DX if you are using the Report Code Builder custom plugin.

    NameDescription
    PrefixreportLinkcode
    Description

    To retrieve the

    particular report

    template based on the

    reportId

    code snippet ID.

    Attributes
    • #reportLink.rp_report01##code.cs-templateId#
    Scope of Use
    • All components within the App.
    Sample Attributes
    • #reportLink#code.financialReport#cs-calculationScript#

    Hash Variables In Joget Marketplace


    Download Demo App

    View filenameAPP_hash_variable_dx_kb.jwaheight150