English
Groovy Code Examples
About 576 wordsAbout 2 min
2026-01-09
I. Data Update Event - Function Template:
1. On New/Edit Page, Trigger Custom Function When a Field is Modified (Value Changed and Lost Focus) to Update Master or Detail Object Data
// Get current page identifier: Add for new page, Edit for edit page
context.actionPage
// Create UIEvent
UIEvent event = UIEvent.build(context) {
// Set field as read-only, hidden, or required
editMasterFields "field_I18ri__c" readOnly(true) hidden(true) required(true)
// Set reminder message
remind Remind.Text("Warning reminder")
// Set alert message
remind Remind.Alert("Popup alert")
// Modify master object data
editMaster("name": "test", "b": 2)
// Whether to automatically calculate computed fields and default values for master and detail objects
doCalculate(true)
// Add a detail object (must specify business type matching current layout)
addDetail "detailApiName" set("record_type": "default__c", "name": "demo001")
// Delete detail objects where condition returns true
removeDetail "detailApiName" where { x -> (x["a"] as Integer) > 0 }
// Edit detail objects where condition returns true
editDetail "detailApiName" set("a": 1, "b": 2) where { x -> (x["a"] as Integer) > 0 }
// removeDetail and editDetail can work on all data without where condition
removeDetail "detailApiName"
editDetail "detailApiName" set("a": 1, "b": 2)
// Hide detail object with apiName object_0uyAd__c (Note: Hidden detail data will be cleared on save by default)
editObject 'object_0uyAd__c' hidden(true) keepData(true) // keepData defaults to false
// Hide detail record type
editDetailRecordType "object_qep6N__c" recordType("defaultA__c") hidden(true)
// Hide option value
editOption "object_qep6N__c" fieldApiName("field_y210t__c") option("wwxJqgnO4") hidden(true)
// Hide batch edit button
editDetailButton "object_qep6N__c" recordType("defaultA__c") hiddenButton(ButtonAction.BATCH_UPDATE, true)
// Hide batch delete button
editDetailButton "object_qep6N__c" recordType("defaultA__c") hiddenButton(ButtonAction.BATCH_DELETE, true)
// Hide batch clone button
editDetailButton "object_qep6N__c" recordType("defaultA__c") hiddenButton(ButtonAction.BATCH_CLONE, true)
// Hide single add row button
editDetailButton "object_qep6N__c" recordType("defaultA__c") hiddenButton(ButtonAction.SINGLE_ADD_ONE, true)
// Hide lookup create button
editDetailButton "object_qep6N__c" recordType("defaultA__c") lookupFieldApiName("field_y1XV1__c") hiddenButton(ButtonAction.BATCH_LOOKUP_CREATE, true)
// Hide single delete operation with condition
editDetailButton "object_qep6N__c" recordType("defaultA__c") hiddenButton(ButtonAction.SINGLE_DELETE, true) where { x -> (x["a"] as Integer) > 0 }
// Hide single clone operation with condition
editDetailButton "object_qep6N__c" recordType("defaultA__c") hiddenButton(ButtonAction.SINGLE_CLONE, true) where { x -> (x["a"] as Integer) > 0 }
// Detail field visibility/read-only/required with condition
editDetailFields "object_qep6N__c" fieldApiName("field_jt9F4__c") hidden(true) readOnly(true) required(true) where { x -> (x["a"] as Integer) > 0 }
editDetailFields "object_qep6N__c" fieldApiName("field_y220t__c") hidden(true) readOnly(true) required(true) where { x -> (x["a"] as Integer) > 0 }
// Method 1 to get deleted details
if (context.arg != null) {
def deletedDetails = (context.arg as Map)["deletedDetails"] as Map
}
// Method 2 to get deleted details
Map currentDeletedDetail = event.getCurrentDeletedDetail()
}
return event2. On Master-Detail New/Edit Page, Trigger Custom Function When Adding/Editing/Deleting Detail Objects to Update Master/Detail Data
UIEvent event = UIEvent.build(context) {
// Master/detail data modifications (same as above)
}
// Get currently operated detail data
Map currentData = event.getCurrentDetail()
// Modify current detail data (mainly for add/edit scenarios)
currentData.put("detailFieldApiName", "newValue")
currentData.put("detailField1ApiName", "newValue1")
// Get newly added detail data
List currentData = event.getCurrentAddDetail()
// Get batch operated detail data (supports single operation)
Map currentBatchDetails = event.getCurrentBatchDetails();
return event
(3) Return error message example:
Fx.message.throwErrorMessage("Error message");
return null;II. Page Load Event - Function Template:
Refer to Data Update Event
III. Validation Event - Function Template:
// Text reminder
Remind remind = Remind.Text("Text");
// Alert reminder
Remind remind = Remind.Alert("Text");
// Set reminder messages
remind Remind.builder()
.remindText("name", "Duplicate master attribute name")
.remindText("field_y2k46__c", "Field cannot contain 'test'")
.build()
// Clear reminder messages
remind Remind.builder()
.remindText("name", "")
.remindText("field_y2k46__c", "")
.build()
return remind;