UI事件

    用于在新建/编辑页,当发生变更时进行数据更新/校验并反填回界面

    配置方式:在对象管理的布局中,右侧全局设置中找到UI事件

image-20191113151513421

     注:1、从对象不支持触发UI事件

            2、 UI事件的执行结果只作用在新建/编辑页,实际生效以是否保存为准

            3、自定义对象全部支持UI事件,预置对象部分支持(销售线索、客户、订单/订单产品、商机2.0/商机2.0明细)

            4、只有旗舰版和集团版支持该能力

数据更新事件

1、在新建/编辑页,当某一字段修改(值改变且失焦)时,触发自定义函数来更新主对象或从对象的数据

实际场景:新建订单,当选择客户后,能够直接将客户的地址同步到到订单的送货地址字段上

配置方式:UI事件 — 添加数据更新事件 — 分类选择字段事件

image-20191113163540091

函数编写模板

Groovy:

//新建UIEvent事件
UIEvent event = UIEvent.build(context) { 
     //把字段设置为只读、隐藏
     editMasterFields "field_I18ri__c" readOnly(true) hidden(true)

   //设置提醒消息
   remind Remind.Text("弹窗提醒")

   //主对象修改数据
   editMaster("a": 1, "b": 2) 

   //添加一条从对象,添加从对象,必须指定业务类型,而且是当前布局展示的业务类型 
   //如果业务类型不匹配.从对象无法添加
   addDetail "detailApiName" set("a": 1, "b": 2)

   //根据条件删除 从对象, 删除为where中返回为true的从对象
   removeDetail "detailApiName" where { x -> (x["a"] as Integer) > 0 } 

   //根据条件编辑从对象 和上同理只会处理where 中返回为true的从对象数据
   editDetail "detailApiName" set("a": 1, "b": 2) where { x -> (x["a"] as Integer) > 0 }

   //removeDetail和editDetail 都可以不添加where这样会直接作用于所有数据
   //set的内容和editMaster的内容要保证是map也就是key:valued的形式
   removeDetail "detailApiName"
   editDetail "detailApiName" set("a": 1, "b": 2)

   // 将apiName为object_0uyAd__c的从对象隐藏(注:从对象隐藏后,保存数据时会将隐藏的从对象数据清空,切记谨慎使用!!)
   editObject 'object_0uyAd__c' hidden(true)

   // 从对象隐藏业务类型
   editDetailRecordType "object_qep6N__c" recordType("defaultA__c") hidden(true)

   // 选项值隐藏
   editOption "object_qep6N__c" fieldApiName("field_y210t__c") option("wwxJqgnO4") hidden(true)

   // 隐藏批量编辑按钮field_y1XV1__c
   editDetailButton "object_qep6N__c" recordType("defaultA__c") hiddenButton(ButtonAction.BATCH_UPDATE, true)
   // 隐藏批量删除按钮
   editDetailButton "object_qep6N__c" recordType("defaultA__c") hiddenButton(ButtonAction.BATCH_DELETE, true)
   // 隐藏批量复制按钮
   editDetailButton "object_qep6N__c" recordType("defaultA__c") hiddenButton(ButtonAction.BATCH_CLONE, true)
   // 隐藏通用添加一行按钮
   editDetailButton "object_qep6N__c" recordType("defaultA__c") hiddenButton(ButtonAction.SINGLE_ADD_ONE, true)

   // 隐藏通用按钮--从对象查找关联
   editDetailButton "object_qep6N__c" recordType("defaultA__c") lookupFieldApiName("field_y1XV1__c") hiddenButton(ButtonAction.BATCH_LOOKUP_CREATE, true)

   // 隐藏单条删除操作
   editDetailButton "object_qep6N__c"  recordType("defaultA__c") hiddenButton(ButtonAction.SINGLE_DELETE, true) where { x -> (x["a"] as Integer) > 0 }
   // 隐藏单条复制操作
   editDetailButton "object_qep6N__c"  recordType("defaultA__c") hiddenButton(ButtonAction.SINGLE_CLONE, true) where { x -> (x["a"] as Integer) > 0 }

   // 从对象字段只读隐藏
   editDetailFields "object_qep6N__c" fieldApiName("field_jt9F4__c") hidden(true) readOnly(true)
   editDetailFields "object_qep6N__c" fieldApiName("field_y220t__c") hidden(true) readOnly(true)

   //获取被删除的从对象方式一
   def deletedDetails = (context.arg as Map)["deletedDetails"] as Map
   UIEvent event = UIEvent.build(context){
   }
     //获取被删除的从对象方式二
     Map currentDeletedDetail = event.getCurrentDeletedDetail()


}
return event

Java:

import java.util.List;
import java.util.Map;
import com.fxiaoke.functions.UIEvent;

public class UIEventCode implements IUIEventAction {

