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 | If Then Else #exp.!'{form.table.field?javascript}'.isEmpty()?'Show: {form.table.field?javascript}':'This is empty'# 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 {envVariable.bool1} and {envVariable.bool2} = false{envVariable.bool1} or {envVariable.bool2} = true !{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 ({envVariable.num1} lt {envVariable.num2})?{envVariable.num1}:{envVariable.num2} = 55'{envVariable.empty?javascript}'.isEmpty()?'empty':'has value' = empty String methods (Basically most of the String methods can be used, using `?javascript` to escape single quote in value) '{envVariable.str1?javascript}' + ' ' + '{envVariable.str2?javascript}' = Hello World! Using Joget Hash Variables'{envVariable.str1?javascript}'.substring(5) = World! '{envVariable.str1?javascript}'.toLowerCase() = hello world! '{envVariable.str1?javascript}'.toUpperCase() = HELLO WORLD! '{envVariable.str1?javascript}'.replace('world', 'there') = Hello World! '{envVariable.str1?javascript}'.replaceFirst('[a-z]', '*') = H*llo World! '{envVariable.str1?javascript}'.replaceAll('[a-z]', '*') = H**** W****! '{envVariable.str1?javascript}'.charAt(0) = H '{envVariable.str1?javascript}'.contains('World') = true '{envVariable.str1?javascript}'.equalsIgnoreCase('{envVariable.str1?javascript}'.toLowerCase()) = true '{envVariable.empty?javascript}'.isEmpty() = true '{envVariable.str1?javascript}'.indexOf('World') = 6 '{envVariable.str1?javascript}'.lastIndexOf('World') = 6 '{envVariable.str1?javascript}'.startsWith('H') = true '{envVariable.str1?javascript}'.endsWith('!') = true Custom Methods $isParsed('{envVariable.hashVariable}') = falseMath methods (All java.lang.Math methods can be used) $sin(30) = -0.9880316240928618$cos(30) = 0.15425144988758405 $tan(30) = -6.405331196646276 $asin(30) = NaN $acos(30) = NaN $atan(30) = 1.5374753309166493 $sinh(30) = 5.343237290762231E12 $cosh(30) = 5.343237290762231E12 $tanh(30) = 1.0 $abs(-7) = 7.0 $max(60,30) = 60.0 $min(60,30) = 30 $round(79.52) = 80 $sqrt(12) = 3.4641016151377544 $cbrt(81) = 4.326748710922225 $pow(4, 2) = 16.0 $signum(82.7) = 1.0 $ceil(82.7) = 83.0 $copySign(740.4, -29.1) = -740.4 $nextAfter(84352.24, 154.284) = 84352.234 $nextUp(744.93) = 744.93005 $nextDown(744.93) = 744.9299999999998 $floor(744.93) = 744.0 $floorDiv(25, 3) = 8 $random() = 0.3988245190916774 $rint(81.68) = 82.0 $hypot(8, 6) = 10.0 $ulp(8.1) = 9.536743E-7 $getExponent(50.45) = 5 $IEEEremainder(387.1, 4.2) = 0.7000000000000064 $addExact(469, 737) = 1206 $subtractExact(469, 737) = -268 $multiplyExact(469, 737) = 345653 $incrementExact(674) = 675 $decrementExact(674) = 673 $negateExact(674) = -674 $toIntExact(-829) = -829 $log(38.9) = 3.6609942506244004 $log10(38.9) = 1.5899496013257077 $log1p(26) = 3.295836866004329 $exp(2) = 7.38905609893065 $expm1(2) = 6.38905609893065 $toDegrees(5) = 286.4788975654116 $toRadians(180.0) = 3.141592653589793 |