...
As of now, the following functions are supported:
Function | Description | Using in ConfiForms Field macro | Using in ListVIew/PlanView/CalendarView or in IFTTT macro body | ||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
urlencode | Does URL encode on given value, see "urlEncode" method in | myfield.urlencode | [entry.myfield.urlencode] | ||||||||||||||||||||||||||||||||
escapeXML | Escapes XML on given value, see "escapeXml" method in | myfield.escapeXml | [entry.myfield.escapeXml] | ||||||||||||||||||||||||||||||||
escape | Escapes string as in "escapeForHtmlAttribute" method in | myfield.escapeForHtmlAttribute | [entry.myfield.escapeForHtmlAttribute] | ||||||||||||||||||||||||||||||||
formatDate | Tries to format date fields in the specified format, expects date format as in http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html | myfield.formatDate(JAVA_FORMAT) | [entry.myfield.formatDate(JAVA_FORMAT)] (no quotes) | ||||||||||||||||||||||||||||||||
jiraDate | Same as "formatDate" method above, but specifies constant dateformat pattern (yyyy-MM-dd), suitable for JIRA REST API | myfield.jiraDate | [entry.myfield.jiraDate] | ||||||||||||||||||||||||||||||||
jiraDateTime | Same as "formatDate" method above, but specifies constant dateformat pattern ("yyyy-MM-dd'T'HH:mm:ss.SSSZ"), should be compatible with ISO 8601 standard as JIRA requires when setting timestamps to JIRA fields | myfield.jiraDateTime | [entry.myfield.jiraDateTime] | ||||||||||||||||||||||||||||||||
escapeJSON | Escapes illegal characters in the field value to generate a valid JSON property. New lines, quotes, tabs and etc will be properly escaped
| myfield.escapeJSON | [entry.myfield.escapeJSON] | ||||||||||||||||||||||||||||||||
asArray asArrayMultiSelect asArrayMultiUserPicker | Tries to create an array from the value. Useful when you want to pass ConfiForms multi-select values to JIRA. Something like
There are variations to support other multi-select fields in JIRA
| myfield.asArray myfield.asArrayMultiSelect myfield.asArrayMultiUserPicker | [entry.myfield.asArray] [entry.myfield.asArrayMultiSelect] [entry.myfield.asArrayMultiUserPicker] | ||||||||||||||||||||||||||||||||
asArray(separator)
| Same as "asArray" without a parameter, but allows you to set own separator Example:
| myfield.asArray(separator) | [entry.myfield.asArray(separator)] | ||||||||||||||||||||||||||||||||
asArrayOfIds | Same as the above, but exporting IDs of the multi-select values in the following format:
| myfield.asArrayOfIds | [entry.myfield.asArrayOfIds] | ||||||||||||||||||||||||||||||||
asArrayOfKVPairs(key)
| Will output the list of values in a format:
Useful for adding JIRA labels, like when giving a key as "add"
| ||||||||||||||||||||||||||||||||||
replaceCRLFWithBR | Replaces CR/LF with <br/> tag to show with line brakes in HTML (useful when you reference the textarea field using [entry.] notation) | myfield.replaceCRLFWithBR | [entry.myfield.replaceCRLFWithBR] | ||||||||||||||||||||||||||||||||
replaceBRWithCRLF | Does the opposite to "replaceCRLFWithBR" and replaces <br/> tags with CRLF | ||||||||||||||||||||||||||||||||||
asUserFullNames | Works only with User multi-select fields and shows list of full names for selected users | myfield.asUserFullNames | [entry.myfield.asUserFullNames] | ||||||||||||||||||||||||||||||||
asUserEmails | Works only with User multi-select fields and shows list of emails for selected users | myfield.asUserEmails | [entry.myfield.asUserEmails] | ||||||||||||||||||||||||||||||||
asUserNames | Works only with User multi-select fields and shows list of usernames for selected users | myfield.asUserNames | [entry.myfield.asUserNames] | ||||||||||||||||||||||||||||||||
friendlyDate | Formatting date and date/time field types with https://docs.atlassian.com/confluence/latest/com/atlassian/confluence/core/datetime/FriendlyDateFormatter.html | myfield.friendlyDate | [entry.myfield.friendlyDate] | ||||||||||||||||||||||||||||||||
asCount | Returns size of a collection for multi-value fields or number of chars for other types | myfield.asCount | [entry.myfield.asCount] | ||||||||||||||||||||||||||||||||
asSize | Returns size of a collection for multi-value fields or number of chars for other types (same as "count") | myfield.asSize | [entry.myfield.asSize] | ||||||||||||||||||||||||||||||||
asLength | Returns size of a collection for multi-value fields or number of chars for other types | myfield.asLength | [entry.myfield.asLength] | ||||||||||||||||||||||||||||||||
formatCurrency | Tries to format value as currency using either default or given format https://docs.oracle.com/javase/7/docs/api/java/text/DecimalFormat.html If value could not be formatted according to given format then value will be returned as is
| myfield.formatCurrency(JAVA_FORMAT) myfield.formatCurrency() (default decimal format is used if empty) | [entry.myfield.formatCurrency(JAVA_FORMAT)] (no quotes, JAVA_FORMAT could be empty, default will be used) [entry.myfield.formatCurrency(# ###.##)] [entry.myfield.formatCurrency(# ###.00)] | ||||||||||||||||||||||||||||||||
formatNumber | alias to formatCurrency | myfield.formatNumber(JAVA_FORMAT) myfield.formatNumber() (default decimal format is used if empty) | [entry.myfield.formatNumber(JAVA_FORMAT)] [entry.myfield.formatNumber(# ###.##)] [entry.myfield.formatNumber(# ###.00)] | ||||||||||||||||||||||||||||||||
asFilteredBy(FILTER) | Very powerful function to extract the value by given filter (mostly used for multi-value fields). Especially useful with Multi-select fields which are of type "smart fields", the ones referencing other forms and fields Example: You have one form which has a field called "mf" which holds multi-value references to another form which has the following fields: name, surname, position Then... when showing the data from the first form you can actually show only specific choices. For example:
| entry.mf.asFilteredBy(FILTER) | Filter should be in a format: property:filter [entry.mf.asFilteredBy(name:Alex)] The following filters are supported:
| ||||||||||||||||||||||||||||||||
trimAllSpaces | Removes all the spaces in the field value. Can be used when creating page labels automatically from ConfiForms field values and want to ensure the value is taken as a label and not split by spaces into differenet labels | entry.myfield.trimAllSpaces | [entry.myfield.trimAllSpaces] | ||||||||||||||||||||||||||||||||
camelCase | Makes a CamelCase string from a given value | entry.myfield.camelCase | [entry.myfield.camelCase] | ||||||||||||||||||||||||||||||||
camelCaseAndTrim | Makes a CamelCase string from a given value and, additionally, removes all the spaces | entry.myfield.camelCaseAndTrim | [entry.myfield.camelCaseAndTrim] | ||||||||||||||||||||||||||||||||
addCRLF | Adds CR and LF characters after the value | entry.addCRLF | [entry.addCRLF] | ||||||||||||||||||||||||||||||||
addCRLFHtml | Adds <br/> (brake) after the value in HTML format | entry.addCRLFHtml | [entry.addCRLFHtml] | ||||||||||||||||||||||||||||||||
trunc(NUMBER) truncLeft(NUMBER) truncRight(NUMBER) | Truncates the value. Leaves "n" first symbols | entry.trunc(100) | [entry.trunc(100)] | ||||||||||||||||||||||||||||||||
trim(NUMBER) trimLeft(NUMBER) | Trims the value, Skips "n" first symbols | entry.trim(10) | [entry.trim(10)] | ||||||||||||||||||||||||||||||||
trimRight(NUMBER) | Trims the value, Removes "n" last symbols | ||||||||||||||||||||||||||||||||||
asAttachment asAttachment(n) | You can reference a particular attachment stored in Confluence and linked though ConfiForms Field (either File or Attachment picker) n - is the index of the attachment stored/linked using ConfiForms Field. Index starts with 0. When no index is specified, then the 1st attachment is taken (1st attachment is stored with index 0) This means that
This function is a "bridge" to get other properties of the attachment stored. See below. | entry.asAttachment | [entry.asAttachment] [entry.asAttachment(0)] [entry.asAttachment(1)] | ||||||||||||||||||||||||||||||||
asAttachment.base64 asAttachment(1).base64 | Returns bas64 encoded string of the file contents in this attachment | entry.asAttachment.base64 | [entry.asAttachment.base64] [entry.asAttachment(0).base64] [entry.asAttachment(1).base64] | ||||||||||||||||||||||||||||||||
asAttachment.ANY_PROPERTY asAttachment(n).ANY_PROPERTY | Where ANY_PROPERTY is the "get" methods of the class Attachment https://docs.atlassian.com/confluence/5.9.1/com/atlassian/confluence/pages/Attachment.html Examples:
| ||||||||||||||||||||||||||||||||||
asUsers
| Converts multi-user / multi-owner (ownedBy field in ConfiForms) field values to list of user objects, which can be then transformed into the desired output as needed, for example:
Any property of the User object (see below) is accessible | ||||||||||||||||||||||||||||||||||
asUser.username asUser.fullName asUser.email asUser(n).username asUser(n).fullName asUser(n).email | When working with multi-select user control/field and want to get a particular user info
| ||||||||||||||||||||||||||||||||||
asEntryRef(REF_TO_ENTRY) |
| ||||||||||||||||||||||||||||||||||
asVelocityExpRef(VALUE)
| Same as asEntryRef, and asIFTTTRef, but returns a value wrapped in ${}, like ${VALUE} | ||||||||||||||||||||||||||||||||||
asJSON | Converts a value to JSON and allows to access JSON object properties | entry.myfield.asJSON.someJSONProperty entry.myfield.asJSON.anotherJSONProperty | |||||||||||||||||||||||||||||||||
asRef(VALUE)
| Same as asEntryRef, and asIFTTTRef, but returns the exact experssion as you have put inside the arguments asRef(VALUE) will return VALUE | ||||||||||||||||||||||||||||||||||
asUserProfile | Converts to User profile (or tries to, if a given field value can be resulved as a user object) Available user profile properties (all standard ones, available in the profile) to reference are:
| entry.somefield.asUserProfile.phone entry.somefield.asUserProfile.im entry.somefield.asUserProfile.website entry.somefield.asUserProfile.position entry.somefield.asUserProfile.department entry.somefield.asUserProfile.location
| [entry.somefield.asUserProfile.phone] [entry.somefield.asUserProfile.im] [entry.somefield.asUserProfile.website] [entry.somefield.asUserProfile.position] [entry.somefield.asUserProfile.department] [entry.somefield.asUserProfile.location] | ||||||||||||||||||||||||||||||||
asList | Extracts values of a list and converts to a comma-separated string, see below for examples on transform and asList | ||||||||||||||||||||||||||||||||||
asAttachments | Converts the file/attachment field values into the array of Attachment objects https://docs.atlassian.com/confluence/5.9.1/com/atlassian/confluence/pages/Attachment.html | ||||||||||||||||||||||||||||||||||
transform(property_name) | Converts the list of some objects into the list of values for the given property For example:
When "myfile" is a field of type file/attachment, a function "asAttachments" will convert it's values into the list of Attachments objects and then function "transform" will extract and "id" property of each Attachment object and will put it into the resulting list
Same as in previous example, but we convert the otput into a comma separated list of attachment IDs Below, is another example, which returns a result of ID's, but wrapped into quotes
Function "transform" can be used on a multi-value field.(on Multi-select fields, which hold the structure of ID and LABEL (properties "id" and "label")) See Accessing field values and properties and dropdown fields For example, to get the list of dropdown IDs
To get the list of dropdown labels
To get the list of User's full names for multi-user field (User field has properties: fullName, username, email, lastName, firstname) See Accessing field values and properties
same as above, but in "coma-separated" string
| ||||||||||||||||||||||||||||||||||
add(number) | Adds a numeric value to a field (can substract as well, if a negative number is given)
to add 1 day to the date (value of 86400000 is in milliseconds)
to add -1 day (substract a day) to the date (value of 86400000 is in milliseconds) | ||||||||||||||||||||||||||||||||||
multiply(number) | Multiplies value by given parameter value
| ||||||||||||||||||||||||||||||||||
divide(number) | Divides value by given parameter value
| ||||||||||||||||||||||||||||||||||
split(separator)
| Split is an intermediate function to help you with transforming the string values into the arrays of strings, which then can be used with "array type" virtual functions For example: We have a field type called "mytextfield" and want it's content to be passed to JIRA as labels. For this we need to make sure we split the entered text by "space" and then use a corresponding virtual function to transform the object inti the desired representation
Any other "array type" function can be applied. For example to get the count, one will write the following
| ||||||||||||||||||||||||||||||||||
hasChanged(fieldName)
By using
| Now you can easily understand if the field value has been changed or not. Can be used Example in IFTTT macro: The result of the function is a boolean, "true" is returned when the value for the field is different from current, and "false" is returned otherwise Example:
or
In addition to "hasChanged" function, ConfiForms has a support to get "previous state" of the record. And that is using a "virtual property" called: "_previousState" Below example has the same result as "hasChanged(somefield):true"
This expression could be also used with IFTTT macro condition to determine if the value has been changed, but also allows you to create a more sophisticated filters like the one below:
Checks if the value has been changed and if the previous value was bigger than current
| ||||||||||||||||||||||||||||||||||
asUserLink asUserLinks (same as above, but works on user multiselect fields)
Also, there is a function which renders it as a macro: useful for usage withing a template or LIstView/CalendarView asUserLinkMacro | Generates a macro
and renders the HTML out of it USER_KEY_HERE is looked up by function based on the username given | entry.myfield.asUserLink | [entry.myfield.asUserLink] on multi-select user fields use [entry.myfield.asUserLinks] | ||||||||||||||||||||||||||||||||
asLink
asLinks
asLink(Some label)
| Returns value as HTML link (<a href="VALUE">VALUE</a>) Also, for collections: function "asLinks" | entry.myfield.asLink entry.myfield.asLink(I am a link label) | [entry.myfield.asLink] [entry.myfield.asLink(I am a label)] | ||||||||||||||||||||||||||||||||
acLink acLinkMacro | Renders a link to local resource acLinkMacro functions generates a macro only (without rendering to HTML)
| ||||||||||||||||||||||||||||||||||
parseDate(FORMAT)
| Tries to format date fields in the specified format, expects date format as in http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html Example on how to parse and format a date from JIRA issue
In this example we have a field called "jirakey" in ConfiForms Form, and access a property "created" from JIRA issue. Then we parse the created date, using the format JIRA uses when returning the date/time field via REST API and then we format the date using another virtual function called "formatDate" to show it as year-month-day only | entry.myfield.parseDate(JAVA_FOMAT) | [entry.myfield.parseDate(JAVA_FOMAT)] Returns a timestamp, which you can transform to date using formatDate function or use as a filtering criteria | ||||||||||||||||||||||||||||||||
join
| You can join the field values into one string. Works best on multi-select fields Form example (expect a field to be a multi-select field here):
Will extract the ID's from a record stored, and then join (concatenate) those ID's into one string, separated by OR id: Something like this (when mymultifield contains 2 items):
| entry.myfield..join(SOME VALUE) | [entry,myfield.join(, Hello: )] | ||||||||||||||||||||||||||||||||
asJIRAIssue
| Helps you to transform the values of a "JIRA Issues multi-select" field into a JIRA objects to allow access to any property/field of the JIRA issue | entry.myfield.asJIRAIssue.key entry.myfield.asJIRAIssue.fields.customfield_x | Any property from JIRA issue, See Accessing field values and properties for JIRA field type | ||||||||||||||||||||||||||||||||
asInsightObject
| Helps you to transform the values of a "Insight Objects multi-select" field into a list of Insight Objects, which can be then transformed via "transform" function or properties can be accesssed directy | ||||||||||||||||||||||||||||||||||
asPage
| Helps you to transform the values saved to Page objects when used on Page/BlogPosts multi-select field | entry.myfield.asPage.spaceKey | Any property from a Page object, see Accessing field values and properties | ||||||||||||||||||||||||||||||||
userInSecurityGroup securityGroupHas
| Both functions allow you to check if a particular user belongs to a given security group or not Examples: If field "u" is holding a username and we want to check if this user belongs to "confluence-administrators" group
If field "sg" holds a name of a security group and we want top check if a username is in this security group
In the example below we check the same, but for currently logged in user
Both functions return "true" when condition is matched and "false" otherwise (without quotes) This means that if you need to put a filter to check the condition, the full expression will look like:
or
| ||||||||||||||||||||||||||||||||||
get(index)
Using get() without an index will return the last item from the list
| Get's the element by index form a multi-value field To get the first element (index starts from 0)
Another example with chaining the functions (when somefield holds a string value and we split it by "," and get the first element)
| ||||||||||||||||||||||||||||||||||
append
| Appends text to a value Will append a space to the value of "somefield"
For multi-select dropdown, adding space after transformation and shows in as html link
| ||||||||||||||||||||||||||||||||||
prepend
| Prepends text to a value Will append a space to the value of "somefield"
| ||||||||||||||||||||||||||||||||||
lowerCase
| Returns a lowercases value for the field | ||||||||||||||||||||||||||||||||||
upperCase
| Returns a uppercased value for the field | ||||||||||||||||||||||||||||||||||
formatLinks
| Tries to format the http(s) links found in the text as HTML links
| ||||||||||||||||||||||||||||||||||
greenhopperAsJSON
| Tries to parse the fiedl value returned by JIRA API for greenhopper fields
to a structure you can access via properties
Example (to return a sprint name)
| ||||||||||||||||||||||||||||||||||
asIFTTTRef(RESULT_NAME_AND_MORE)
| The idea and the need for this function is the same as described for function asEntryRef(REF_TO_ENTRY) This allows you to "escape" the ${IftttResult_NAME.someproperty} into a function to workaround template evaluations against the current record. Useful when your ConfiForms Form creates a page with another ConfiFormiForms Form and that form has various rules using iftttResults or entry.fieldnames
| ||||||||||||||||||||||||||||||||||
asUserProfileLink
| Outputs a field value as a link to user profile (with avatar and full name). The field must have a username as a value
| ||||||||||||||||||||||||||||||||||
replaceAccents replaceAccents()
| Replaces the following accents letters using the folllwing mapping
| ||||||||||||||||||||||||||||||||||
replaceWith(searchstring,replacewith)
| Replaces every value matching "search string" in a field with given "replace with" value
Will match every "hi" and replace it with "hola" | ||||||||||||||||||||||||||||||||||
formatLink(url) formatLink(url|label)
| Helps you to create http links from values in ConfiForms directly in teh views
the below example shows how to specify a contant label for your links
| ||||||||||||||||||||||||||||||||||
timestamp
| Tries to get the timestamp from date/datetime/timestamp holding fields in epoch format | ||||||||||||||||||||||||||||||||||
asHex
| Converts string into hex representation
You can use it with other functions, as usual... something like
| ||||||||||||||||||||||||||||||||||
dec2Hex
| Converts decimals to hex
As always, you can chain the functions
| ||||||||||||||||||||||||||||||||||
randomInt(minVal)
| You can generate tips from ConfiForms data with something like
To show "random" advice from your form of "advices" Where "valuecounter" field is autonumber field and we randomly picking one record from a dataset, starting from 1 (that is why we use "randomInt(1)" function on _total field) | ||||||||||||||||||||||||||||||||||
toString | Ensures the value is a string value | ||||||||||||||||||||||||||||||||||
timezoneAwareDate | Tries to format the date given in the user's timezone. Uses user's defined formatting pattern to format the date | ||||||||||||||||||||||||||||||||||
timezoneAwareDateTime | Tries to format the date/time given in the user's timezone. Uses user's defined formatting pattern to format the datetime | ||||||||||||||||||||||||||||||||||
formatNumberWithLocale(COUNTRY) | Formats number with a given locale
See supported locales in Java 8, https://www.oracle.com/technetwork/java/javase/java8locales-2095355.html | ||||||||||||||||||||||||||||||||||
compactDateTimeInterval
| Helper function to render DateTime Interval field values in a more compact way when the date for start and end is within the same day
Example (the output format is specific to your Confluence date/time formatting settings):
| ||||||||||||||||||||||||||||||||||
truncWithExpand(N) where N is the number of characters to show
|
will show the first 10 symbols and if the value is longer then the "..." block will be shown to allow your users to expand the value |
Info |
---|
If entry value is null or could not be formatted according to rules then value is returned as-is |
...