Hash Variable

Introduction

Hash variables in Joget are placeholders used to display data within applications dynamically. They allow users to insert dynamic content without hardcoding values, which enhances flexibility and customization. Hash variables can fetch and display data from various sources, such as forms, workflows, and the system itself. By avoiding hardcoded values, they promote customization and flexibility, ultimately improving the user-friendliness of Joget applications.

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

  • Form Builder
  • List Builder
  • UI Builder
  • BeanShell code
  • Supported plugin configuration properties
  • Activity name in Workflow Designer
  • External Form URL when mapping an activity to an external form
Download the Hash Variable demo app on the link below:

Nested Hash Variable

Hash Variable can be used inside another to form a Nested Hash Variable.

The syntax for the inner Hash Variable is wrapped by a pair of {curly brackets}.

#prefix.{prefix.variableKey}#

Here are some examples:

#date.{envVariable.dateFormat}#
#user.{variable.username}.firstName#
#form.tableChild.field1[{form.tableParent.childId}]#

Form Hash Variable by Index

You can pass an index or primary key value to a Hash Variable for retrieval.

The syntax for the inner Hash Variable is wrapped by a pair of [square brackets].

#form.myTable.fieldId.[primaryKeyValue]#

Here are some examples:

#form.contact.name[007]# where "007" is the primary key or "id" value of database table "app_fd_contact".

Escaping the Resultant 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.)

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

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

Hash Variable 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 the record exists but field is empty, "#form.table.field#" returns empty = "".
  • If the record exists and field has value "abc", "#form.table.field#" returns the value = "abc".

Property Assistant

Property Assistant is a new feature in Joget DX 8 that allows you to quickly access and insert Hash Variables (and others) in any form element, UI element, or list.

List Of Joget DX Hash Variables

Workflow Assignment Hash Variable

  • Prefix: assignment
  • 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.
    • Activity Name.
    • Form mapped as part of process activity mapping.
    • 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

  • Prefix: process
  • 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#
    • #process.activityInst.ACTIVITY_DEF_ID.performerUser#
    • #process.activityInst.ACTIVITY_DEF_ID.assignmentUsers#
    • #process.appId[PROCESS_INSTANCE_ID]#
    • #process.processDefId[PROCESS_INSTANCE_ID]#
    • #process.processDefIdWithoutVersion[PROCESS_INSTANCE_ID]#
    • #process.processName[PROCESS_INSTANCE_ID]#
    • #process.processVersion[PROCESS_INSTANCE_ID]#
    • #process.processRequesterId[PROCESS_INSTANCE_ID]#
    • #process.startedTime[PROCESS_INSTANCE_ID]#
    • #process.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.timeConsumingFromDateStartedInSeconds[PROCESS_INSTANCE_ID]#
    • #process.activityInst.ACTIVITY_DEF_ID.instanceId[PROCESS_INSTANCE_ID]#
    • #process.activityInst.ACTIVITY_DEF_ID.name[PROCESS_INSTANCE_ID]#
    • #process.activityInst.ACTIVITY_DEF_ID.status[PROCESS_INSTANCE_ID]#
    • #process.activityInst.ACTIVITY_DEF_ID.state[PROCESS_INSTANCE_ID]#
    • #process.activityInst.ACTIVITY_DEF_ID.type[PROCESS_INSTANCE_ID]#
    • #process.activityInst.ACTIVITY_DEF_ID.startedTime[PROCESS_INSTANCE_ID]#
    • #process.activityInst.ACTIVITY_DEF_ID.limit[PROCESS_INSTANCE_ID]#
    • #process.activityInst.ACTIVITY_DEF_ID.limitInSeconds[PROCESS_INSTANCE_ID]#
    • #process.activityInst.ACTIVITY_DEF_ID.due[PROCESS_INSTANCE_ID]#
    • #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.
    • Activity Name.
    • Form mapped as part of process activity mapping.
    • 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

  • Prefix: currentUser
  • Description: To 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# (e.g., #currentUser.meta.duration#): To read additional user meta data stored in the dir_user_meta table.
      • Employment:
        • #currentUser.employee.code#
        • #currentUser.employee.jobTitle#
        • #currentUser.employee.isHod# (HOD)
      • 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#
  • Scope of Use: All components within the App.

