Groovy代码示例
class ObjectHandlerImpl implements ObjectHandler {
@Override
Result handle(FunctionContext context, Map<String, Object> arg) {
Map handlerDescribe = arg.handlerDescribe as Map
//接口类型(Add:新建,Edit:编辑,Invalid:作废)
String interfaceCode = handlerDescribe.interfaceCode as String
//处理器类型(before:按钮执行前,after:按钮执行后)
String handlerType = handlerDescribe.handlerType as String
//新建按钮
if ("Add" == interfaceCode) {
//主对象数据
Map objectData = arg.objectData as Map
//从对象数据
Map<String, List<Map<String, Object>>> detailObjectData = objectData.detailObjectData as Map
if ("before" == handlerType) {
String name = objectData.name as String
//校验失败时,返回错误信息
if (name != null) {
return Result.builder().success(false).errorMessage("name不能为空").build()
}
//根据条件修改数据
if (name.startsWith("test-handler")) {
//修改主对象数据
objectData.name = name + DateTime.now().toTimestamp()
//修改从对象数据
if (detailObjectData != null && !detailObjectData.isEmpty()) {
detailObjectData.each { apiName, detailDataList ->
detailDataList.each {
Map detailData = it as Map
detailData.name = ((String) detailData.name) + DateTime.now().toTimestamp()
}
}
}
//返回修改后的数据
Map<String, Object> result = [:]
result.objectData = objectData
result.detailObjectData = detailObjectData
return Result.builder().result(result).build()
}
//校验成功时,返回空数据
return Result.builder().build()
}
if ("after" == handlerType) {
//数据保存成功后的逻辑
}
}
//编辑按钮
if ("Edit" == interfaceCode) {
//主对象数据
Map objectData = arg.objectData as Map
//从对象数据
Map<String, List<Map<String, Object>>> detailObjectData = objectData.detailObjectData as Map
if ("before" == handlerType) {
//校验逻辑
}
if ("after" == handlerType) {
//是否成功触发审批流
boolean triggerApprovalFlowSuccess = arg.triggerApprovalFlowSuccess as boolean
//审批流触发类型(Create:新建,Update:编辑,Invalid:作废)
String approvalFlowTriggerType = arg.approvalFlowTriggerType as String
//成功触发了编辑审批流,直接返回
if (triggerApprovalFlowSuccess && "Update" == approvalFlowTriggerType) {
return Result.builder().build()
}
//数据保存成功后的逻辑
}
}
return Result.builder().build()
}
//debug 时候的入口方法
Result debug(FunctionContext context, Map<String, Object> arg) {
return handle(context, arg);
}
}