Versions Compared

Key

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

...

Introduction

What are Hash Variable?

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

...

Tip
To conveniently access the list of all hash variables available, use shortcut combination Ctrl -+ Shift -+ in any of the components above to bring up the hash variable assistant.

Image Added


Nested Hash Variable

...

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

...

Hash

...

Variable

...

Return Values

  • If the record does not exist, "#form.table.field#" returns the same = "#form.table.field#". Use the ternary operator ( condition ? exprIfTrue : exprIfFalse ) to check and set to NULL if the return value matches the origin hash variable (if used in BeanShell or Javascript).
  • If record exist but field is empty, "#form.table.field#" returns empty = "".
  • If record exist and field has value "abc", "#form.table.field#" returns the value = "abc".

Hash Variable Features In Joget DX Community Edition

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

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

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#

...

NameDescription
PrefixcurrentUser
DescriptionTo retrieve currently logged in user information.    More user hash variables here.
Attributes
  • #currentUser.id#username#
  • #currentUser.username#firstName#
  • #currentUser.firstName#lastName#
  • #currentUser.lastName#fullName#
  • #currentUser.email#
  • #currentUser.active#
  • #currentUser.timeZone#
  • #currentUser.locale#
  • #currentUser.roles#

In Joget Enterprise edition, these additional attributes are available:-

User Meta

  • #currentUser.meta.KEY#
    To read additional user meta data stored in dir_user_meta table.
    Example: #currentUser.meta.duration#.


Employment

  • #currentUser.employee.code#
  • #currentUser.employee.jobTitle#
  • #currentUser.employee.isHod#

HOD

  • #currentUser.hod.username#
  • #currentUser.hod.firstName#
  • #currentUser.hod.lastName#
  • #currentUser.hod.email#
  • #currentUser.hod.active#
  • #currentUser.hod.timeZone#

Organization

  • #currentUser.organization.id#
  • #currentUser.organization.name#
  • #currentUser.organization.description#

Department

  • #currentUser.department.id#
  • #currentUser.department.name#
  • #currentUser.department.description#

Department HOD

  • #currentUser.department.hod.username#
  • #currentUser.department.hod.firstName#
  • #currentUser.department.hod.lastName#
  • #currentUser.department.hod.email#
  • #currentUser.department.hod.active#
  • #currentUser.department.hod.timeZone#

Grade

  • #currentUser.grade.id#
  • #currentUser.grade.name#
  • #currentUser.grade.description#

Group

  • #currentUser.groups.id#
  • #currentUser.groups.name#
Scope of Use
  • All components within the App.

...

NameDescription
Prefixform
Description

To get field value from form table.

Attributes
  • #form.tableName.fieldId #
  • #form.tableName.fieldId[recordId]# (Available in v3.1 and above) where "recordid" is a reserved variable used by Joget to retrieve the subform's id.
Scope of Use
  • In a Process Tool part of a Process.
  • In a Form.
  • In a process design.
Sample Attributes#form.registrationtableName.registeredDate# // will Will use the current record ID
#form.registrationtableName.registeredDate[0001]# // Where 0001 is the record ID to seek for
#form.registrationtableName.registeredDate[{variable.recordIdvarId}]# // using Using nested Hash Variable with curly bracket.
#form.tableName.fieldId[{recordId}]# // For use in Subform Repeater to retrieve the subform's child id.

Form Binder Hash Variable

...

NameDescription
Prefixuser
Description

To get user information based on username.

Replace the username below in red with the actual username (example admin) or {currentUser.username}.

Attributes
  • #user.username.
Attributes
  • #user.username.id#
  • #user.username .username#
  • #user.username.firstName#
  • #user.username.lastName#
  • #user.username.fullName#
  • #user.username.email#
  • #user.username.active#
  • #user.username.timeZone#

In Joget Enterprise edition, these additional attributes are available:-

User Meta

  • #user.username.meta.KEY#
    To read additional user meta data stored in dir_user_meta table.
    Example: #user.cat.meta.duration# will return the value "100".

Organization

  • #user.username.organization.id#
  • #user.username.organization.name#
  • #user.username.organization.description#

Department

  • #user.username.department.id#
  • #user.username.department.name#
  • #user.username.department.description#

Grade

  • #user.username.grade.id#
  • #user.username.grade.name#
  • #user.username.grade.description#
  • #user.username.grade.organizationId#

HOD

  • #user.username.hod.username#
  • #user.username.hod.firstName#
  • #user.username.hod.lastName#
  • #user.username.hod.email#
  • #user.username.hod.active#
  • #user.username.hod.timeZone#

Group

  • #user.username.groups.id#
  • #user.username.groups.name#

Employment

  • #user.username.employee.code#
  • #user.username.employee.jobTitle#
  • #user.username.employee.isHod#

Department HOD

  • #user.username.department.hod.username#
  • #user.username.department.hod.firstName#
  • #user.username.department.hod.lastName#
  • #user.username.department.hod.email#
  • #user.username.department.hod.active#
  • #user.username.department.hod.timeZone#
Scope of Use
  • All components within the App.
Sample Attributes
  • #user.admin.groups.name#
  • #user.{currentUser.username}.groups.name#
  • #user.admin.email#
  • #user.{currentUser.username}.email#
  • #user.cat.firstName#
  • #user.{requestParam.username}.email# to retrieve the email address of the user passed via url parameter

...

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.characterEncoding#
  • #request.contextPath#
  • 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 #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

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

...

NameDescription
Prefixdatalist
DescriptionTo display the datalist records in a grid format in your form or email tool.
Attributes
  • #datalist.html.ID#
  • #datalist.csv.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.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.
Sample Attributes
  • #datalist.html.myDataList#
  • #datalist.csv.ImyDataList#
  • #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}]}]#

Expression Expression Hash Variable (New)

Panel
borderColorpurple
borderWidth1
titleBGColor#ddccff
borderStylesolid
titleNew Feature

This is a new feature in Joget DX.

NameDescription
Prefixexp
DescriptionMathematical 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.

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

...

  • .38905609893065
  • #exp.$toDegrees(5)# = 286.4788975654116
  • #exp.$toRadians(180.0)# = 3.141592653589793

Report Builder Hash Variable (New)

Panel
borderColorpurple
borderWidth1
titleBGColor#ddccff
borderStylesolid
titleNew Feature

This is a new feature in Joget DX if you are using the Report Builder custom plugin.

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 (New)

Panel
borderColorpurple
borderWidth1
titleBGColor#ddccff
borderStylesolid
titleNew Feature

This is a new feature in Joget DX if you are using the Report Code Builder custom plugin.

NameDescription
PrefixreportLinkcode
Description

To retrieve the

particular report

template based on the

reportId

code snippet ID.

Attributes
  • #reportLink.rp_report01##code.cs-templateId#
Scope of Use
  • All components within the App.
Sample Attributes
  • #reportLink#code.financialReport#cs-calculationScript#

Hash Variables In Joget Marketplace


Download Demo App

...

nameAPP_hash_variable_dx_kb.jwaheight150