Date Hash Variable  

  • Prefix: date
  • Description: To get the date time according to a specified format.
  • Localization: The returned value will follow the currently logged-in user's timezone. The user's information will use the server's timezone if it is unavailable.
  • 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# the current date time will be displayed based on UTC plus 5 hours. Read Display Date Time Based On UTC.
    • Options:
      • 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]#
      • INPUT_DATE_VALUE: This function accepts any date value and even nested hash variables, such as form data hash variables. See the example in the sample attributes below.
      • INPUT_VALUE_FORMAT: The original format of INPUT_DATE_VALUE.
      • DATE_FORMAT_TO: Defines the format to change to.
    • Use #dateEN.dateFormat# to force the date to be displayed in English. This is a new feature in DX 8.
  • Scope of Use: All components within the App.
  • Sample Attributes:
    • #date.h:mm a# // Shows current time of 12:08 PM
    • #dateEN.yyyy-MM-dd# // Shows current date of 2023-02-15 in English even though the locale has been set to a different language (i.e., Arabic)
    • #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# // Adds 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 day from the 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 

  • Prefix: envVariable
  • Description: To retrieve Environment Variable values.
  • Attributes:
    • #envVariable.keyName#
  • Scope of Use: Anywhere within the Joget app (e.g., Process, Process Tool, Form, List, UI).
  • Sample Attributes:
    • #envVariable.smtpServer#
    • #envVariable.smtpPort#

App Variable Hash Variable

  • Prefix: appVariable
  • Description: To retrieve App Variable values.
  • Attributes:
    • #appVariable.keyName#
  • Scope of Use: Anywhere within the Joget app itself (e.g., Process, Process Tool, Form, List, UI).
  • Sample Attributes:
    • #appVariable.smtpServer#
    • #appVariable.smtpPort#

 

Form Data Hash Variable 

  • Prefix: form
  • Description: To get field value from form table.
  • Attributes:
    • #form.tableName.fieldId#
    • #form.tableName.fieldId[recordId]# (Available in v3.1 and above)
  • Scope of Use:
    • In a Process Tool part of a Process
    • In a Form
    • In a process design
  • Sample Attributes:
    • #form.registration.registeredDate# (will use the current record ID)
    • #form.registration.registeredDate[0001]# (0001 is the record ID to seek for)
    • #form.registration.registeredDate[{variable.recordId}]# (using nested Hash Variable with curly brackets)