  /**
   * UI事件函数的运行方法
   */ 
  @Override
  public UIEvent execute(FunctionContext context, Map<String, Object> args) {
    UIEvent.Builder builder = UIEvent.Builder.create(context);
    //把字段设置为只读、隐藏
    builder.editMasterFields("field_I18ri__c").readOnly(true).hidden(true);

    //设置提醒消息
    builder.remind(Remind.Text("弹窗提醒"));

    //主对象修改数据
    builder.editMaster(Maps.of("a", 1, "b", 2));

    //添加一条从对象,添加从对象,必须指定业务类型,而且是当前布局展示的业务类型 
    //如果业务类型不匹配.从对象无法添加
    builder.addDetail("detailApiName").set(Maps.of("a", 1, "b", 2));

    //根据条件删除 从对象, 删除为where中返回为true的从对象
    builder.removeDetail("detailApiName").where(x -> ((Integer) x.get("a")) > 0);

     // 根据条件编辑从对象 和上同理只会处理where 中返回为true的从对象数据,where方法使用lambda表达式
    builder.editDetail("detailApiName").set(Maps.of("a", 1, "b", 2)).where(x -> ((Integer) x.get("a")) > 0);

    //removeDetail和editDetail 都可以不添加where这样会直接作用于所有数据
    //set的内容和editMaster的内容要保证是map也就是key:valued的形式
    builder.removeDetail("detailApiName");
    builder.editDetail("detailApiName").set(Maps.of("a", 1, "b", 2));

    // 将apiName为object_0uyAd__c的从对象隐藏
    builder.editObject("object_0uyAd__c").hidden(true);
    UIEvent event = builder.getUIEvent();
    return event;
  }
}

2、在主从同时新建/编辑页,当新建/编辑/删除从对象时,触发自定义函数来更新主对象/从对象的数据(前提是该对象存在从对象,才会有从对象事件入口)

实际场景:每新增一条订单产品明细,根据客户的级别为该产品明细的优惠额度字段赋值

配置方式:UI事件 — 添加数据更新事件 — 分类选择从对象事件,触发条件可选新增明细/编辑明细/删除明细

image-20191113173831594

函数编写模板

Groovy:

UIEvent event = UIEvent.build(context) {
//主对象、从对象数据修改,详见上
} 
//获取当前操作的从对象数据
Map currentData = event.getCurrentDetail()
//修改当前操作的从对象数据(主要用于新建明细和编辑明细的场景下)
currentData.put("从对象字段的ApiName","该字段需要变更的值为")
currentData.put("从对象字段1的ApiName","该字段1需要变更的值为")

//获取当前新增的从对象数据
List currentData = event.getCurrentAddDetail()

return event

Java:

import java.util.List;
import java.util.Map;
import com.fxiaoke.functions.UIEvent;

public class UIEventCode implements IUIEventAction {
    /**
     * UI事件函数的运行方法
     */
    @Override
    public UIEvent execute(FunctionContext context, Map<String, Object> args) {

    UIEvent.Builder builder = UIEvent.Builder.create(context);

    UIEvent event = builder.getUIEvent();

    //获取当前操作的从对象数据
    Map currentData = event.getCurrentDetail();
    //修改当前操作的从对象数据(主要用于新建明细和编辑明细的场景下)
    currentData.put("从对象字段的ApiName","该字段需要变更的值为");
    currentData.put("从对象字段1的ApiName","该字段1需要变更的值为");
    //获取当前新增的从对象数据
    List list = event.getCurrentAddDetail();

    return event;
  }
}

3、返回错误信息到页面示例:

Fx.message.throwErrorMessage("错误信息");
return null;

页面加载事件

在新建/编辑页,当页面加载时,触发自定义函数来更新主对象或从对象的数据

实际场景:创建电子签时,根据电子签关联的业务数据自动创建签署人从数据

配置方式:UI事件 — 添加数据更新事件 — 分类选择页面加载事件

页面加载事件

函数编写模板:参考数据更新事件

校验事件:

在新建/编辑页,当某一字段修改(值改变且失焦)时,触发自定义函数验证该字段值是否符合特定条件

实际场景:在填写手机号/邮箱格式错误时,能够立即给到前端提示

配置方式:UI事件 — 添加校验事件

image-20191113202551293

函数编写模板

Groovy:

//红字提醒
Remind remind = Remind.Text("Text");
//弹窗提醒
Remind remind = Remind.Alert("Text");

//设置提醒消息
remind Remind.builder()
 .remindText("name", "主属性名称重复")
 .remindText("field_y2k46__c", "字段不能包含test")
 .build()

//清除提醒消息
remind Remind.builder()
 .remindText("name", "")
 .remindText("field_y2k46__c", "")
 .build()

return remind;

results matching ""

    No results matching ""