纷享销客自定义函数命名空间及实例

1、按钮

在线文档地址:https://www.fxiaoke.com/mob/guide/crmdoc/src/8-1-2%E8%87%AA%E5%AE%9A%E4%B9%89%E6%8C%89%E9%92%AE.html

返回参数有三种返回值,如下:

1、map:用以阻断或继续按钮的执行;

2、String:返回的需要是一个可以访问的网址,点击按钮之后将会跳转至指定的网址;

3、UIAction:跳转至系统自己的某些组件页面

按钮分为两种类型,如下:

UI按钮:1、涉及到页面跳转的时候,使用此按钮,返回参数是String的url网址、或者是UIAction跳转至编辑页面、打印模板等指定组件;

2、批量数据操作时,用此按钮可以获取到数据集合是context.dataList

业务按钮:1、进行前验证、执行动作的补充、执行完成后的提醒等;

2、批量操作时,用此按钮分别获取到每一条数据用context.data

1.1、Map

应用场景:此返参类型在按钮的前验证中触发,用于进行数据的验证、可通过对context.data的字段进行赋值,修改最终的数据。

返参说明:error : 是否出错 errorMessage : 出错后提示的错误信息 block : 提示异常信息后,是否阻塞保存

如下,判断保养时间是否超时并阻断提交

Datedate = 下次保养时间;
log.info("下次保养时间为:"+date);
Date now = Date.now();
boolean flag = now.daysBetween(date) > 60;
if(flag){
  log.info("下次保养时间超过了60天");
  return [ "error":true, "errorMessage":"下次保养时间距离当前超过了60天", "block":true ]
}else{
    
  log.info("下次保养时间符合要求");
  //输入正确,继续执行
   return ["block": false];
}

1.1.1、获取新的页面填充之后的值进行校验

  1. 只能在前验证的位置获取到输入的参数,进行参数校验

2、获取新的表单页面的参数,需要在函数中设置自定义参数,然后在保存函数之后会提示匹配变量,获取表单数据直接通过变量名即可,如下

log.info("填写的退费金额变量:" + refund_param);

1.2、String

应用场景:在【执行动作】当中,进行指定页面路径的跳转。

返参为""或没有返参时,仅执行函数,不会进行页面跳转;有字符串返参时,可以用来进行网页路径的跳转,点击之后会在新的标签页打开指定的路径。

return"https://www.baidu.com/";

1.3、UIAction

应用场景:跳转至纷享销客内的一些组件页面

如下,跳转至详情页

UIAction openDialogAction = OpenDialogAction.build{
  userData = [:] //传递给自定义组件的数据键值对listtitle = "title"//标题width = 123//宽高
  maxHeight = 123//最大高度

  component { //组件的apiName
    apiName = "comp_yuio8__c"
  }
}

return openDialogAction

组件文档

https://www.fxiaoke.com/mob/guide/uipaas/dist/#/custom-component/start/what

跳转至相关的组件

Mapdata = context.data;
data.put("field_jB28q__c",  Date.now());
WebAction action = WebAction.builder()
  .type('form')
  .data(data)
  .build()
return action

2、范围选择

当希望通过书写一个字段的值确定关联对象的范围时,在关联字段上定义

注意:关联字段取关联对象的字段时,直接输入字段名即可

String area = context.data.field_n29H8__c;
log.info("所在区域:"+ area);
// def(boolean errorInfo, Map result, String errorMessageInfo) = Fx.object.getOptionInfo("AccountObj","field_Szm71__c")
// log.info("客户的所在区域属性:"+result);
QueryTemplate template1 = QueryTemplate.AND(
    ["field_i582a__c":Operator.EQ(area)]
  )

log.info(template1)
return template1;

3、UI事件

当一个输入框失去焦点之后,想要触发某些操作

https://www.fxiaoke.com/mob/guide/crmdoc/src/8-1-6UI%E4%BA%8B%E4%BB%B6.html

如下,在选择了一个日期后,想要自动确定另一个字段的日期

Date productDate = context.data.field_jB28q__c asDate;
log.info(productDate);
int month = (productDate.month + 2) asint;
log.info(month)
Date nextTime = productDate.withMonth(month);
log.info(nextTime);
  //新建UIEvent事件
  UIEvent event = UIEvent.build(context) {
    // Date product = context.data.field_jB28q__c asDate;
    // log.info(product);
    editMaster("field_3Ey0i__c": nextTime) 
  }
  return event

注意事项:

在UIEvent.build(context) {}里面不可以获取到context里面的值

3.1、 弹窗

3.1.1、代码

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

3.1.2、 样式

4、流程触发

4.1、审批流

定义审批的流程

4.2、业务流

需要手动在对象数据页面发起,里面可以定义审批

