自定义UI按钮函数返回 UIAction 支持哪些 Action?

1 背景
    UIAction 是自定义 UI按钮的返回值,用于描述点击自定义按钮以后,后续触发的 UI 界面是什么。    目前分为四大类:Action类型介绍支持客户端OpenDialogAction弹出加载自定义组件的 Action,目前支持以弹出框和全屏显示两种模式
  • Web
  • iOS、Android(735)
WebAction弹出加载Web端预置组件,目前支持新建页 form 组件和打印预览 print 组件
  • Web
AppAction加载App移动端预置组件,目前兼容支持移动端已有的 link 能力
  • iOS、Android(735)
AlertAction系统预置的提示信息组件,用于点击UI按钮后提示系统
  • Web(735)
  • iOS、Android(735)
2 OpenDialogAction
  弹出加载自定义组件的 Action,目前支持以弹出框和全屏显示两种模式。
UIAction openDialogAction = OpenDialogAction.build{ type = "ShowCenter" //显示模式,目前支持 「ShowCenter 居中弹框」和「FullScreen 全屏显示」两种模式 title = "title" //标题 width = 123 //宽度,仅在 ShowCenter 模式下有效 maxHeight = 123 //最大高度,仅在 ShowCenter 模式下有效 userData = ["key":"value"] //返回的数据,这部分是用户的数据,数据结构是一个map component { //自定义组件 apiName = "comp_yuio8__c" //自定义组件的apiName } } return openDialogAction
具体如何配合自定义组件使用详见官方文档:https://www.fxiaoke.com/mob/guide/uipaas/open/dist/index.html#/start/usage-scenarios
3 WebAction   
弹出加载Web端预置组件,目前支持新建页 form 组件和打印预览 print 组件,仅适用于 Web 端。
3.1 form 新建表单组件
Map projectData = context.data UIAction action = WebAction.build() {   type = 'form'                     //组件类型是 form   Map subData = [     field_0fke8__c: projectData._id,        //查找关联字段的 id        field_0fke8__c__r:projectData.name      //查找关联字段的 主属性,必须有,否则表单上查找关联字段不显示数据     ]   Map subDeails = [     object_71Wtp__c:[                       //从对象的 apiName,每次从对象是独立的一个 Map         [record_type: "default__c", 'name':'明细1', 'field_c5M21__c': '测试'],              //从对象的每条记录         [record_type: "default__c", 'name':'明细2', 'field_c5M21__c': 'test detail 2']        //从对象的每条记录         ],     object_72Wcf__c:[                       //从对象的 apiName,每次从对象是独立的一个 Map         [record_type: "default__c", 'name':'明细1', 'field_c5M21__c': '测试'],              //从对象的每条记录         [record_type: "default__c", 'name':'明细2', 'field_c5M21__c': 'test detail 2']        //从对象的每条记录         ]     ]   data = [                          //form 组件依赖的传入数据     apiname: 'object_oedQC__c',     //要新建的对象 apiName     record_type: 'default__c',      //要新建的业务类型 apiName     data: subData,                  //非必填,对象默认数据 - 主对象数据     details: subDeails,             //非必填,对象默认数据 - 从对象数据     showDetail: false               //非必填,对象新建后是否跳转到详情页,默认 false     ] } return action
3.2 print 打印预览组件
UIAction action = WebAction.build(){ type = 'print' //组件类型是 print data = [ //print 打印预览组依赖的传入数据 'validatePreAction':false, //前验证必须是false.前验证是二次提交一次转发完成不了 'templateId':"5e994bbfa5083d97d6ae7afa", //要加载的打印模板 id "dataId":"5d428ed922381800018d946c", //对象数据的id "orientation":"Landscape" //横向还是纵向(Portrait:纵向;Landscape:横向) ] } return action
 3.3 editForm 编辑表单组件
String dataId = context.data._id as String UIAction action = WebAction.build() { type = 'form' //组件类型是 edit-form data = [ //edit-form 组件依赖的传入数据 apiname: 'object_oedQC__c', //要新建的对象 apiName type: 'edit', dataId: dataId //对象数据的id ] } return action
3.4 跳转 url
//需要区 是移动端的请求还是web 端的请求,实现跳转URL String source = Fx.utils.getRequestSource() Fx.log.info(source)    UIAction action = null if( source == "WEB" ) {     //web端返回 WebAction     action = WebAction.build() {         type = 'url'                //组件类型是 跳转 url         url = 'https://www.fxiaoke.com' //跳转的 url 地址     } } else {     //移动端需要返回AppAction     action = AppAction.build {     url = 'https://www.fxiaoke.com'   } }    return action
 3.5 跳转对象详情页
//获取页面请求的来源 String source = Fx.utils.getRequestSource() log.info("source: " + source); //如果是网页请求,返回如下结构 if(source == "WEB" ){      Map actionData = [                                  apiname: 'AccountObj',             //对象 apiName       dataId: accountId               //对象数据的id   ];       UIAction action = WebAction.builder()     .type('detail')                                   .data(actionData)     .build();   return action;    } else {      //如果是移动端请求,返回如下结构(移动端返回UIAction的按钮需要开启移动端独立布局)   Map map = [              "handlerSelector": "pushObjectDetailVC",    //前几个参数都写死,表明跳转是新建组件     "apiName": "AccountObj",          //对象APIName     "dataId": accountId                    ]             String params = encodeParam(map);   String url = "fs://CRM/objectDetail/AccountObj?" + params;   log.info("App Url: " + url);   UIAction action = AppAction.builder()     .url(url)     .build()   return action } String encodeParam(Map map) {      String arg = ""   map.each { k,v ->     def(Boolean error, String encodeResult, String errorMessage) = Fx.crypto.URL.encode(v as String)     if(error){       Fx.message.throwErrorMessage("编码错误,原因为 :"  + errorMessage)     }     arg  = (arg + k + "=" +  encodeResult) + "&"   }      return arg.substring(0,arg.length() - 1); }
4 AppAction
加载App移动端预置组件,目前兼容支持移动端已有的 link 能力。支持的 schema 包括:
UIAction action = AppAction.build(){ url = 'event://apps/fieldwork' //具体要跳转到终端的组件 Url 地址 } return action
  移动端常用URL:
  • 对象新建页
  1. event://CRM/ObjModify?type=Add&objectModify=Add&handlerSelector=objectModify%3ArecordType%3AmasterData%3AdetailData%3AapiName%3AbackFill%3A&apiName=AccountObj&recordType=record_sk5o2__c&masterData=%7B%22parent_account_id%22%3A%225de8a980bd136a00013ab472%22%2C%22parent_account_id__r%22%3A%22%E5%AE%A2%E6%88%B7%E5%90%8D%E7%A7%B0%22%7D&detailData=%7B%22object_x1z0i__c%22%3A%5B%7B%22record_type%22%3A%22default__c%22%2C%22name%22%3A%22%E6%98%8E%E7%BB%861%22%7D%5D%7D&toDetail=false
5 AlertAction
系统预置的提示信息组件,用于点击UI按钮后提示系统。目前仅支持信息提示类样式,其他样式根据需求反馈进行扩展。
UIAction action = AlertAction.build(){ type = "default" text = "数据已提交~" //具体要提示的信息内容 } return action
2023-03-09
0 0