Joget DX 8 Stable Released
The stable release for Joget DX 8 is now available, with a focus on UX and Governance.
Hash Variables gives users greater flexibility and freedom in accessing useful information or relevant run-time values from the system.
A hash variable is a special hash-escaped keyword that can be used in :
to return the value of some useful runtime variables from Joget components.
A Hash Variable can be used inside another Hash Variable to form a Nested Hash Variable.
The syntax for the inner Hash Variable is wrapped by a pair of {curly bracket}.
#prefix.{prefix.variableKey}#
#date.{envVariable.dateFormat}# #user.{variable.username}.firstName# #form.tableChild.field1[{form.tableParent.childId}]#
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".
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. You may include multiple by defining semicolon ";" separated values.
#envVariable.script?java# #envVariable.script?nl2br;json# #form.table.users?separator(, )#
New attributes added in Joget v6.
Name | Description |
---|---|
Prefix | assignment |
Description | To get workflow activity information of the current assignment. |
Attributes |
|
Scope of Use |
|
Sample Attributes | To display the assignee's name: #user.{assignment.assigneeId}.firstName# #user.{assignment.assigneeId}.lastName# |
Name | Description |
---|---|
Prefix | process |
Description | To retrieve information of a workflow process instance. |
Attributes |
|
Scope of Use |
|
Sample Attributes | To display the performer username of an activity instance of a process instance: #process.activityInst.assign.performerUser[{assingment.processId}]# |
Name | Description |
---|---|
Prefix | currentUser |
Description | To retrieve currently logged in user information. |
Attributes |
In Joget Enterprise edition, these additional attributes are available:- User Meta
Employment
HOD
Organization
Department
Department HOD
Grade
Group
|
Scope of Use |
|
Name | Description |
---|---|
Prefix | date |
Description | To get date time according to a specified format. Localization In Joget v5, 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 |
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. |
Scope of Use |
|
Sample Attributes | #date.h:mm a# // shows current time of 12:08 PM #date.EEE,d MMM yyyy h:mm:ss a# // shows current date time of Wed, 4 Jul 2014 12:08:56 PM #date.DAY+7.EEE,d MMM yyyy h:mm:ss a# // Add 7 days on top of current date time - Wed, 11 Jul 2014 12:08:56 PM #date.DAY-1.EEE,d MMM yyyy h:mm:ss a# // Minus 1 days on top of current date time - Wed, 3 Jul 2014 12:08:56 PM #date.dd-MM-yyyy[{form.j_expense_claim.title}|yyyy-MM-dd]# // Retrieves date from j_expense_claim table, form field title, changes its origin format of yyyy-MM-dd to dd-MM-yyyy. |
Name | Description |
---|---|
Prefix | envVariable |
Description | To retrieve Environment Variable value. Learn more about Environment Variables . |
Attributes |
|
Scope of Use |
|
Sample Attributes | #envVariable.smtpServer# #envVariable.smtpPort# |
Name | Description |
---|---|
Prefix | form |
Description | To get field value from form table. |
Attributes |
|
Scope of Use |
|
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 bracket. |
Name | Description |
---|---|
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 (eg. select box, checkbox & radio button) option label. The field value or field value label can also be obtained from other apps by including the APP_ID, else it uses the current app context. By providing the PRIMARY_KEY argument, field value or field value label from a different record can be retrieved, else data from the current record id is retrieved instead. |
Attributes |
|
Scope of Use |
|
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]# |
Name | Description |
---|---|
Prefix | appDef |
Description | To retrieve App Definition information |
Attributes |
|
Scope of Use |
|
Sample Attributes | To display the app definition name: #appDef.name# |
Name | Description |
---|---|
Prefix | i18n |
Description | To support language localization on application level. |
Attributes |
|
Scope of Use |
|
Sample Attributes | #i18n.logout# |
Example | Please see Add Message. |
Name | Description |
---|---|
Prefix | performer |
Description | To get user information of the performer of an activity. |
Attributes |
|
Scope of Use |
To get activityDefId (activity definition ID), mouseover the activity name in the Activity Mapping tab (Workflow Management Console); there will be an overlay showing the ID. The activity chosen must had already been performed. |
Sample Attributes |
|
Name | Description |
---|---|
Prefix | requestParam |
Description | To access request parameter' values. |
Attributes |
|
Scope of Use |
|
Sample Attributes |
|
Name | Description |
---|---|
Prefix | user |
Description | To get user information based on username. |
Attributes |
In Joget Enterprise edition, these additional attributes are available:- User Meta
Organization
Department
Grade
HOD
Group
Employment
Department HOD
|
Scope of Use |
|
Sample Attributes |
|
Name | Description |
---|---|
Prefix | userviewKey |
Description | Userview Key Hash Variable is used solely for the purpose of accessing the current Userview key's value. Typical use case for this hash variable are:-
|
Attributes |
|
Scope of Use |
Name | Description |
---|---|
Prefix | variable |
Description | To get the value of a workflow variable in a Process Flow. |
Attributes |
|
Scope of Use |
|
Sample Attributes | #variable.approvalStatus# |
Name | Description |
---|---|
Prefix | request |
Description | To get the value from the current HttpServletRequest object of the page view. |
Attributes |
|
Scope of Use |
|
Sample Attributes | To retrieve the "Referer" header attribute value in the screenshot above, one may use the following hash variable. Hash Variable #request.header.Referer# |
Name | Description |
---|---|
Prefix | platform |
Description | To retrieve platform specific information. |
Attributes |
In Joget Enterprise edition, these additional attributes are available:-
|
Scope of Use |
|
Name | Description |
---|---|
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. |
Attributes |
|
Scope of Use |
|
Sample Attributes | To return all the users in the current user's groups id:
|
Name | Description |
---|---|
Prefix | beanshell |
Description | Using environment variable to execute bean shell script. Passing parameter using URL query string syntax. |
Attributes |
|
Scope of Use |
|
Sample Attributes | To execute a script stored in "welcome" environment variable with parameter "username" and "dept": if (username != null && username.length == 1 && !username[0].isEmpty()) { return "Welcome " + username[0] + " (" + dept[0] + "),"; } else { return ""; }
|
Related Tutorials |
This is a new feature in Joget DX.
Name | Description |
---|---|
Prefix | datalist |
Description | To display the datalist records in a grid format in your form or email tool. |
Attributes |
|
Scope of Use |
|
Sample Attributes |
|
This is a new feature in Joget DX.
Name | Description |
---|---|
Prefix | {hash variable} |
Description | Mathematical and string operations on hash variables |
Attributes | #exp.variable# |
Scope of Use |
|
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 Ternary Operator (If Else) #exp.({envVariable.num1} lt {envVariable.num2})?{envVariable.num1}:{envVariable.num2}#= 55 String methods Note: Basically most of the String methods can be used, using `?javascript` to escape single quote in value. #exp.'{envVariable.str1?javascript}' + ' ' + '{envVariable.str2?javascript}'# = Hello World! Using Joget Hash Variables #exp.'{envVariable.str1?javascript}'.substring(5)# = World!#exp.'{envVariable.str1?javascript}'.toLowerCase()# = hello world! #exp.'{envVariable.str1?javascript}'.toUpperCase()# = HELLO WORLD! #exp.'{envVariable.str1?javascript}'.replace('world', 'there')# = Hello World! #exp.'{envVariable.str1?javascript}'.replaceFirst('[a-z]', '*')# = H*llo World! #exp.'{envVariable.str1?javascript}'.replaceAll('[a-z]', '*')# = H**** W****! #exp.'{envVariable.str1?javascript}'.charAt(0)# = H #exp.'{envVariable.str1?javascript}'.contains('World')# = true #exp.'{envVariable.str1?javascript}'.equalsIgnoreCase('{envVariable.str1?javascript}'.toLowerCase())# = true #exp.'{envVariable.empty?javascript}'.isEmpty()# = true #exp.'{envVariable.str1?javascript}'.indexOf('World')# = 6 #exp.'{envVariable.str1?javascript}'.lastIndexOf('World')# = 6 #exp.'{envVariable.str1?javascript}'.startsWith('H')# = true #exp.'{envVariable.str1?javascript}'.endsWith('!')# = true Custom Methods #exp.$isParsed('{envVariable.hashVariable}')# = falseMath 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 |