1. UIWeb
package fx.custom.apl.example.button;
import com.fxiaoke.functions.FunctionContext;
import com.fxiaoke.functions.Fx;
import com.fxiaoke.functions.client.DebugHelper;
import com.fxiaoke.functions.template.IButtonUIAction;
import com.fxiaoke.functions.ui.UIAction;
import com.fxiaoke.functions.ui.WebAction;
import com.fxiaoke.functions.utils.Lists;
import com.fxiaoke.functions.utils.Maps;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static com.fxiaoke.functions.Fx.log;
/**
* 网页端WebAction跳转新建界面,并回填数据
* WebAction 弹出对应的新建页面,从A对象直接跳转B对象的新建,并且回填数据
*/
public class ButtonUIWebExample implements IButtonUIAction {
/**
* 按钮函数(UIAction)的运行方法
*/
@Override
public UIAction execute(FunctionContext context, Map<String, Object> args) {
//跳转后回填的主对象数据
Map projectData = context.getData();
log.debug(context.getDetails().get("object_g1WuF__c"));
Map subProjectData = Maps.newHashMap();
subProjectData.put("field_0fke8__c", projectData.get("_id"));
subProjectData.put("field_0fke8__c__r", projectData.get("name"));
List details = Lists.newArrayList();
Map detail1 = Maps.newHashMap();
detail1.put("record_type", "default__c");
detail1.put("name", "明细1");
details.add(detail1);
Map detail2 = Maps.newHashMap();
detail2.put("record_type", "default__c");
detail2.put("name", "明细2");
details.add(detail2);
//跳转后回填的从对象数据
Map subProjectDetails = Maps.newHashMap();
//从对象的 apiName,每次从对象是独立的一个 Map
subProjectDetails.put("object_62jJG__c", details);
Map actionData = Maps.newHashMap(); //form 组件依赖的传入数据
actionData.put("apiname", "object_zBB6O__c"); //要新建的对象 apiName
actionData.put("record_type", "default__c"); //要新建的业务类型 apiName - 主对象
actionData.put("data", subProjectData); //非必填,对象默认数据 - 主对象数据
actionData.put("details", subProjectDetails); //非必填,对象默认数据 - 从对象数据
actionData.put("showDetail", true);
log.info("subProjectDetails --> " + subProjectDetails);
log.debug("return actionData: " + actionData);
WebAction action = WebAction.builder()
.type("form") //组件类型是 form
.data(actionData)
.build();
return action;
}
public static void main(String[] args) throws IOException {
//调试器
DebugHelper helper = new DebugHelper();
helper.init();
//模拟了一个带有从对象的对象数据
//{"appId":"","arg":{},"data":{"tenant_id":"749422","field_Tnvig__c":"1","is_deleted":false,"object_describe_api_name":"object_zBB6O__c","owner_department_id":"1000","owner_department":"测试","owner":["1000"],"lock_status":"0","package":"CRM","last_modified_time":{"dateTimeFormatter":{"decimalStyle":{"decimalSeparator":".","negativeSign":"-","positiveSign":"+","zeroDigit":"0"},"locale":"zh_CN","resolverStyle":"SMART"},"day":28,"dayOfWeek":2,"dayOfYear":59,"hour":15,"minute":28,"month":2,"second":12,"timestamp":1677569292545,"weekOfMonth":5,"weekOfYear":9,"year":2023},"create_time":{"dateTimeFormatter":{"$ref":"$.data.last\\_modified\\_time.dateTimeFormatter"},"day":28,"dayOfWeek":2,"dayOfYear":59,"hour":11,"minute":51,"month":2,"second":12,"timestamp":1677556272704,"weekOfMonth":5,"weekOfYear":9,"year":2023},"life_status":"normal","last_modified_by":["1000"],"version":10,"created_by":["1000"],"record_type":"default__c","data_own_department":["1000"],"name":"1test","_id":"63fd7a30ffd89f00013c7be3"},"dataList":[],"details":{"object_g1WuF__c":[{"tenant_id":"749422","is_deleted":false,"object_describe_api_name":"object_g1WuF__c","owner_department_id":"1000","owner_department":"测试","owner":["1000"],"lock_status":"0","package":"CRM","last_modified_time":{"dateTimeFormatter":{"$ref":"$.data.last\\_modified\\_time.dateTimeFormatter"},"day":28,"dayOfWeek":2,"dayOfYear":59,"hour":15,"minute":28,"month":2,"second":26,"timestamp":1677569306991,"weekOfMonth":5,"weekOfYear":9,"year":2023},"create_time":{"dateTimeFormatter":{"$ref":"$.data.last\\_modified\\_time.dateTimeFormatter"},"day":28,"dayOfWeek":2,"dayOfYear":59,"hour":15,"minute":28,"month":2,"second":26,"timestamp":1677569306991,"weekOfMonth":5,"weekOfYear":9,"year":2023},"life_status":"normal","field_1Rwod__c":"63fd7a30ffd89f00013c7be3","last_modified_by":["1000"],"version":1,"created_by":["1000"],"record_type":"default__c","data_own_department":["1000"],"name":"1test","_id":"63fdad1aebfee100016b043f"},{"tenant_id":"749422","lock_rule":"default_lock_rule","is_deleted":false,"object_describe_api_name":"object_g1WuF__c","owner_department_id":"1000","owner_department":"测试","owner":["1000"],"lock_status":"0","package":"CRM","last_modified_time":{"dateTimeFormatter":{"$ref":"$.data.last\\_modified\\_time.dateTimeFormatter"},"day":28,"dayOfWeek":2,"dayOfYear":59,"hour":15,"minute":27,"month":2,"second":17,"timestamp":1677569237831,"weekOfMonth":5,"weekOfYear":9,"year":2023},"create_time":{"dateTimeFormatter":{"$ref":"$.data.last\\_modified\\_time.dateTimeFormatter"},"day":28,"dayOfWeek":2,"dayOfYear":59,"hour":15,"minute":27,"month":2,"second":17,"timestamp":1677569237831,"weekOfMonth":5,"weekOfYear":9,"year":2023},"life_status":"normal","field_1Rwod__c":"63fd7a30ffd89f00013c7be3","last_modified_by":["1000"],"version":1,"created_by":["1000"],"record_type":"default__c","data_own_department":["1000"],"name":"1","order_by":10,"_id":"63fdacd542400c00019cfcca"}]},"objectIds":[],"outTenantId":"","outUserId":"","relatedData":{},"task":{},"tenantId":"749422","thirdAppId":"","thirdType":"","thirdUserId":"","upstreamOwnerId":"","userId":"1002"}
FunctionContext context = helper.context("object_zBB6O__c", "63fd7a30ffd89f00013c7be3");
Map<String, Object> param = new HashMap<>();
UIAction execute = new ButtonUIWebExample().execute(context, param);
Fx.log.info(execute);
}
}
2. UIAlert
package fx.custom.apl.example.button;
import com.fxiaoke.functions.FunctionContext;
import com.fxiaoke.functions.Fx;
import com.fxiaoke.functions.client.DebugHelper;
import com.fxiaoke.functions.template.IButtonUIAction;
import com.fxiaoke.functions.ui.AlertAction;
import com.fxiaoke.functions.ui.UIAction;
import org.apache.commons.lang3.StringUtils;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
/**
* AlertAction实现自定义弹窗内容
* 使用自定义UI按钮实现自定义弹窗内容
*/
public class ButtonUIAlertExample implements IButtonUIAction {
/**
* 按钮函数(UIAction)的运行方法
*/
@Override
public UIAction execute(FunctionContext context, Map<String, Object> args) {
String content = (String) context.getData().get("field_0D4b2__c");
//如果需要传递的参数为空,直接返回提示
if (StringUtils.isBlank(content)) {
UIAction alertAction = AlertAction.builder()
.type("default")
.text("字段,文本内容未填写,请先填写内容")//具体要提示的信息内容
.build();
return alertAction;
}
return AlertAction.builder().type("default").text("xxx信息").build();
}
public static void main(String[] args) throws IOException {
//调试器
DebugHelper helper = new DebugHelper();
helper.init();
//模拟了一个带有从对象的对象数据
//{"appId":"","arg":{},"data":{"tenant_id":"749422","field_Tnvig__c":"1","is_deleted":false,"object_describe_api_name":"object_zBB6O__c","owner_department_id":"1000","owner_department":"测试","owner":["1000"],"lock_status":"0","package":"CRM","last_modified_time":{"dateTimeFormatter":{"decimalStyle":{"decimalSeparator":".","negativeSign":"-","positiveSign":"+","zeroDigit":"0"},"locale":"zh_CN","resolverStyle":"SMART"},"day":28,"dayOfWeek":2,"dayOfYear":59,"hour":15,"minute":28,"month":2,"second":12,"timestamp":1677569292545,"weekOfMonth":5,"weekOfYear":9,"year":2023},"create_time":{"dateTimeFormatter":{"$ref":"$.data.last\\_modified\\_time.dateTimeFormatter"},"day":28,"dayOfWeek":2,"dayOfYear":59,"hour":11,"minute":51,"month":2,"second":12,"timestamp":1677556272704,"weekOfMonth":5,"weekOfYear":9,"year":2023},"life_status":"normal","last_modified_by":["1000"],"version":10,"created_by":["1000"],"record_type":"default__c","data_own_department":["1000"],"name":"1test","_id":"63fd7a30ffd89f00013c7be3"},"dataList":[],"details":{"object_g1WuF__c":[{"tenant_id":"749422","is_deleted":false,"object_describe_api_name":"object_g1WuF__c","owner_department_id":"1000","owner_department":"测试","owner":["1000"],"lock_status":"0","package":"CRM","last_modified_time":{"dateTimeFormatter":{"$ref":"$.data.last\\_modified\\_time.dateTimeFormatter"},"day":28,"dayOfWeek":2,"dayOfYear":59,"hour":15,"minute":28,"month":2,"second":26,"timestamp":1677569306991,"weekOfMonth":5,"weekOfYear":9,"year":2023},"create_time":{"dateTimeFormatter":{"$ref":"$.data.last\\_modified\\_time.dateTimeFormatter"},"day":28,"dayOfWeek":2,"dayOfYear":59,"hour":15,"minute":28,"month":2,"second":26,"timestamp":1677569306991,"weekOfMonth":5,"weekOfYear":9,"year":2023},"life_status":"normal","field_1Rwod__c":"63fd7a30ffd89f00013c7be3","last_modified_by":["1000"],"version":1,"created_by":["1000"],"record_type":"default__c","data_own_department":["1000"],"name":"1test","_id":"63fdad1aebfee100016b043f"},{"tenant_id":"749422","lock_rule":"default_lock_rule","is_deleted":false,"object_describe_api_name":"object_g1WuF__c","owner_department_id":"1000","owner_department":"测试","owner":["1000"],"lock_status":"0","package":"CRM","last_modified_time":{"dateTimeFormatter":{"$ref":"$.data.last\\_modified\\_time.dateTimeFormatter"},"day":28,"dayOfWeek":2,"dayOfYear":59,"hour":15,"minute":27,"month":2,"second":17,"timestamp":1677569237831,"weekOfMonth":5,"weekOfYear":9,"year":2023},"create_time":{"dateTimeFormatter":{"$ref":"$.data.last\\_modified\\_time.dateTimeFormatter"},"day":28,"dayOfWeek":2,"dayOfYear":59,"hour":15,"minute":27,"month":2,"second":17,"timestamp":1677569237831,"weekOfMonth":5,"weekOfYear":9,"year":2023},"life_status":"normal","field_1Rwod__c":"63fd7a30ffd89f00013c7be3","last_modified_by":["1000"],"version":1,"created_by":["1000"],"record_type":"default__c","data_own_department":["1000"],"name":"1","order_by":10,"_id":"63fdacd542400c00019cfcca"}]},"objectIds":[],"outTenantId":"","outUserId":"","relatedData":{},"task":{},"tenantId":"749422","thirdAppId":"","thirdType":"","thirdUserId":"","upstreamOwnerId":"","userId":"1002"}
FunctionContext context = helper.context("object_zBB6O__c", "63fd7a30ffd89f00013c7be3");
Map<String, Object> param = new HashMap<>();
UIAction execute = new ButtonUIAlertExample().execute(context, param);
Fx.log.info(execute);
}
}
3. UIApp
package fx.custom.apl.example.button;
import com.fxiaoke.functions.FunctionContext;
import com.fxiaoke.functions.Fx;
import com.fxiaoke.functions.client.DebugHelper;
import com.fxiaoke.functions.model.APIResult;
import com.fxiaoke.functions.template.IButtonUIAction;
import com.fxiaoke.functions.ui.AppAction;
import com.fxiaoke.functions.ui.UIAction;
import com.fxiaoke.functions.ui.WebAction;
import com.fxiaoke.functions.utils.Maps;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import static com.fxiaoke.functions.Fx.log;
/**
* 移动端AppAction 跳转编辑页面,并回填数据
* 通过UIAction跳转到对象的编辑页面,并可以带上数据
*/
public class ButtonUIAppExample implements IButtonUIAction {
/**
* 按钮函数(UIAction)的运行方法
*/
@Override
public UIAction execute(FunctionContext context, Map<String, Object> args) {
String dataId = (String) context.getData().get("_id");
String objectApiName = "object_6TNd9__c";
String recordType = (String) context.getData().get("record_type");
log.info(context.getData());
UIAction action;
String source = Fx.utils.getRequestSource();
if ("WEB".equals(source)) {
action = WebAction.builder()
.type("form")
.data(Maps.of("apiname", objectApiName, "type", "edit", "dataId", dataId))
.build();
log.info("web action: " + action);
} else {
//如果是移动端请求,返回如下结构(移动端返回UIAction的按钮需要开启移动端独立布局)
Map map = Maps.newHashMap();
map.put("type", "Edit"); //前几个参数都写死,表明跳转是编辑页组件
map.put("objectModify", "Edit");
map.put("handlerSelector", "objectModify:recordType:masterData:detailData:apiName:backFill:");
map.put("apiName", objectApiName); //对象APIName
map.put("recordType", recordType); //对象业务类型
map.put("masterData", Fx.json.toJson(context.getData())); //主对象数据,从对象数据不用传
map.put("toDetail", true); //新建完成后是否跳转详情页面
String url = createAppUrl(map);
action = AppAction.builder()
.url(url)
.build();
log.info("app action: " + action);
}
return action;
}
private String createAppUrl(Map params) {
StringBuilder arg = new StringBuilder();
params.forEach((k, v) -> {
APIResult apiResult = Fx.crypto.getURL().encode((String) v);
if (apiResult.isError()) {
Fx.message.throwErrorMessage("编码错误,原因为 :" + apiResult.getMessage());
}
arg.append(k).append(k).append("=").append(apiResult.getData()).append("&");
});
String url = "event://CRM/ObjModify?" + arg.substring(0, arg.length() - 1);
return url;
}
public static void main(String[] args) throws IOException {
//调试器
DebugHelper helper = new DebugHelper();
helper.init();
//模拟了一个带有从对象的对象数据
//{"appId":"","arg":{},"data":{"tenant_id":"749422","field_Tnvig__c":"1","is_deleted":false,"object_describe_api_name":"object_zBB6O__c","owner_department_id":"1000","owner_department":"测试","owner":["1000"],"lock_status":"0","package":"CRM","last_modified_time":{"dateTimeFormatter":{"decimalStyle":{"decimalSeparator":".","negativeSign":"-","positiveSign":"+","zeroDigit":"0"},"locale":"zh_CN","resolverStyle":"SMART"},"day":28,"dayOfWeek":2,"dayOfYear":59,"hour":15,"minute":28,"month":2,"second":12,"timestamp":1677569292545,"weekOfMonth":5,"weekOfYear":9,"year":2023},"create_time":{"dateTimeFormatter":{"$ref":"$.data.last\\_modified\\_time.dateTimeFormatter"},"day":28,"dayOfWeek":2,"dayOfYear":59,"hour":11,"minute":51,"month":2,"second":12,"timestamp":1677556272704,"weekOfMonth":5,"weekOfYear":9,"year":2023},"life_status":"normal","last_modified_by":["1000"],"version":10,"created_by":["1000"],"record_type":"default__c","data_own_department":["1000"],"name":"1test","_id":"63fd7a30ffd89f00013c7be3"},"dataList":[],"details":{"object_g1WuF__c":[{"tenant_id":"749422","is_deleted":false,"object_describe_api_name":"object_g1WuF__c","owner_department_id":"1000","owner_department":"测试","owner":["1000"],"lock_status":"0","package":"CRM","last_modified_time":{"dateTimeFormatter":{"$ref":"$.data.last\\_modified\\_time.dateTimeFormatter"},"day":28,"dayOfWeek":2,"dayOfYear":59,"hour":15,"minute":28,"month":2,"second":26,"timestamp":1677569306991,"weekOfMonth":5,"weekOfYear":9,"year":2023},"create_time":{"dateTimeFormatter":{"$ref":"$.data.last\\_modified\\_time.dateTimeFormatter"},"day":28,"dayOfWeek":2,"dayOfYear":59,"hour":15,"minute":28,"month":2,"second":26,"timestamp":1677569306991,"weekOfMonth":5,"weekOfYear":9,"year":2023},"life_status":"normal","field_1Rwod__c":"63fd7a30ffd89f00013c7be3","last_modified_by":["1000"],"version":1,"created_by":["1000"],"record_type":"default__c","data_own_department":["1000"],"name":"1test","_id":"63fdad1aebfee100016b043f"},{"tenant_id":"749422","lock_rule":"default_lock_rule","is_deleted":false,"object_describe_api_name":"object_g1WuF__c","owner_department_id":"1000","owner_department":"测试","owner":["1000"],"lock_status":"0","package":"CRM","last_modified_time":{"dateTimeFormatter":{"$ref":"$.data.last\\_modified\\_time.dateTimeFormatter"},"day":28,"dayOfWeek":2,"dayOfYear":59,"hour":15,"minute":27,"month":2,"second":17,"timestamp":1677569237831,"weekOfMonth":5,"weekOfYear":9,"year":2023},"create_time":{"dateTimeFormatter":{"$ref":"$.data.last\\_modified\\_time.dateTimeFormatter"},"day":28,"dayOfWeek":2,"dayOfYear":59,"hour":15,"minute":27,"month":2,"second":17,"timestamp":1677569237831,"weekOfMonth":5,"weekOfYear":9,"year":2023},"life_status":"normal","field_1Rwod__c":"63fd7a30ffd89f00013c7be3","last_modified_by":["1000"],"version":1,"created_by":["1000"],"record_type":"default__c","data_own_department":["1000"],"name":"1","order_by":10,"_id":"63fdacd542400c00019cfcca"}]},"objectIds":[],"outTenantId":"","outUserId":"","relatedData":{},"task":{},"tenantId":"749422","thirdAppId":"","thirdType":"","thirdUserId":"","upstreamOwnerId":"","userId":"1002"}
FunctionContext context = helper.context("object_zBB6O__c", "63fd7a30ffd89f00013c7be3");
Map<String, Object> param = new HashMap<>();
UIAction execute = new ButtonUIAppExample().execute(context, param);
Fx.log.info(execute);
}
}
## 4. UIOpenDialog
package fx.custom.apl.example.button;
import com.fxiaoke.functions.FunctionContext;
import com.fxiaoke.functions.Fx;
import com.fxiaoke.functions.client.DebugHelper;
import com.fxiaoke.functions.template.IButtonUIAction;
import com.fxiaoke.functions.ui.OpenDialogAction;
import com.fxiaoke.functions.ui.UIAction;
import com.fxiaoke.functions.utils.Maps;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
/**
* OpenDialogAction实现自定义dialog对话框
* 使用自定义UI按钮实现自定义dialog对话框,需要自己写一个自定义组件
*/
public class ButtonUIOpenDialogExample implements IButtonUIAction {
/**
* 按钮函数(UIAction)的运行方法
*/
@Override
public UIAction execute(FunctionContext context, Map<String, Object> args) {
//自定义组件
OpenDialogAction.Component component = new OpenDialogAction.Component();
//自定义组件的apiName
component.setApiName("comp_yuio8__c");
Map<String, String> userData = Maps.of("key", "value");
OpenDialogAction.Builder builder = OpenDialogAction.Builder.create();
builder.setComponent(component); //自定义组件
builder.setData(userData); //返回的数据,这部分是用户的数据,数据结构是一个map
builder.setWidth("123"); //宽度,仅在 ShowCenter 模式下有效
builder.setMaxHeight("123"); //最大高度,仅在 ShowCenter 模式下有效
builder.setTitle("title"); //标题
builder.setType("ShowCenter"); //显示模式,目前支持 「ShowCenter 居中弹框」和「FullScreen 全屏显示」两种模式
return builder.toOpenDialogAction();
}
public static void main(String[] args) throws IOException {
//调试器
DebugHelper helper = new DebugHelper();
helper.init();
//模拟了一个带有从对象的对象数据
//{"appId":"","arg":{},"data":{"tenant_id":"749422","field_Tnvig__c":"1","is_deleted":false,"object_describe_api_name":"object_zBB6O__c","owner_department_id":"1000","owner_department":"测试","owner":["1000"],"lock_status":"0","package":"CRM","last_modified_time":{"dateTimeFormatter":{"decimalStyle":{"decimalSeparator":".","negativeSign":"-","positiveSign":"+","zeroDigit":"0"},"locale":"zh_CN","resolverStyle":"SMART"},"day":28,"dayOfWeek":2,"dayOfYear":59,"hour":15,"minute":28,"month":2,"second":12,"timestamp":1677569292545,"weekOfMonth":5,"weekOfYear":9,"year":2023},"create_time":{"dateTimeFormatter":{"$ref":"$.data.last\\_modified\\_time.dateTimeFormatter"},"day":28,"dayOfWeek":2,"dayOfYear":59,"hour":11,"minute":51,"month":2,"second":12,"timestamp":1677556272704,"weekOfMonth":5,"weekOfYear":9,"year":2023},"life_status":"normal","last_modified_by":["1000"],"version":10,"created_by":["1000"],"record_type":"default__c","data_own_department":["1000"],"name":"1test","_id":"63fd7a30ffd89f00013c7be3"},"dataList":[],"details":{"object_g1WuF__c":[{"tenant_id":"749422","is_deleted":false,"object_describe_api_name":"object_g1WuF__c","owner_department_id":"1000","owner_department":"测试","owner":["1000"],"lock_status":"0","package":"CRM","last_modified_time":{"dateTimeFormatter":{"$ref":"$.data.last\\_modified\\_time.dateTimeFormatter"},"day":28,"dayOfWeek":2,"dayOfYear":59,"hour":15,"minute":28,"month":2,"second":26,"timestamp":1677569306991,"weekOfMonth":5,"weekOfYear":9,"year":2023},"create_time":{"dateTimeFormatter":{"$ref":"$.data.last\\_modified\\_time.dateTimeFormatter"},"day":28,"dayOfWeek":2,"dayOfYear":59,"hour":15,"minute":28,"month":2,"second":26,"timestamp":1677569306991,"weekOfMonth":5,"weekOfYear":9,"year":2023},"life_status":"normal","field_1Rwod__c":"63fd7a30ffd89f00013c7be3","last_modified_by":["1000"],"version":1,"created_by":["1000"],"record_type":"default__c","data_own_department":["1000"],"name":"1test","_id":"63fdad1aebfee100016b043f"},{"tenant_id":"749422","lock_rule":"default_lock_rule","is_deleted":false,"object_describe_api_name":"object_g1WuF__c","owner_department_id":"1000","owner_department":"测试","owner":["1000"],"lock_status":"0","package":"CRM","last_modified_time":{"dateTimeFormatter":{"$ref":"$.data.last\\_modified\\_time.dateTimeFormatter"},"day":28,"dayOfWeek":2,"dayOfYear":59,"hour":15,"minute":27,"month":2,"second":17,"timestamp":1677569237831,"weekOfMonth":5,"weekOfYear":9,"year":2023},"create_time":{"dateTimeFormatter":{"$ref":"$.data.last\\_modified\\_time.dateTimeFormatter"},"day":28,"dayOfWeek":2,"dayOfYear":59,"hour":15,"minute":27,"month":2,"second":17,"timestamp":1677569237831,"weekOfMonth":5,"weekOfYear":9,"year":2023},"life_status":"normal","field_1Rwod__c":"63fd7a30ffd89f00013c7be3","last_modified_by":["1000"],"version":1,"created_by":["1000"],"record_type":"default__c","data_own_department":["1000"],"name":"1","order_by":10,"_id":"63fdacd542400c00019cfcca"}]},"objectIds":[],"outTenantId":"","outUserId":"","relatedData":{},"task":{},"tenantId":"749422","thirdAppId":"","thirdType":"","thirdUserId":"","upstreamOwnerId":"","userId":"1002"}
FunctionContext context = helper.context("object_zBB6O__c", "63fd7a30ffd89f00013c7be3");
Map<String, Object> param = new HashMap<>();
UIAction execute = new ButtonUIOpenDialogExample().execute(context, param);
Fx.log.info(execute);
}
}