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
弹出加载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 包括:
- http://
- https://
- fs:// ,link 定义文档参考 wiki:linkAddress:链接跳转地址
- event:// ,参考文档同上
- bundle://
- cml://
- native://
UIAction action = AppAction.build(){
url = 'event://apps/fieldwork' //具体要跳转到终端的组件 Url 地址
}
return action
移动端常用URL:
- 对象新建页
- 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