4.3、工作流

可以定时自动触发、数据字段更新时触发、数据作废、新建时触发。

5、计划任务

类似于工作流,可以定时执行,不过不再监听对象属性的变化。要么手动执行,要么到达时间选择符合要求的数据进行执行。

一般用来批量刷数据,时间最好在晚上执行,只能获取到id集合。

不要在这里赋值累増的变量。

数据是分批次执行的,每20条为一批,这一批中如果过某条执行出现异常了,则这一批的剩余数据将不再执行。

在调试页面选择具体的数据运行脚本,则context.objectIds中的id只有所选择的那条数据

5.1、基础例子

//计划任务中可以先得到数据的id集合,然后根据id集合查询得到具体的数据List ids =  context.objectIds as List
def(boolean errorFind,List dataFind,String errorMessageFind) = Fx.object.findByIds("PaymentPlanObj",ids);
if( errorMessageFind ){
  log.info("查询数据失败:" + errorMessageFind);
}elseif( dataFind ){
  
  dataFind.each{ 
    dataItem ->
    //得到每一个对象详情Map dataDetail = dataItem as Map
    
    
    
    
  }
}else{
  log.info("未查询到数据");
}

6、促销

暂不做详细讲解

7、自增编号

本身有自增编号字段,当不满足时,可以使用自定义函数定义。

如下,根据对象的产品类型,确定其前缀。

Stringtype = context.data.field_fEz5m__c;
log.info(type);
def (Boolean error,Stringdata,String errorMessage) = Fx.object.getOptionName("object_5CF02__c","field_fEz5m__c",type);
String prefix = "";
if( data =="工业设备" ){
  prefix = "i-";
}else{
  prefix = "a-";
}
String now = Date.now() as String;
now  = now.replaceAll("-", "");
log.info(now);
prefix = prefix + now + "-"// prefix = prefix + now.year + now.month + now.day + "-"// log.info(prefix);
IncrementNumber rule = IncrementNumber.builder()
  .counter('object_5CF02__c_name') // 计数器的key,递增的自增编码需要保证key唯一,同理,更换counter可以重计自增编号
  .condition('DAY')      // 按年、月、日重计 `YEAR`  `MONTH`  `DAY`  `NONE`
  .postfix('')     // 编码后缀
  .prefix(prefix)       // 编码前缀
  .serialNumber(4)         // 自增编码位数
  .initialValue(1)         // 编号起始值不能小于 0,且默认为 1
  .steppingNumber(1)       // 步进器默认为1,且不能小于1
  .buildRule()

return  rule

8、自定义控制器

初学时,一般用不到这里

9、导入

9.1、预处理

导入前执行一次,此时失败整个导入都将不能进行,必须在最后返回ValidateResult,代码逻辑内返回的不起作用

获取整个参数列表

log.info("执行设备导入的预处理代码");
List<Map> dataList = context.dataList as Listlog.info("导入的数据如下:"+dataList);
boolean flag = false;
if( dataList.size() > 0 ){
  flag = true;
}


return ValidateResult.builder()
  .success(flag)
  .errorMessage("我是导入前预处理函数!!!!")
  .build()

返回false时,导入将被取消,效果如下

9.2、前验证

每行数据都会触发,失败则当前行数据不能导入。

导入后context.data中单选框的值为id;

关联对象在表格中为主属性,函数取值时为数据id;

可以直接通过data.put()方式修改这个对象的值

log.info("查询【确认收入】检查是否可以创建【回款】");
Map data = context.data as Map;
String accountId = data["field_VulpB__c"] as String;
Date returnDate = data["field_sRf93__c"] asDate;
BigDecimal returnAmount = data["field_xWtSl__c"] as BigDecimal;


 
QueryTemplate template = QueryTemplate.AND(
  ["field_c8L4x__c": Operator.EQ(accountId)],
  ["field_wV3jw__c":Operator.EQ(returnDate)],
  ["field_rtXi1__c":Operator.EQ(returnAmount)]
  );


APIResult ret = Fx.object.findOne("object_8We11__c", //
             FQLAttribute.builder()
                .columns(["_id", "name"]) //
                .queryTemplate(template)
                .build(),
             SelectAttribute.builder()
                .needInvalid(false)
                .build());
if(ret.isError()){
    log.info(ret.message());
}

boolean flag = ret.data;

return ValidateResult.builder()
// 返回 false 将终止本次导入
  .success(flag)
  .errorMessage("没有匹配的确认收入,不能新建")
  .build()
 

10、自定义组件

用以进行一些定制化页面的开发

https://lexiangla.com/teams/k100014/docs/d829a73a510e11ed9515869c76e28517?company_from=050524eee61811e783175254005b9a60