<#import "/ix/v2/utils/formatterUtils_v2.ftlx" as fmt> <#-- endingParen: Handles parens and spacing between fields. Necessary for comma to appear correctly spaced --> <#macro endingParen hasNext> <#compress> <#if hasNext> ), <#else> ) <#-- interfaceField: Creates a literal value editor appropriate for the xsdType --> <#macro interfaceField field indentation hasNext recordUuid> <#local padding = ""?left_pad(2*indentation) label = "${field.friendlyName}" type = field.type required = "${field.required?c}" fieldAccessor = recordUuid?has_content?then('ri!record[#"urn:appian:record-field:v1:${recordUuid}/${field.uuid}"]'?no_esc, "ri!record.${field.name}") fieldSystemRule = { "xsd:int": "SYSTEM_SYSRULES_integerField", "xsd:double": "SYSTEM_SYSRULES_floatingPointField", "xsd:date": "SYSTEM_SYSRULES_dateField", "xsd:dateTime": "SYSTEM_SYSRULES_dateTimeField" } lengthLimit = (field.lengthLimit)! /> <#if field.relationshipType?? && field.relationshipType == "MANY_TO_ONE" && field.isTargetFieldPkField?boolean> <@manyToOneRecordPicker field=field indentation=indentation hasNext=hasNext fieldAccessor=fieldAccessor required=required label=label/> <#elseif type.qName?? && type.qName == "{http://www.appian.com/ae/types/2009}Group"> <@groupPicker field=field padding=padding hasNext=hasNext fieldAccessor=fieldAccessor label=label/> <#elseif type.qName?? && type.qName == "{http://www.appian.com/ae/types/2009}User"> <@userPicker recordUuid=recordUuid field=field padding=padding hasNext=hasNext fieldAccessor=fieldAccessor label=label/> <#elseif type.xsdType == "xsd:string"> ${padding}#"SYSTEM_SYSRULES_textField"( ${padding} label: "<@fmt.sailEscape string=label/>", ${padding} labelPosition: "ABOVE", ${padding} required: ${required}, ${padding} value: ${fieldAccessor}, <#if lengthLimit?has_content> ${padding} saveInto: ${fieldAccessor}, ${padding} characterLimit: ${lengthLimit?string.computer} <#else> ${padding} saveInto: ${fieldAccessor} ${padding}<@endingParen hasNext=hasNext/> <#elseif type.xsdType == "xsd:boolean"> ${padding}#"SYSTEM_SYSRULES_checkboxField"( ${padding} labelPosition: "COLLAPSED", ${padding} required: ${required}, ${padding} choiceLabels: { ${padding} "<@fmt.sailEscape string=label/>" ${padding} }, ${padding} choiceValues: { ${padding} true ${padding} }, ${padding} value: if( ${padding} ${fieldAccessor}, ${padding} true, ${padding} null ${padding} ), ${padding} saveInto: a!save( ${padding} ${fieldAccessor}, ${padding} if( ${padding} isnull( ${padding} save!value ${padding} ), ${padding} false, ${padding} true ${padding} ) ${padding} ) ${padding}<@endingParen hasNext=hasNext/> <#else> ${padding}#"${fieldSystemRule[type.xsdType]}"( ${padding} label: "<@fmt.sailEscape string=label/>", ${padding} labelPosition: "ABOVE", ${padding} required: ${required}, ${padding} value: ${fieldAccessor}, ${padding} saveInto: ${fieldAccessor} ${padding}<@endingParen hasNext=hasNext/> <#-- interfaceColumn: Creates a column of fields --> <#macro interfaceColumn column indentation hasNext recordUuid=""> <#local padding = ""?left_pad(2*indentation)/> ${padding}#"SYSTEM_SYSRULES_columnLayout"( <#if column?has_content> ${padding} contents: { <#list column as f> <@interfaceField field=f indentation=indentation+2 hasNext=f?has_next recordUuid=recordUuid/> ${padding} } <#else> ${padding} contents: {} ${padding}<@endingParen hasNext=hasNext/> <#-- readOnlyInterfaceField: Creates a read only field appropriate for the xsdType --> <#macro readOnlyInterfaceField field indentation hasNext recordUuid recordVariable i18n> <#local padding = ""?left_pad(2*indentation) label = "${field.friendlyName}" type = field.type fieldAccessor = '${recordVariable}[#"urn:appian:record-field:v1:${recordUuid}/${field.uuid}"]'?no_esc /> <#if type == "{http://www.appian.com/ae/types/2009}Date"> ${padding}#"SYSTEM_SYSRULES_richTextDisplayField"( ${padding} label: "<@fmt.sailEscape string=label/>", ${padding} labelPosition: "JUSTIFIED", ${padding} value: if( ${padding} isnull( ${padding} ${fieldAccessor} ${padding} ), ${padding} "–", ${padding} { ${padding} #"SYSTEM_SYSRULES_richTextIcon"( ${padding} icon: "calendar", ${padding} color: "SECONDARY" ${padding} ), ${padding} " ", ${padding} #"SYSTEM_SYSRULES_richTextItem_v1"( ${padding} text: text( ${padding} ${fieldAccessor}, ${padding} "mmmm d, yyyy" ${padding} ) ${padding} ) ${padding} } ${padding} ) ${padding}<@endingParen hasNext=hasNext/> <#elseif type == "{http://www.appian.com/ae/types/2009}Time"> ${padding}#"SYSTEM_SYSRULES_richTextDisplayField"( ${padding} label: "<@fmt.sailEscape string=label/>", ${padding} labelPosition: "JUSTIFIED", ${padding} value: if( ${padding} isnull( ${padding} ${fieldAccessor} ${padding} ), ${padding} "–", ${padding} { ${padding} #"SYSTEM_SYSRULES_richTextIcon"( ${padding} icon: "clock-o", ${padding} color: "SECONDARY" ${padding} ), ${padding} " ", ${padding} #"SYSTEM_SYSRULES_richTextItem_v1"( ${padding} text: ${fieldAccessor} ${padding} ) ${padding} } ${padding} ) ${padding}<@endingParen hasNext=hasNext/> <#elseif type == "{http://www.appian.com/ae/types/2009}Datetime"> ${padding}#"SYSTEM_SYSRULES_richTextDisplayField"( ${padding} label: "<@fmt.sailEscape string=label/>", ${padding} labelPosition: "JUSTIFIED", ${padding} value: if( ${padding} isnull( ${padding} ${fieldAccessor} ${padding} ), ${padding} "–", ${padding} { ${padding} #"SYSTEM_SYSRULES_richTextIcon"( ${padding} icon: "calendar-o", ${padding} color: "SECONDARY" ${padding} ), ${padding} " ", ${padding} #"SYSTEM_SYSRULES_richTextItem_v1"( ${padding} text: text( ${padding} ${fieldAccessor}, ${padding} "mmmm d, yyyy h:mm AM/PM" ${padding} ) ${padding} ) ${padding} } ${padding} ) ${padding}<@endingParen hasNext=hasNext/> <#elseif type == "{http://www.appian.com/ae/types/2009}Boolean"> ${padding}#"SYSTEM_SYSRULES_richTextDisplayField"( ${padding} label: "<@fmt.sailEscape string=label/>", ${padding} labelPosition: "JUSTIFIED", ${padding} value: if( ${padding} isnull( ${padding} ${fieldAccessor} ${padding} ), ${padding} "–", ${padding} { ${padding} #"SYSTEM_SYSRULES_richTextIcon"( ${padding} icon: if( ${padding} ${fieldAccessor}, ${padding} "check-circle", ${padding} "times-circle" ${padding} ), ${padding} color: if( ${padding} ${fieldAccessor}, ${padding} "POSITIVE", ${padding} "NEGATIVE" ${padding} ) ${padding} ), ${padding} if( ${padding} ${fieldAccessor}, ${padding} " <@fmt.sailEscape string=i18n.booleanYes/>", ${padding} " <@fmt.sailEscape string=i18n.booleanNo/>" ${padding} ) ${padding} } ${padding} ) ${padding}<@endingParen hasNext=hasNext/> <#elseif type == "{http://www.appian.com/ae/types/2009}Decimal"> ${padding}#"SYSTEM_SYSRULES_textField"( ${padding} label: "<@fmt.sailEscape string=label/>", ${padding} labelPosition: "JUSTIFIED", ${padding} value: if( ${padding} isnull( ${padding} ${fieldAccessor} ${padding} ), ${padding} "–", ${padding} text( ${padding} ${fieldAccessor}, ${padding} "#.##" ${padding} ) ${padding} ), ${padding} readOnly: true ${padding}<@endingParen hasNext=hasNext/> <#elseif type == "{http://www.appian.com/ae/types/2009}User"> ${padding}#"SYSTEM_SYSRULES_sideBySideLayout"( ${padding} alignVertical: "MIDDLE", ${padding} items: if( ${padding} or( ${padding} isnull( ${padding} ${fieldAccessor} ${padding} ), ${padding} not( ${padding} isusernametaken( ${padding} ${fieldAccessor} ${padding} ) ${padding} ) ${padding} ), ${padding} #"SYSTEM_SYSRULES_sideBySideItem"( ${padding} item: #"SYSTEM_SYSRULES_textField"( ${padding} label: "<@fmt.sailEscape string=label/>", ${padding} labelPosition: "JUSTIFIED", ${padding} value: "–", ${padding} readOnly: true ${padding} ) ${padding} ), ${padding} { ${padding} #"SYSTEM_SYSRULES_sideBySideItem"( ${padding} item: #"SYSTEM_SYSRULES_imageField_v1"( ${padding} label: "<@fmt.sailEscape string=label/>", ${padding} labelPosition: "JUSTIFIED", ${padding} images: #"SYSTEM_SYSRULES_userImage"( ${padding} user: ${fieldAccessor} ${padding} ), ${padding} size: "TINY", ${padding} style: "AVATAR" ${padding} ), ${padding} width: "MINIMIZE" ${padding} ), ${padding} #"SYSTEM_SYSRULES_sideBySideItem"( ${padding} item: #"SYSTEM_SYSRULES_richTextDisplayField"( ${padding} labelPosition: "COLLAPSED", ${padding} value: #"SYSTEM_SYSRULES_richTextItem_v1"( ${padding} text: { ${padding} user( ${padding} ${fieldAccessor}, ${padding} "firstName" ${padding} ), ${padding} " ", ${padding} user( ${padding} ${fieldAccessor}, ${padding} "lastName" ${padding} ) ${padding} }, ${padding} link: #"SYSTEM_SYSRULES_userRecordLink"( ${padding} user: ${fieldAccessor} ${padding} ) ${padding} ) ${padding} ) ${padding} ) ${padding} } ${padding} ) ${padding}<@endingParen hasNext=hasNext/> <#elseif type == "{http://www.appian.com/ae/types/2009}Group"> ${padding}#"SYSTEM_SYSRULES_richTextDisplayField"( ${padding} label: "<@fmt.sailEscape string=label/>", ${padding} labelPosition: "JUSTIFIED", ${padding} value: if( ${padding} isnull( ${padding} ${fieldAccessor} ${padding} ), ${padding} "–", ${padding} { ${padding} #"SYSTEM_SYSRULES_richTextIcon"( ${padding} icon: "users", ${padding} color: "SECONDARY" ${padding} ), ${padding} " ", ${padding} #"SYSTEM_SYSRULES_richTextItem_v1"( ${padding} text: group( ${padding} ${fieldAccessor}, ${padding} "groupName" ${padding} ) ${padding} ) ${padding} } ${padding} ) ${padding}<@endingParen hasNext=hasNext/> <#elseif field.relationshipType?? && field.relationshipType == "MANY_TO_ONE"> ${padding}#"SYSTEM_SYSRULES_textField"( ${padding} label: "<@fmt.sailEscape string=field.properRelationshipName/>", ${padding} labelPosition: "JUSTIFIED", ${padding} value: a!defaultValue( ${padding} if( ${padding} isnull( ${padding} ${fieldAccessor} ${padding} ), ${padding} "–", ${padding} index( ${padding} #"SYSTEM_SYSRULES_queryRecordType_v1"( ${padding} recordType: #"urn:appian:record-type:v1:${field.targetUuid}", ${padding} fields: #"urn:appian:record-field:v1:${field.targetUuid}/${field.targetLabelFieldUuid}", ${padding} pagingInfo: #"SYSTEM_SYSRULES_pagingInfo"(startIndex: 1, batchSize: 1), ${padding} filters: #"SYSTEM_SYSRULES_queryFilter"( ${padding} field: #"urn:appian:record-field:v1:${field.targetUuid}/${field.targetFieldUuid}", ${padding} operator: "=", ${padding} value: ${fieldAccessor} ${padding} ) ${padding} ).data, ${padding} 1, ${padding} #"urn:appian:record-field:v1:${field.targetUuid}/${field.targetLabelFieldUuid}", ${padding} null ${padding} ) ${padding} ), ${padding} "–" ${padding} ), ${padding} readOnly: true ${padding}<@endingParen hasNext=hasNext/> <#else> ${padding}#"SYSTEM_SYSRULES_textField"( ${padding} label: "<@fmt.sailEscape string=label/>", ${padding} labelPosition: "JUSTIFIED", ${padding} value: a!defaultValue( ${padding} ${fieldAccessor}, ${padding} "–" ${padding} ), ${padding} readOnly: true ${padding}<@endingParen hasNext=hasNext/> <#-- readOnlyInterfaceColumn: Creates a column of fields --> <#macro readOnlyInterfaceColumn column indentation hasNext recordUuid recordVariable i18n> <#local padding = ""?left_pad(2*indentation)/> ${padding}#"SYSTEM_SYSRULES_columnLayout"( <#if column?has_content> ${padding} contents: { <#list column as f> <@readOnlyInterfaceField field=f indentation=indentation+2 hasNext=f?has_next recordUuid=recordUuid recordVariable=recordVariable i18n=i18n/> ${padding} } <#else> ${padding} contents: {} ${padding}<@endingParen hasNext=hasNext/> <#-- createRelatedRecordGrid: creates a grid of a related record--> <#macro createRelatedRecordGrid relationship baseRecordUuid indentation> <#local padding = ""?left_pad(2*indentation)/> ${padding}#"SYSTEM_SYSRULES_gridField_v1"( ${padding} data: #"SYSTEM_SYSRULES_recordData"( ${padding} recordType: #"urn:appian:record-type:v1:${relationship.targetRecordTypeUuid}", ${padding} filters: #"SYSTEM_SYSRULES_queryLogicalExpression"( ${padding} operator: "AND", ${padding} filters: { ${padding} #"SYSTEM_SYSRULES_queryFilter"( ${padding} field: #"urn:appian:record-field:v1:${relationship.targetRecordTypeUuid}/${relationship.targetRecordTypeFieldUuid}", ${padding} operator: "=", ${padding} value: ri!record[#"urn:appian:record-field:v1:${baseRecordUuid}/${relationship.sourceRecordTypeFieldUuid}"] ${padding} ) ${padding} }, ${padding} ignoreFiltersWithEmptyValues: true ${padding} ) ${padding} ), <#if relationship.gridColumnsExpression??> <#list relationship.gridColumnsExpression?split("\n") as exprLine> ${padding}${exprLine} <#else> ${padding} columns: { <#list relationship.fields as f> <@createRecordFieldColumn recordUuid=relationship.targetRecordTypeUuid fieldName=f.friendlyName fieldUuid=f.uuid indentation=indentation hasNext=f?has_next isFirst=f?is_first/> ${padding} }, ${padding} pageSize: 5, ${padding} rowHeader: 1, ${padding} showSearchBox: false, ${padding} showRefreshButton: false ${padding}) <#-- createRecordFieldColumn: creates a grid column for a field of a related record --> <#macro createRecordFieldColumn recordUuid fieldName fieldUuid indentation hasNext isFirst> <#local padding = ""?left_pad(2*indentation)/> ${padding} #"SYSTEM_SYSRULES_gridColumn"( ${padding} label: "<@fmt.sailEscape string=fieldName/>", ${padding} sortField: #"urn:appian:record-field:v1:${recordUuid}/${fieldUuid}", <#if isFirst> ${padding} value:<@createLinkField recordUuid=recordUuid fieldUuid=fieldUuid fieldName=fieldName indentation=indentation/> <#else> ${padding} value: fv!row[#"urn:appian:record-field:v1:${recordUuid}/${fieldUuid}"] ${padding} <@endingParen hasNext=hasNext/> <#-- createLinkField: creates a link field of a related record--> <#macro createLinkField recordUuid fieldUuid fieldName indentation> <#local padding = ""?left_pad(2*indentation)/> #"SYSTEM_SYSRULES_linkField"( ${padding} links: { ${padding} #"SYSTEM_SYSRULES_recordLink"( ${padding} label: fv!row[#"urn:appian:record-field:v1:${recordUuid}/${fieldUuid}"], ${padding} recordType: #"urn:appian:record-type:v1:${recordUuid}", ${padding} identifier: fv!identifier ${padding} ) ${padding} } ${padding} ) <#-- manyToOneRecordPicker: creates a record picker component for many-to-one relationship fields--> <#macro manyToOneRecordPicker field indentation hasNext fieldAccessor required label> <#local padding = ""?left_pad(2*indentation)/> ${padding}#"SYSTEM_SYSRULES_pickerFieldRecords_v2"( ${padding} label: "<@fmt.sailEscape string=label/>", ${padding} labelPosition: "ABOVE", ${padding} placeholder: "<@fmt.sailEscape string=field.relationshipPlaceholderText/>", ${padding} maxSelections: 1, ${padding} recordType: #"urn:appian:record-type:v1:${field.targetUuid}", ${padding} value: ${fieldAccessor}, ${padding} saveInto: ${fieldAccessor} ${padding}<@endingParen hasNext=hasNext/> <#macro groupPicker field padding hasNext fieldAccessor label> ${padding}#"SYSTEM_SYSRULES_pickerFieldGroups"( ${padding} label: "<@fmt.sailEscape string=label/>", ${padding} labelPosition: "ABOVE", ${padding} maxSelections: 1, ${padding} value: ${fieldAccessor}, ${padding} saveInto: ${fieldAccessor}, ${padding} validations: {} ${padding}<@endingParen hasNext=hasNext/> <#macro userPicker recordUuid field padding hasNext fieldAccessor label> ${padding}#"SYSTEM_SYSRULES_pickerFieldUsers"( ${padding} label: "<@fmt.sailEscape string=label/>", ${padding} labelPosition: "ABOVE", ${padding} maxSelections: 1, ${padding} value: ${fieldAccessor}, ${padding} saveInto: ${fieldAccessor}, ${padding} validations: {} ${padding}<@endingParen hasNext=hasNext/> <#macro eventHistoryListField recordEventsCfg padding> ${padding}#"SYSTEM_SYSRULES_eventHistoryListField"( ${padding} eventStyle: "PREVIEW_LIST", ${padding} previewListPageSize: 10, ${padding} displayUser: "IMAGE", ${padding} eventData: #"SYSTEM_SYSRULES_eventData"( ${padding} recordType: #"urn:appian:record-type:v1:${recordEventsCfg.eventRecordTypeUuid}", ${padding} user: #"urn:appian:record-field:v1:${recordEventsCfg.eventRecordTypeUuid}/${recordEventsCfg.userFieldUuid}", ${padding} timestamp: #"urn:appian:record-field:v1:${recordEventsCfg.eventRecordTypeUuid}/${recordEventsCfg.timestampFieldUuid}", ${padding} eventTypeName: fv!data[#"urn:appian:record-field:v1:${recordEventsCfg.eventRecordTypeUuid}/${recordEventsCfg.eventTypeRelationshipUuid}/${recordEventsCfg.eventTypeFieldUuid}"], ${padding} filters: #"SYSTEM_SYSRULES_queryLogicalExpression"( ${padding} operator: "AND", ${padding} filters: { ${padding} #"SYSTEM_SYSRULES_queryFilter"( ${padding} field: #"urn:appian:record-field:v1:${recordEventsCfg.eventRecordTypeUuid}/${recordEventsCfg.eventRelationshipTargetFieldUuid}", ${padding} operator: "=", ${padding} value: ri!record[#"urn:appian:record-field:v1:${recordEventsCfg.baseRecordTypeUuid}/${recordEventsCfg.baseRecordTypePkFieldUuid}"] ${padding} ) ${padding} }, ${padding} ignoreFiltersWithEmptyValues: true ${padding} ) ${padding} ) ${padding}) <#macro createRelationshipSectionLayouts relationships baseIndentation i18n> <#local padding = ""?left_pad(2*baseIndentation)/> <#list relationships as relationship> ${padding}#"SYSTEM_SYSRULES_sectionLayout_v1"( ${padding} label: "<@fmt.sailEscape string=relationship.name/>", ${padding} contents: { <#if relationship.relationshipType == "ONE_TO_MANY"> <@createRelatedRecordGrid relationship=relationship baseRecordUuid=baseRecordUuid indentation=2+baseIndentation/> <#elseif relationship.relationshipType == "BASE"> ${padding} #"SYSTEM_SYSRULES_columnsLayout"( ${padding} columns: { <#if relationship.fields?has_content> <#assign columnOneIndices = (0..relationship.fields?size-1)?filter(x -> x % 2 == 0) columnTwoIndices = (0..relationship.fields?size-1)?filter(x -> x % 2 == 1) /> <@readOnlyInterfaceColumn column=columnOneIndices?has_content?then(columnOneIndices?map(i -> relationship.fields[i]), []) indentation=4+baseIndentation hasNext=true recordUuid=relationship.uuid recordVariable="ri!record" i18n=i18n/> <@readOnlyInterfaceColumn column=columnTwoIndices?has_content?then(columnTwoIndices?map(i -> relationship.fields[i]), []) indentation=4+baseIndentation hasNext=false recordUuid=relationship.uuid recordVariable="ri!record" i18n=i18n/> ${padding} } ${padding} ) <#else> ${padding} a!localVariables( <#assign recordVariable = "local!${relationship.expressionableName}" sourceRelationshipValueAccesor = 'ri!record[#"urn:appian:record-field:v1:${baseRecordUuid}/${relationship.sourceRecordTypeFieldUuid}"]' /> ${padding} ${recordVariable}: if( ${padding} isnull(${sourceRelationshipValueAccesor}), ${padding} null, ${padding} index( ${padding} #"SYSTEM_SYSRULES_queryRecordType_v1"( ${padding} recordType: #"urn:appian:record-type:v1:${relationship.targetRecordTypeUuid}", ${padding} pagingInfo: #"SYSTEM_SYSRULES_pagingInfo"( ${padding} startIndex: 1, ${padding} batchSize: 1 ${padding} ), ${padding} filters: #"SYSTEM_SYSRULES_queryFilter"( ${padding} field: #"urn:appian:record-field:v1:${relationship.targetRecordTypeUuid}/${relationship.targetRecordTypeFieldUuid}", ${padding} operator: "=", ${padding} value: ${sourceRelationshipValueAccesor} ${padding} ) ${padding} ).data, ${padding} 1, ${padding} null ${padding} ) ${padding} ), ${padding} #"SYSTEM_SYSRULES_columnsLayout"( ${padding} columns: { <#if relationship.fields?has_content> <#assign columnOneIndices = (0..relationship.fields?size-1)?filter(x -> x % 2 == 0) columnTwoIndices = (0..relationship.fields?size-1)?filter(x -> x % 2 == 1) /> <@readOnlyInterfaceColumn column=columnOneIndices?has_content?then(columnOneIndices?map(i -> relationship.fields[i]), []) indentation=5+baseIndentation hasNext=true recordUuid=relationship.targetRecordTypeUuid recordVariable=recordVariable i18n=i18n/> <@readOnlyInterfaceColumn column=columnTwoIndices?has_content?then(columnTwoIndices?map(i -> relationship.fields[i]), []) indentation=5+baseIndentation hasNext=false recordUuid=relationship.targetRecordTypeUuid recordVariable=recordVariable i18n=i18n/> ${padding} } ${padding} ) ${padding} ) ${padding} }, ${padding} labelSize: "MEDIUM", ${padding} labelColor: "STANDARD", ${padding} labelHeadingTag: "H2", <#if relationship.relationshipType != "ONE_TO_MANY"> ${padding} divider: "ABOVE", ${padding} marginAbove: "STANDARD", ${padding} marginBelow: "MORE" <#if relationship?has_next> ${padding}), <#else> ${padding}) <#-- generateAuditFieldSaves: Generates saveInto for autopopulating audit fields --> <#macro generateAuditFieldSaves baseRecordUuid auditFields userFieldIndex timeFieldIndex indentation> <#local padding = ""?left_pad(2*indentation)/> <#if userFieldIndex != -1> ${padding} a!save( ${padding} target: ri!record[#"urn:appian:record-field:v1:${baseRecordUuid}/${auditFields[userFieldIndex].uuid}"], ${padding} value: loggedInUser() ${padding} )<#if timeFieldIndex != -1>, <#if timeFieldIndex != -1> ${padding} a!save( ${padding} target: ri!record[#"urn:appian:record-field:v1:${baseRecordUuid}/${auditFields[timeFieldIndex].uuid}"], ${padding} value: now() ${padding} )