Introduction
What are Hash
...
Variables?
...
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 :
...
Tip |
---|
To conveniently access the list of all hash variables available, use the shortcut combination Ctrl + Shift + 3 in any of the components above to bring up the hash variable assistant Property Assistant.
|
Nested Hash Variable
A Hash Variable can be used inside another Hash Variable to form a Nested Hash Variable.
...
Code Block |
---|
language | java |
---|
title | Syntax / Format |
---|
|
#prefix.{prefix.variableKey}# |
Here 's are some examples:
Code Block |
---|
|
#date.{envVariable.dateFormat}#
#user.{variable.username}.firstName#
#form.tableChild.field1[{form.tableParent.childId}]# |
...
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
...
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.
- Activity Name.
- Form mapped as part of process activity mapping.
- Email Tool configuration as part of process tool mapping.
...
To display the assignee's name:
#user.{assignment.assigneeId}.firstName# #user.{assignment.assigneeId}.lastName#
Hash Variable - Property Assistant
Panel |
---|
borderColor | purple |
---|
bgColor | white |
---|
borderWidth | 1 |
---|
titleBGColor | #ddccff |
---|
borderStyle | solid |
---|
title | New Feature |
---|
|
This is a new feature in Joget DX 8. |
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.
The Property Assistant allows you to choose a hash variable's attributes from a select box (Figure 1).
Image Added
Figure 1: Property Assistant - Hash Variable Attributes Selection
You can also insert Nested Hash Variables easily using the Property Assistant by clicking on the desired attribute that will include the nested variable and then clicking back on the variable list to choose a variable to insert. (See Figure 2)
Image Added
Figure 2: Property Assistant - Nested Hash Variable
List Of Joget DX Hash Variables
Workflow Assignment Hash Variable
Name | Description |
---|
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
Panel |
---|
borderColor | purple |
---|
titleBGColor | #ddccff |
---|
borderStyle | solid |
---|
title | New 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: |
Name | Description |
---|
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.
|
Workflow Process Hash Variable
Panel |
---|
borderColor | purple |
---|
titleBGColor | #ddccff |
---|
borderStyle | solid |
---|
title | New 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: |
Name | Description |
---|
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#instanceId# #process.activityInst.ACTIVITY_DEF_ID.delay#name# #process.activityInst.ACTIVITY_DEF_ID.delayInSeconds#status# #process.activityInst.ACTIVITY_DEF_ID.finishTime#state# #process.activityInst.ACTIVITY_DEF_ID.timeConsumingFromDateStarted#type# #process.activityInst.ACTIVITY_DEF_ID.timeConsumingFromDateStartedInSeconds#startedTime# #process.activityInst.ACTIVITY_DEF_ID.performer#limit# #process.activityInst.ACTIVITY_DEF_ID.performerUser#limitInSeconds# #process.activityInst.ACTIVITY_DEF_ID.assignmentUsers#due# #process.activityInst.appId[PROCESSACTIVITY_INSTANCEDEF_ID]#.delay# #process.activityInst.processDefId[PROCESSACTIVITY_INSTANCEDEF_ID]#.delayInSeconds# #process.activityInst.processDefIdWithoutVersion[PROCESSACTIVITY_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.appIdINSTANCE_ID]##process.processName[PROCESS_INSTANCE_ID]# #process.processVersionprocessDefId[PROCESS_INSTANCE_ID]# #process.processRequesterIdprocessDefIdWithoutVersion[PROCESS_INSTANCE_ID]# #process.startedTimeprocessName[PROCESS_INSTANCE_ID]# #process.limitprocessVersion[PROCESS_INSTANCE_ID]# #process.dueprocessRequesterId[PROCESS_INSTANCE_ID]# #process.delaystartedTime[PROCESS_INSTANCE_ID]# #process.delayInSecondslimit[PROCESS_INSTANCE_ID]# #process.finishTimedue[PROCESS_INSTANCE_ID]# #process.timeConsumingFromDateStarteddelay[PROCESS_INSTANCE_ID]# #process.timeConsumingFromDateStartedInSecondsdelayInSeconds[PROCESS_INSTANCE_ID]# #process.finishTime[PROCESS_INSTANCE_ID]# #process.timeConsumingFromDateStarted[PROCESS_INSTANCE_ID]# #process.timeConsumingFromDateStartedInSeconds[PROCESS_INSTANCE_ID]# #process.activityInst.ACTIVITY_DEF_ID.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}]# |
...
Name | Description |
---|
Prefix | date |
Description | To get date time according to a specified format. Info |
---|
| 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 |
Info |
---|
| dateFormat - In Java date format; e.g., yyyy-MM-dd for 2011-06-01
dateUnit integerValue - Numeric integer value. E.g. 10
|
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 |
---|
borderColor | purple |
---|
bgColor | white |
---|
borderWidth | 1 |
---|
titleBGColor | #ddccff |
---|
borderStyle | solid |
---|
title | New Feature |
---|
| 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.#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. |
...
Name | Description |
---|
Prefix | appDef |
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
...
Translation Hash Variable (Internationalization)
Name | Description |
---|
Prefix | i18n |
Description | To support language localization on application level. |
Attributes | |
Scope of Use | - All components within the App.
|
Sample Attributes | #i18n.logout#
|
Example | Please see Add MessageTranslation. |
Performer Hash Variable
...
Name | Description |
---|
Prefix | requestParam |
Description | To access request parameter' values. |
Attributes | - #requestParam.parameterName[separator]#
- 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 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 UI 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 UI 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.
|
...
Name | Description |
---|
Prefix | userviewKey |
Description | Userview Key Hash Variable is used solely for the purpose of accessing the current Userview UI key's value. Typical use case for this hash variable are:- - Filtering a List based on Userview UI Key.
- Preloading certain form data field (e.g. subform) in a Form or Form part of a process flow based on Userview UI Key.
|
Attributes | |
Scope of Use | |
Workflow Variable Hash Variable
...
Name | Description |
---|
Prefix | beanshell |
Description | Using App Variable to execute bean shell script. Passing parameter using URL query string syntax. |
Attributes | |
Scope of Use | - All components within the App.
|
Sample Attributes | To execute a script stored in the "welcome" environment app variable with parameter "username" and "dept": Code Block |
---|
| if (username != null && username.length == 1 && !username[0].isEmpty()) {
return "Welcome " + username[0] + " (" + dept[0] + "),";
} else {
return "";
} |
|
Related Tutorials | |
Datalist Hash Variable
...
...
...
...
bgColor | white |
---|
borderWidth | 1 |
---|
titleBGColor | #ddccff |
---|
borderStyle | solid |
---|
title | New 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. |
Name | Description |
---|
Prefix | datalist |
Description | To display the List records in a grid format in your form or email tool. |
Attributes |
Description | To display the datalist records in a grid format in your form or email tool. |
Attributes | - #datalist.html.ID#
- #datalist.csv.ID#
- #datalist.sizejson.ID#
- #datalist.total.ID#
- #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]#
|
Scope of Use | - All components within the App.
|
- 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
| Sample Attributes | - #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.comID[FILTER_PARAM1=FILTER_VALUE1&FILTER_PARAM2=FILTER_VALUE2]#
- #datalist.sizejson.myDataList[d-8015999-fn_name=James&d-6304176-fn_email=james@gmail.comID[FILTER_PARAM1=FILTER_VALUE1&FILTER_PARAM2=FILTER_VALUE2]#
- #datalist.totalsize.myDataList[d-8015999-fn_name=James&d-6304176-fn_email=james@gmail.comID[FILTER_PARAM1=FILTER_VALUE1&FILTER_PARAM2=FILTER_VALUE2]#
- #datalist.htmltotal.list_f1[d-1338250-fn_id={process.recordId}]#
- #datalist.html.listId[filterId={form.table.field[{envVariable.variableId}]}]#
|
Expression Hash Variable
- ID[FILTER_PARAM1=FILTER_VALUE1&FILTER_PARAM2=FILTER_VALUE2]#
|
Name | Description |
---|
Prefix | exp |
Description | Mathematical and string operations on hash variables |
Attributes | #exp.variable# |
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
Name | Description |
---|
Prefix | exp |
Description | Mathematical 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.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. 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- str2?expression}'
)# = 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. |
- # = 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. |
Name | Description |
---|
Prefix | reportLink |
Description | To retrieve the particular report based on the reportId. To know more about Report Builder, see here. |
Attributes | |
Scope of Use | - All components within the App.
|
Sample Attributes | - #reportLink.financialReport#
|
Code Builder Hash Variable
Name | Description |
---|
Prefix | code |
Description | To retrieve the template based on the code snippet ID. |
Attributes | |
Scope of Use | - All components within the App.
|
Sample Attributes | - #code.cs-calculationScript#
|
uiListCount Hash Variable
Panel |
---|
borderColor | purple |
---|
bgColor | white |
---|
borderWidth | 1 |
---|
titleBGColor | #ddccff |
---|
borderStyle | solid |
---|
title | New Feature |
---|
|
This is a new feature in Joget DX 8. |
Name | Description |
---|
Prefix | uiListCount |
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 |
---|
borderColor | purple |
---|
bgColor | white |
---|
borderWidth | 1 |
---|
titleBGColor | #ddccff |
---|
borderStyle | solid |
---|
title | New Feature |
---|
|
This is a new feature in Joget DX 8. |
Name | Description |
---|
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)#
|
Name | Description |
---|
Prefix | reportLink |
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
- #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)
|
Name | Description |
---|
Prefix | code |
Description | To retrieve the template based on the code snippet ID. |
Attributes | |
Scope of Use | - All components within the App.
|
Sample Attributes | #code.cs-calculationScript#Hash Variables In Joget Marketplace
Download Demo App
View file |
---|
name | APP_hash_variable_demo_ |
---|
|
dx