如果您擅长编写JS代码,您可以不使用事件编排器中的内置动作,直接通过手动编写JS代码实现事件的逻辑功能;系统支持在手动编写JS代码时,进行代码联想提示;系统封装了一些常用功能的接口,并将其中典型接口做成模板,您可以直接拖动相关模板至代码编辑区域,直接使用。当代码较多时,您可单击代码编辑区域右上侧的,最大化代码编辑页面。
系统内置的模板代码,主要包括组件、消息&弹窗、页面、表单、表格、服务等,以下主要介绍部分系统内置的模板代码。
系统提供的经典接口样例如下:
context ├──$app // 当前app信息 ├──$user // 当前用户信息 ├──$page // 页面相关操作 ├──$component // 组件相关操作 ├──$model // 数据模型相关操作 ├──$message // 提示消息 └──$dialog // 对话框 └──$bp // BPM相关操作 └──$bpm // BPM相关操作,推荐使用该API,原子级操作 └──$params // 获取组件事件的入参
单击具体模板代码事件左侧图标,可复制该模板代码,复制后您可在右侧代码编辑区域中任意地方进行粘贴。
单击具体模板代码事件右侧图标,您可打开该模板代码进行编辑,编辑后可拷贝出,关闭模板代码后,模板代码还是初始代码,不会将您在模板代码中编辑后的内容保存到该事件的模板代码中。
功能描述:开发者在JS代码编写过程中,键入特定的字符,界面会进行提示,从而自动构建智能代码补全服务,增强IDE代码补全能力。
使用方法:开发者在JS代码编辑器中编写代码过程中,敲击字符时自动触发代码推荐,选中后按Enter补全。
下面对AI代码补全功能进行详细介绍:
API:context.$component.get(_compKey: number)
入参:组件KEY,类型为number。
出参:Component。
示例如下:
let _compKey = 1546395654403000 let _component = context.$component.get(_compKey)
API:context.$component.get(_compName: string)
示例如下:
let _compName = 'input_1' let _component = context.$component.get(_compName)
_component为当前操作的组件。
示例如下:
let _component = context.$component.current let _model = _component.getDataModel()
API:context.$message.success(message: string)
示例:
// 成功消息 context.$message.success('Successfully')
API:context.$message.error(message: string)
示例:
// 失败消息 context.$message.error('Failed')
API:context.$dialog.info(option: object)
入参:option,对话框参数,结构如下:
{ title: string, // 标题 content: string, // 内容 okText:string, // 确认按钮名称,可选 onOk: function // 确认回调函数,可选 }
示例:
// 普通弹出消息 context.$dialog.info({ title: 'Info', content: 'content', okText: 'ok', onOk: () => {alert('click ok')}})
API:context.$dialog.confirm(option: object)
入参:option,对话框参数,结构如下:
{ title: string, // 标题 content: string, // 内容 okText:string, // 确认按钮名称,可选 cancelText:string, // 取消按钮名称,可选 onOk: function, // 确认回调函数,可选 onCancel: function // 取消回调函数,可选 }
示例:
// 确认弹出消息 context.$dialog.confirm({ title: 'Confirm', content: 'content', okText: 'ok', cancelText: 'cancel', onOk: () => {alert('click ok')}, onCancel: () => {alert('click cancel')}})
API:context.$dialog.success(option: object)
入参:option, 对话框参数,结构如下:
{ title: string, // 标题 content: string, // 内容 okText:string, // 确认按钮名称,可选 onOk: function // 确认回调函数,可选 }
示例:
// 成功弹出消息 context.$dialog.success({ title: 'Info', content: 'content', okText: 'ok', onOk: () => {alert('click ok')}})
API:context.$dialog.error(option: object)
入参:option,对话框参数,结构如下:
{ title: string, // 标题 content: string, // 内容 okText:string, // 确认按钮名称,可选 onOk: function // 确认回调函数,可选 }
示例:
// 错误弹出消息 context.$dialog.error({ title: 'Error', content: 'content', okText: 'ok', onOk: () => {alert('click ok')}})
API:context.$dialog.popup({ title: 'Error', page: 'date111',width:60,height:500, okText: 'ok',loading:true, params:{},onCancel: () => {alert('click cancel')},onOk: (data) => { data.visible = false; alert('click ok')}})
入参:option,对话框参数,结构如下:
{ title: string, // 标题 page:string // 弹出页面名称 width:integer // 页面宽度,小于100为百分比,大于100为px height:integer // 页面高度 okText:string, // 确认按钮名称,可选 params:object // 页面参数 onCancel: function // 取消时回调函数,可选 onOk: function // 确认回调函数,可选 maskClosable: boolean //是否允许点击遮罩层关闭,默认true footerHide: boolean//是否隐藏按钮(确定、取消)区域,默认false loading: boolean //点击确定按钮时,确定按钮是否显示 loading 状态,开启则需在onOk中手动设置visible来关闭对话框 draggable: boolean //是否可以拖动,默认false showCancel: boolean //是否展示取消按钮,默认true okFirst: boolean //是否确定按钮在取消按钮前面,默认false }
loading:false用于确定按钮是否显示loading状态,默认为false即不显示loading状态,如果设置为true显示loading,onOk里需要使用visible来关闭对话框。
footerHide:false用于控制弹出页面上的按钮是否显示,默认为false表示不显示,设置为true可显示按钮。
API:context.$page.params.paramName
示例:
// 假设当前页面URL为:https://localhost:8080/besBaas/page#/std_1?a=1&b=2, 则获取URL参数方式如下: let paramA = context.$page.params.a let paramB = context.$page.params.b
API:context.$page.open(url: string, queryString: string)
入参:url表示页面地址;queryString表示查询参数(URL参数),格式为“key=value”,多个参数用&符号连接。
示例:
context.$page.open('https://localhost:8080/besBaas/page#/std_2', 'a=1&b=2')
API:context.$page.openStdPage(pageName: string, queryString: string)
入参:pageName表示页面名称;queryString表示查询参数(URL参数),格式为“key=value”,多个参数用&符号连接。
示例:
context.$page.openStdPage('std_2', 'a=1&b=2')
API:context.$page.loadStdPage(pageName: string, queryString: string)
API:context.$page.openAdvPage(pageName: string, websiteName:string, queryString: string)
入参:pageName表示页面名称;websiteName表示为高级页面的站点名称,queryString表示查询参数(URL参数),格式为“key=value”,多个参数用&符号连接。
API:context.$page. loadAdvPage (pageName: string, websiteName:string, queryString: string)
如果当前组件为表单,则直接返回;否则,根据组件上下文向上查找最近的表单组件。
API:context.getFormByKey(_formKey: number)
入参:表单组件的Key值,类型为number。
API:_form.validateField(prop, callback)
参数prop为需校验的属性,参数callback为检验完回调函数,返回错误信息。
示例:
_form.validateField("name",function(errorMsg){ console.log("validate field", errorMsg) });
_form为已获取的表单组件。
_form为已获取的表单组件。API内部实现已先进行表单校验,校验成功后进行提交保存操作。
如果当前组件为表格,则直接返回;如果当前组件有关联的表格,则返回对应的表格(如表格查询条件、分页等);否则,根据组件上下文向上查找最近的表格组件。
_table为已获取的表格组件,返回表格绑定的查询条件。
// 先获取条件,再进行赋值 var condition = _table.getCondition(); // 字段满足单个条件,默认操作是contains condition.queryInfo = { "fieldName": "1" } // 字段满足单个条件,使用自定义操作 condition.queryInfo = { "fieldName": { operator: "contains", value: "1" } } // 字段满足多个条件 condition.queryInfo = { "fieldName": [{ operator: "contains", value: "1" }, { operator: "contains", value: "2" }] } // 分页条件 condition.pageInfo: { "pageSize": 10, "curPage": 1 }
_table为已获取的表格组件。
入参:表格查询条件。
_table为已获取的表格组件。
_table为已获取的表格组件,初始化一条新的行数据,此方法执行后,数据并未添加到表格。
API:_table.addrow(newRowData: object)
_table为已获取的表格组件,此方法将初始化好的行数据添加到表格,此方法执行后,数据仅在前端表格保存,并未持久化到后端。
入参:行数据。
_table为已获取的表格组件。
API:_table.doDelete(rows: array)
_table为已获取的表格组件。
入参:表格行数据列表。
示例:
// 当前表格 let _table = context.$component.table // 获取当前选中的行 let rows = _table.getSelectedData() // 删除选中行 _table.doDelete(rows)
_table为已获取的表格组件。
API:_table.doSave(operatedData: object)
_table为已获取的表格组件,此方法将当前表格做的修改操作进行持久化操作。
入参:修改的表格数据。
示例:
// 当前表格 let _table = context.$component.table // 获取修改的数据 let operatedData = _table.getOperatedData() // 提交表格修改 _table.doSave(operatedData)
API:context.object(objectName)
入参:objectName,对象名称。
出参:对象。
示例如下:
let _object = context.object("objectName")
_object.query().then(function (response) { // TODO: Your business logic })
例如查询满足name = 'test' 条件的对象数据。代码如下:
let _condition = {conjunction: 'AND', conditions: [{ field: 'name', operator: 'eq', value: 'test' }] } _object.query({condition:_condition}).then(function (response) { // TODO: Your business logic })
_object为对象名称
入参:_condition,查询条件,可选。
出参:Promise。
示例:
// 统计所有数据 _object.count().then(function (response) { // TODO: Your business logic }) // 统计满足条件数据 _object.count(_condition).then(function (response) { // TODO: Your business logic })
let _fields = 'id,name' _object.query({condition:_condition}, _fields).then(function (response) { // TODO: Your business logic })
API:_object.query({condition:_condition}, fields: string)
入参:_condition,查询条件,可选,参考如下结构。
{ conjunction: 'AND', // 条件连接符,AND 或 OR conditions: [ { field: 'name', // 条件字段 operator: 'eq',// 条件比较符 value: 'test' // 条件值 }, { condition: { // 嵌入条件 conjunction: 'OR', conditions: [ { field: 'status', operator: 'eq', value: '1' }, { field: 'status', operator: 'eq', value: '2' } ] } } ] }
以上示例表达内容为:name = 'test' && ( status = '1' || status = '2')
fields:查询字段(只返回指定的字段),多个字段以逗号分割,可选。
出参:Promise。
API:_object.insert(data: Object[])
入参:data,待插入数据,对象数组。
出参:Promise,返回新插入数据的记录ID。
示例:
let data = [{ name: 'test', label: 'test' }] _object.insert(data).then(function (response){ if (response && '0' === response.resCode) { let _id = response.result[0].id}})
API:_object.updateByID(_id: string, data: Object)
入参:id表示记录ID;data表示对象更新内容。
出参:Promise。
示例:
let _id = '{{ id }}' // 根据记录ID更新数据 _object.updateByID(_id, { label: 'test2' }).then(function (response) { // TODO: Your business logic })
API:_object.queryByID(_id: string)
入参:id表示记录ID。
出参:Promise。
示例:
let _id = '{{ id }}' // 根据记录ID查询单条数据 _object.queryByID(_id).then(function (response) { // TODO: Your business logic })
API:_object.queryByID(_id: string)
入参:id表示对象记录ID。
出参:Promise。
示例:
let _id = '{{ id }}' // 根据记录ID删除数据 _object.deleteByID(_id).then(function (response) { // TODO: Your business logic })
API:_object.batchQueryByIDs(_ids: string, fields: string)
入参:ids表示记录ID,多个ID以逗号分割;fields表示查询字段,多个字段以逗号分割,可选。
出参:Promise。
示例:
_object.batchQueryByIDs('id1,id2,id3').then(function (response) { // TODO: Your business logic })
API:_object.batchDeleteByIDs(_ids: string)
入参:ids表示记录ID,多个ID以逗号分割。
出参:Promise。
示例:
_object.batchDeleteByIDs('id1,id2,id3').then(function (response) { // TODO: Your business logic })
API:_object.batchUpsert(data: Object[])
入参:data,待插入或更新的数据对象,包含id时表示进行更新。
出参:Promise。
示例:
let data = [{id: '1538033158273005', label: 'test'}, {name: 'test', label: 'test'}] _object.batchUpsert(data).then(function (response) { // TODO: Your business logic })
API:context.script(scriptName)
入参:scriptName,表示Script名称。
出参:Script
示例:
// 初始化脚本 let _script = context.script('{{ scriptName }}')
入参:无。
出参:Promise。
示例:
// 初始化脚本 let _script = context.script('{{ scriptName }}') // 运行脚本 _script.run().then(function(response) { // TODO: Your business logic })
入参:flowName表示Flow名称。
出参:Flow
示例:
// 初始化Flow let _flow = context.flow("flowName")
API:_flow.version(version: string)
入参:version表示flow版本号。
出参:Flow。
示例:
// 设置Flow版本号 _flow.version("0.0.1")
入参:params,输入参数,如下示例:
{ param1: 'param1', param2: { param21: 'param21', param22: 'param22' } }
出参:Promise。
示例:
// 适用于一次调用,Flow即完成的场景 // 运行Flow _flow.run({ param1: 'param1' }).then(function (res) { // TODO: Youre business logic })
API:_flow.start(params: Object)
入参:params,输入参数,如下示例:
{ param1: 'param1', param2: { param21: 'param21', param22: 'param22' } }
出参:Promise。
示例:
// 以下适用于多步操作的业务场景 _flow.start({ param1: 'param1' }).then(function (res) { // TODO: Youre business logic })
API:_flow.next(interviewID: string, params: Object)
入参:interviewID表示Flow运行实例ID;params:输入参数,如下示例:
{ param1: 'param1', param2: { param21: 'param21', param22: 'param22' } }
出参:Promise。
示例:
// 下一步 _flow.next("{{ interviewID }}", { param1: 'param1' }).then(function (res) { // TODO: Youre business logic })
API:_flow.back(interviewID: string, params: Object)
入参:interviewID表示Flow运行实例ID;params:输入参数,如下示例:
{ param1: 'param1', param2: { param21: 'param21', param22: 'param22' } }
出参:Promise。
示例:
// 上一步 _flow.back("{{ interviewID }}", { param1: 'param1' }).then(function (res) { // TODO: Youre business logic })
API:_flow.finish(interviewID: string, params: Object)
入参:interviewID表示Flow运行实例ID;params:输入参数,如下示例:
{ param1: 'param1', param2: { param21: 'param21', param22: 'param22' } }
出参:Promise。
示例:
// 完成Flow _flow.finish("{{ interviewID }}", { param1: 'param1' }).then(function (res) { // TODO: Youre business logic })
API:_flow.resume(interviewID: string, params: Object)
入参:interviewID表示Flow运行实例ID;params:输入参数,如下示例:
{ param1: 'param1', param2: { param21: 'param21', param22: 'param22' } }
出参:Promise。
示例:
// 恢复Flow _flow.resume("{{ interviewID }}", { param1: 'param1' }).then(function (res) { // TODO: Youre business logic })
API:_flow.terminate(interviewID: string, params: Object)
入参:interviewID表示Flow运行实例ID;params:输入参数,如下示例:
{ param1: 'param1', param2: { param21: 'param21', param22: 'param22' } }
出参:Promise。
示例:
// 删除Flow _flow.terminate("{{ interviewID }}", { param1: 'param1', param2: { param21: 'param21', param22: 'param22' } }).then(function (res) { // TODO: Youre business logic })
调用服务的API
API:context.service('{{url}}').run(_inputParams)
入参:“url”为服务接口的URL,在APP或者BO视图下单击“服务”,可查看到封装Flow、脚本或者对象操作接口的URL。“_inputParams”为输入参数。
示例:
var _inputParams = {}; // 调用服务 context.service('{{ url }}').run(_inputParams).then(function(response) { // TODO: Your business logic });
API:context.$bp.loadVariables()
入参:无。
出参:参数对象。
示例:
context.$bp.loadVariables().then(function (data) { context.$model.ref("loanRequestData").setData(data.result.LoanRequestData); context.$model.ref("statusUpdates").setData(data.result.Status); context.$model.ref("negotiateCount").setData(data.result.NegotiateCount); });
API:context.$bp.putVariables (variables:object, instId: string)
入参:“variables”为参数对象,必选;“instId”为实例ID,可选。
出参:执行结果。
示例:
context.$bp.putVariables({ LoanRequest: "test" });
API:context.$bp.submitTask (variables:object)
入参:“variables”为参数对象,必选。
出参:无。
示例:
var data = context.$model.ref("loanRequestData").getData(); context.$bp.submitTask({ LoanRequest: data });
context.$bp和context.$bpm的区别在于后者保证了操作的原子性。例如,调用context.$bp.submitTask (variables:object)数据提交成功时,会有弹框提示且点击“确定”按钮会自动关闭当前页面。而调用context.$bpm.submitTask (variables:object)提交时,只会提交任务而不会有后续的弹框提示等操作;并且当不在BPM上下文环境中提交任务时(即当BPM实例没有运行时提交任务),会有相关提示信息。
推荐使用context.$bpm。
API:context.$bpm.loadVariables()
入参:无。
出参:参数对象。
示例:
context.$bpm.loadVariables().then(function (data) { context.$model.ref("loanRequestData").setData(data.result.LoanRequestData); context.$model.ref("statusUpdates").setData(data.result.Status); context.$model.ref("negotiateCount").setData(data.result.NegotiateCount); });
API:context.$bpm.putVariables (variables:object, instId: string)
入参:“variables”为参数对象,必选;“instId”为实例ID,可选。
出参:执行结果。
示例:
context.$bpm.putVariables({ LoanRequest: "test" });
API:context.$bpm.submitTask (variables:object)
入参:“variables”为参数对象,必选。
出参:无。
示例:
var data = context.$model.ref("loanRequestData").getData(); context.$bpm.submitTask({ LoanRequest: data });
API:context.$bpm.getVarsByInstanceId("instance_id")
入参:“instance_id”为BPM实例的ID。
出参:BPM实例中的所有变量和变量值。
示例:
context.$bpm.getVarsByInstanceId("instance_id").then(function (resp) { // 回调逻辑 });
API:context.$bpm.getBPinstance("instance_id")
入参:“instance_id”为BPM实例的ID。
出参:BPM实例数据。
示例:
context.$bpm.getBPinstance("instance_id").then(function (resp) { // 回调逻辑 });
获取csrf token
API:context.$utils.getCSRFToken()
API:context.timerTask(_timerHandler, _timeout, _executionCondition);
入参:分别是定时执行的业务逻辑、任务时间间隔、执行条件。
示例:
// 任务间隔时间,毫秒 var _timeout = 1000; // 定时执行业务逻辑 var _timerHandler = function() { // TODO: Your business logic }; // 执行条件 var _executionCondition = function() { return true; }; // 启动定时任务 context.timerTask(_timerHandler, _timeout, _executionCondition);
示例:
// 下载文档 context.$edm.download(' {{docId}} ', ' {{docType}} ', ' {{subClassName}} ', ' {{docVersion}} ', function() { // 下载失败回调方法 });
示例:
// 预览文档 context.$edm.preview(' {{hw_doc_id}} ', ' {{hw_doc_version}} ', ' {{docFormat}} ', function() { // 预览后回调方法 }, ' {{container}} ', function() { // 预览失败回调方法 });
// 提供三个参数,url:指定的URL;successFun:请求成功回调方法;failFun:请求失败回调方法。 // 根据需要填写,例:若不需要successFun可不提供。例如:{url:'', failFun:function(err){ }} context.filter({ url: '', successFun: function (response) { // TODO: Your business logic }, failFun: function (error) { // TODO: Your business logic } });
入参:“name”为多语言条目的唯一名称,必选。
出参:当前语言的值。
示例:
context.$t("app1.button.label")
有些组件开放的事件是有入参的,在事件自定义代码中可以通过“context.$params”获取入参。context.$params值为数组,对应事件的多个入参。查看入参定义的方法是:请在标准页面设计界面左侧组件区域,将鼠标悬浮在组件上,组件右上会出现问号图标,单击该图标会出现该组件的使用说明,说明中包含事件入参定义。
举例如下:
Caserta公司首席执行官兼首席数据策略师对2020年的数据和分析进行了预测,并对优...
文件服务器不能像网络服务器那样提供动态内容。而且文件服务器也不能像数据库服...
互联网行业的分析师,做指标体系搭建的时候,最常遇到两个问题,一是不知道关注...
购买证书时,需要根据您的需要选择对应的证书,本章节将介绍如何选择证书类型、...
互联网发展到今天,目前服务器仍然是互联网基础服务最基本的设施,但在云时代,...
大家好,我是菜鸟哥,今天跟大家一起聊一下Python4的话题! 从2020年的1月1号开始...
mysql的锁1)??innoDB的两种行锁 共享锁(shared lock) 读锁 就是多个事务只能读取...
下面总结了 租用服务器 维护应该注意的四点,也是客户操作服务器中经常所犯的错...
在华东-上海一、华南-广州和华北-北京四区域,新创建的CCE资源组均为私有CCE资源...
2021年6月9日,亚太内容分发大会暨CDN峰会在北京举行,阿里云智能边缘云高级技术...