Form Binder Hash Variable

  • Prefix: binder
  • 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 (e.g., 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; otherwise, 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; otherwise, data from the current record ID is used.
  • 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

  • Prefix: appDef
  • Description: To retrieve values from the application definition. These variables help in getting information related to the application’s setup and configuration.
  • Attributes:
    • #appDef.APP_ID.keyName#
    • #appDef.keyName#
  • Scope of Use:
    • Anywhere within the Joget app itself (e.g., Process, Process Tool, Form, List, UI)
  • Sample Attributes:
    • #appDef.myApp.someValue#
    • #appDef.someKey#

App Translation Hash Variable (Internationalization)

  • Prefix: i18n
  • Description: To support language localization at the application level.
  • Attributes:
    • #i18n.keyName#
  • Scope of Use:
    • All components within the app.
  • Sample Attributes:
    • #i18n.logout#

 

Performer Hash Variable

  • Prefix: performer
  • 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.
    • Activity Name.
    • Form mapped as part of process activity mapping.
    • Email Tool configuration as part of process tool mapping.
    • To get activityDefId (activity definition ID), mouseover the activity name in the Activity Mapping tab (Workflow Management Console); an overlay will show the ID.
    • The activity chosen must have already been performed.
  • Sample Attributes:
    • #performer.runProcess.firstName#
    • #performer.submitLeave.firstName#

Request Parameter Hash Variable

  • Prefix: requestParam
  • Description: To access request parameter values.
  • Attributes:
    • #requestParam.parameterName[separator]#
      • The separator (, or ;) can be indicated if requestParam is used in List filter with multiple values to define the separator character in data output. Comma , is used as a default if no separator is indicated for multiple values.
  • Scope of Use:
    • All components within the App.
  • Sample Attributes:
    • #requestParam.key# can be used specifically to obtain UI Key value.
    • #requestParam.name[;]# to indicate 'name' variable will store multiple values separated by semicolon. For example, the 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 UI page, you can 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  

  • Prefix: user
  • Description: To get user information based on username.
    • Replace the username below in red with the actual username (e.g., 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. For example, #user.cat.meta.duration# will return the value "100".
    • 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

  • Prefix: userviewKey
  • Description: Userview Key Hash Variable is used to access the current UI key's value.
    • Typical use cases include:
      • Filtering a List based on UI Key.
      • Preloading certain form data fields (e.g., subform) in a Form or Form part of a process flow based on UI Key.
  • Scope of Use:
    • List Data Store
    • Chart Menu
  • Attributes:
    • #userviewKey#

Workflow Variable Hash Variable

  • Prefix: variable
  • Description: To get the value of a workflow variable in a Process Flow.
  • Scope of Use:
    • Elements within and part of a Process.
    • Activity Name.
    • Form mapped as part of process activity mapping.
    • Email Tool configuration as part of process tool mapping.
  • Attributes:
    • #variable.variableName#
  • Sample Attribute:
    • #variable.approvalStatus#

Request Hash Variable

  • Prefix: request
  • Description: To get the value from the current HttpServletRequest object of the page view.
  • Scope of Use:
    • All components within the App where there is a valid HttpServletRequest object. This object will not be available in background activities such as Process Tool triggered by Deadlines.
  • 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#
  • Sample Attributes:
    • To retrieve the "Referer" header attribute value, use: #request.header.Referer#
    • To retrieve a Joget app URL using the Request Hash Variable: #request.scheme#://#request.serverName#:#request.serverPort##request.contextPath#/web...

Platform Hash Variable

  • Prefix: platform
  • Description: To retrieve platform-specific information.
  • Scope of Use: All components within the App.
  • Attributes:
    • General 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#
    • SMTP Attributes:
      • #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#

Users Hash Variable

  • Prefix: users
  • Description: To retrieve information of all the users in the selected group, grade, department, and organization. Multiple results will be separated by semicolon.
  • Scope of Use: All components within the App.
  • Attributes:
    • Group:
      • #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#
    • Grade:
      • #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#
    • Department:
      • #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#
    • Organization:
      • #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#
  • Sample Attributes:
    • To return all the users in the current user's groups id:
      • #users.group.{currentUser.groups.id}.fullName#
      • #users.department.D-005.username#
      • #users.group.G-001.email#

Bean Shell Hash Variable

  • Prefix: beanshell
  • Description: Using App Variable to execute BeanShell script. Passing parameters using URL query string syntax.
  • Scope of Use: All components within the App.
  • Attributes:
    • #beanshell.APP_VARIABLE#
    • #beanshell.APP_VARIABLE[PARAMETERS_URL_QUERY_STRING]#
  • Sample Attributes:
    • To execute a script stored in the "welcome" app variable with parameters "username" and "dept":
      if (username != null && username.length == 1 && !username[0].isEmpty()) {
             return "Welcome " + username[0] + " (" + dept[0] + "),";
      } else {
             return "";
      }
      • #beanshell.welcome[username={currentUser.username?url}&dept={currentUser.department.name?url}]#

Datalist Hash Variable

The datalist.col Hash Variables are a new feature in DX 8 that allows users to access and display a List's column data in multiple formats.

  • Prefix: datalist
  • Description: To display the List records in a grid format in your form or email tool.
  • Scope of Use: All components within the App.
  • Attributes:
    • #datalist.html.ID#
    • #datalist.csv.ID#
    • #datalist.json.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.col.csv.ID.column#
    • #datalist.col.sum.ID.column#
    • #datalist.col.avg.ID.column#
    • #datalist.col.csv.ID.column[FILTER_PARAMETERS]#
    • #datalist.col.sum.ID.column[FILTER_PARAMETERS]#
    • #datalist.col.avg.ID.column[FILTER_PARAMETERS]#
    • #datalist.html.ID[FILTER_PARAM1=FILTER_VALUE1&FILTER_PARAM2=FILTER_VALUE2]#
    • #datalist.csv.ID[FILTER_PARAM1=FILTER_VALUE1&FILTER_PARAM2=FILTER_VALUE2]#
    • #datalist.json.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]#
  • Sample Attributes:
    • #datalist.html.myDataList#
    • #datalist.csv.myDataList#
    • #datalist.col.sum.list_f1.column_0#
    • #datalist.size.myDataList# = Size returns only the number of records based on Datalist filter.
    • #datalist.total.myDataList# = 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

  • Prefix: exp
  • Description: Mathematical and string operations on hash variables.
  • Scope of Use: All components within the App.
  • Attributes:
    • #exp.variable#
  • 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.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 Operators:

      • #exp.{envVariable.bool1} and {envVariable.bool2}# = false
      • #exp.{envVariable.bool1} or {envVariable.bool2}# = true
      • #exp.!{envVariable.bool1}# = false
    • Relational Operators:

      • #{envVariable.num1} gt {envVariable.num2}# = false
      • #{envVariable.num1} ge {envVariable.num1}# = true
      • #{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.num1} lt {envVariable.num2})?{envVariable.num1}:{envVariable.num2}# = 55
      • #exp.'{envVariable.empty?expression}'.isEmpty()?'empty':'has value'# = empty
    • String Methods:

      • Note: Most String methods can be used with ?expression to escape single quotes in values.
      • #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.str1?expression}'.replace('world', 'there')# = Hello World!
      • #exp.'{envVariable.str1?expression}'.replaceFirst('[a-z]', '*')# = H*llo World!
      • #exp.'{envVariable.str1?expression}'.replaceAll('[a-z]', '*')# = H**** W****!
      • #exp.'{envVariable.str1?expression}'.charAt(0)# = H
      • #exp.'{envVariable.str1?expression}'.contains('World')# = true
      • #exp.'{envVariable.str1?expression}'.equalsIgnoreCase('{envVariable.str1?expression}'.toLowerCase())# = true
      • #exp.'{envVariable.empty?expression}'.isEmpty()# = true
      • #exp.'{envVariable.str1?expression}'.indexOf('World')# = 6
      • #exp.'{envVariable.str1?expression}'.lastIndexOf('World')# = 6
      • #exp.'{envVariable.str1?expression}'.startsWith('H')# = true
      • #exp.'{envVariable.str1?expression}'.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

 

Report Builder Hash Variable

  • Prefix: reportLink
  • Description: Retrieves a specific report based on the reportId.
  • Attributes: #reportLink.rp_report01#
  • Scope of Use: All components within the App
  • Sample Attributes: #reportLink.financialReport

 

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

Code Builder Hash Variable

  • Prefix: code
  • Description: Retrieves the template based on the code snippet ID.
  • Attributes: #code.cs-templateId#
  • Scope of Use: All components within the App
  • Sample Attributes: #code.cs-calculationScript#
Created by Marcos Last modified by Aadrian on Dec 13, 2024