Versions Compared

Key

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

...

Introduction

What are Hash Variables?

...

English

Hash variables in Joget are placeholders used to dynamically display data within applications. 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. They promote customization and flexibility by avoiding hardcoded values, ultimately improving the user-friendliness of Joget applications.

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

...

Figure 2: Property Assistant - Nested Hash Variable

List Of Joget DX Hash Variables

...

System-wide Hash Variable

...

Panel

...

borderColor

...

purple

...

bgColor

...

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#

white
borderWidth1
titleBGColor#ddccff
borderStylesolid
titleNew Feature

This is a new feature in Joget DX 8.2.

The System Variables menu introduces system-wide Hash Variables, which allows users to create and define custom hash variables that can be used in Property Assistant. This means that system-wide hash variables can be used in any app as it is not tied to any specific app.

System-wide Hash Variables can be accessed in Property Assistant using the #sysVariable.KEY# hash variable, where KEY is defined in the System Variables settings page.
Image Added

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.activityInst.ACTIVITY_DEF_ID.instanceId#

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#name#

  • #process.activityInst.ACTIVITY_DEF_ID.due#status#

  • #process.activityInst.ACTIVITY_DEF_ID.delay#state#

  • #process.activityInst.ACTIVITY_DEF_ID.delayInSeconds#type#

  • #process.activityInst.ACTIVITY_DEF_ID.finishTime#startedTime#

  • #process.activityInst.ACTIVITY_DEF_ID.timeConsumingFromDateStarted#limit#

  • #process.activityInst.ACTIVITY_DEF_ID.timeConsumingFromDateStartedInSeconds#limitInSeconds#

  • #process.activityInst.ACTIVITY_DEF_ID.performer#due#

  • #process.activityInst.ACTIVITY_DEF_ID.performerUser#delay#

  • #process.activityInst.ACTIVITY_DEF_ID.assignmentUsers#delayInSeconds#

  • #process.activityInst.appId[PROCESSACTIVITY_INSTANCEDEF_ID]#.finishTime#

  • #process.activityInst.processDefId[PROCESSACTIVITY_INSTANCEDEF_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_processDefIdWithoutVersion[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.
    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}]#

...

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.


Panel
borderColorpurple
bgColorwhite
borderWidth1
titleBGColor#ddccff
borderStylesolid
titleNew Feature

use #dateEN "#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# // 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.

...

NameDescription
PrefixuserviewKey
Description

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

Typical use case for this hash variable are:-

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

Workflow Variable 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 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#

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

...

  • #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# 

...

  • #platform.setting.smtpHost#
  • #platform.setting.smtpPort#
  • #platform.setting.smtpSecurity#
  • #platform.setting.smtpUsername#
  • #platform.setting.smtpPassword#
  • #platform.setting.smtpEmail#

...

  • #platform.license.name#

  • #platform.license.holder#

  • #platform.license.users#

  • #platform.license.appLimit#

  • #platform.license.expiry#

  • #platform.license.activated#

  • #platform.systemKey#

...

  • All components within the App.

Users Hash Variable

...

  • #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#

...

  • All components within the App.

...

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

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 App Variable to execute bean shell script. Passing parameter using URL query string syntax.
Attributes
  • #beanshell.APP_VARIABLE#

  • #beanshell.APP_VARIABLE[PARAMETERS_URL_QUERY_STRING]#

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

To execute a script stored in the "welcome" app 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

Panel
borderColorpurple
bgColorwhite
borderWidth1
titleBGColor#ddccff
borderStylesolid
titleNew Feature

The "datalist.col" (highlighted in Bold in the table below) Hash Variables are a new feature in DX 8 that allows users to access and display a List's column data in multiple formats.

NameDescription
Prefixdatalist
DescriptionTo display the List records in a grid format in your form or email tool.
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]#
Scope of Use
  • All components within the App.
Sample Attributes
  • #datalist.html.myDataList#
  • #datalist.csv.ImyDataList#
  • #datalist.col.sum.list_f1.column_0#
  • #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}]}]#


** for "datalist.col.xx.ID.column" variables, the "column" parameter refers to the order of the column in the list starting from 0. hence, to refer to the first column in a list called list_f1, your hash variable would look like this : #datalist.col.sum.list_f1.column_0
** the column are counted from 0, and does not include the default checkbox included in list tables

Expression

...

Hash Variable

NameDescription
Prefixbeanshellexp
DescriptionUsing App Variable to execute bean shell script. Passing parameter using URL query string syntax.Mathematical and string operations on hash variables
Attributes#exp.variable#Attributes
  • #beanshell.APP_VARIABLE#

  • #beanshell.APP_VARIABLE[PARAMETERS_URL_QUERY_STRING]#
    Scope of Use
    • All components within the App.
    Sample Attributes

    To execute a script stored in the "welcome" app 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

    Panel
    borderColorpurple
    bgColorwhite
    borderWidth1
    titleBGColor#ddccff
    borderStylesolid
    titleNew Feature

    The "datalist.col" (highlighted in Bold in the table below) Hash Variables are a new feature in DX 8 that allows users to access and display a List's column data in multiple formats.

    ...

    • #datalist.html.ID#
    • #datalist.csv.ID#
    • #datalist.size.ID#
    • #datalist.total.ID#
    • #datalist.json.ID#
    • #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.size.ID[FILTER_PARAM1=FILTER_VALUE1&FILTER_PARAM2=FILTER_VALUE2]#
    • #datalist.total.ID[FILTER_PARAM1=FILTER_VALUE1&FILTER_PARAM2=FILTER_VALUE2]#

    ...

    • All components within the App.

    ...

    • #datalist.html.myDataList#
    • #datalist.csv.ImyDataList#
    • #datalist.size.ImyDataList#
    • #datalist.total.ImyDataList#
    • #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}]}]#

    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: 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.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

    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

    NameDescription
    Prefixcode
    Description

    To retrieve 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#


    uiListCount Hash Variable

    Panel
    borderColorpurple
    bgColorwhite
    borderWidth1
    titleBGColor#ddccff
    borderStylesolid
    titleNew Feature

    This is a new feature in Joget DX 8.

    NameDescription
    PrefixuiListCount
    Description

    The uiListCount hash variable is primarily utilized to retrieve the Datalist or Inbox menu count value.

    Attributes
    • #uiListCount.MENU_ID#
    • #uiListCount.UI_ID.MENU_ID#
    Scope of Use
    • All components within the App except UI Permission.
    Warning

    uiListCount cannot be used inside UI permission. This is due to:
    1. UI permission contains a uiListCount hash variable
    2. uiListCount Hash requires UI to load to get the count
    3. In order to load the UI design,  the UI permission will be called. It goes back to step 1.
    (Will cause an infinite recursion that eventually returns a StackOverflow exception error :

     ERROR 15 May 2024 09:27:20 org.apache.jsp.WEB_002dINF.jsp.error500_jsp - Handler dispatch failed; nested exception is java.lang.StackOverflowError2org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.StackOverflowError
    Caused by: java.lang.StackOverflowError



    Sample Attributes

    See examples below, based on the usage within the default CRM application:

    • #uiListCount.MENU_ID# where MENU_ID is the id of the menu in your Userview for Datalist or Inbox (Example usage: "#uiListCount.proposal_inbox_list#")
    • #uiListCount.UI_ID.MENU_ID# where UI_ID is the id of the Userview (Example usage: "#uiListCount.crm_userview_sales.proposal_inbox_list#")

    Escape Format Hash Variable

    Panel
    borderColorpurple
    bgColorwhite
    borderWidth1
    titleBGColor#ddccff
    borderStylesolid
    titleNew Feature

    This is a new feature in Joget DX 8.

    NameDescription
    Prefix?decimal(decimal_number)
    Description

    The escape format hash variable used to allow the formatting of decimal places. 

    Info

    This hash variable can be use on any variable that have decimal values. 

    Attributes
    • #variable.variableName?decimal(decimal_number)#
    • #appVariable.keyName?decimal(decimal_number)#
    • #envVariable.keyName?decimal(decimal_number)#
    Scope of Use
    • All components within the App.
    Sample Attributes
    • #appVariable.double1?decimal(1)# (Example usage for 1 decimal places using app variable)
    • #appVariable.double2?decimal(2)# (Example usage for 2 decimal places using app variable)
    • #envVariable.double1?decimal(1)# (Example usage for 1 decimal places using environment variable)
    • #envVariable.double2?decimal(2)# (Example usage for 2 decimal places using environment variable)

    Stats Hash Variable

    NameDescription
    Prefixstats
    Description

    Display various Joget system and app statistics.  

    Attributes
    • #stats.transactionCount#
    • #stats.slowTrace#
    • #stats.errorCount#
    • #stats.runningProcess#
    • #stats.completedProcess#
    • #stats.responseTimesCheck#
    • #stats.memoryUsageCheck#
    • #stats.cpuUsageCheck#
    • #stats.dbConnectionsCheck#
    • #stats.errorRateCHeck#
    • #stats.nodeCount#
    • #stats.publishedAppCount#
    • #stats.unPublishedAppCount#
    • #stats.user.active#
    • #stats.user.inactive#
    • #stats.user.total#
    • #stats.appList#
    • #stats.app.total#
    • #stats.form.countPerApp#
    • #stats.form.total#
    • #stats.errorRateCheck#
    • #stats.list.countPerApp#
    • #stats.list.total#
    • #stats.UI.countPerApp#
    • #stats.UI.total#
    • #statsgroupList.#
    • #stats.group.count#
    • #stats.group.countPerGroup#
    • #stats.group.total#

    Expression Hash Variable

    ...

    • All components within the App.

    ...

    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: 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.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

    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.

    ...

    To retrieve the particular report based on the reportId.

    To know more about Report Builder, see here.

    ...

    • #reportLink.rp_report01#

    ...

    • All components within the App.

    ...

    • #reportLink.financialReport#

    Code Builder Hash Variable

    NameDescriptionPrefixcodeDescription

    To retrieve 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#
    • #stats.group.count#: Displays the total group count.

    Hash Variables In Joget Marketplace


    Download Demo App

    View file
    nameAPP_kb_dx8_hash_variable
    _dx_kb
    .jwa
    height150