内容待更新!最新文档:DWF脚本清单(仅后端部分)
DWF的后端脚本是使用graalvm技术,直接将javascript编译成java的字节码执行的,因此可以直接与DWF进程中的java虚拟机交互,如:调用DWF内部JDK中的Java类和实现的Java类:
var HashMap = Java.type('java.util.HashMap'); var map = new HashMap(); map.put(1, "a"); map.get(1);
上面的程序中,利用Java.type()方法实现和java的import相同的作用引入了一个HashMap类,有关于Java交互的详细用法说明:https://www.graalvm.org/22.3/reference-manual/js/JavaInteroperability/#access-java-from-javascript
- 最近更新于2023.09.06,对应DWF版本 master 20230906-093569487b
- 往右滑,“用法示例”为示例脚本,“备注”为对应的执行日志截图
- 绿色部分为旧版本内容,尚未更新(应该也是可用的)
序号 | 分类 | 关键字 | 函数/变量 | 功能说明 | 适用范围 | 用法示例 | 备注 |
---|---|---|---|---|---|---|---|
1 | 全局变量 | this.className this.oprName | 获取当前类名(当前脚本所在表单对应的类名) 获取当前操作名 | this.className this.logger.info("this.className - " + this.className); this.logger.info("this.oprName - " + this.oprName); | |||
2 | this.user |
| 获取当前登录用户信息,包括token、oid、userId、userName、displayName、userGroups等关键字 | this.user this.logger.info("this.user - " + JSON.stringify(this.user)); this.logger.info("this.user.token - " + this.user.token); this.logger.info("this.user.oid - " + this.user.oid); this.logger.info("this.user.userId - " + this.user.userId); this.logger.info("this.user.userName - " + this.user.userName); this.logger.info("this.user.displayName - " + this.user.displayName); this.logger.info("this.user.userGroups - " + this.user.userGroups); if (this.user.userGroups.length > 0) { this.logger.info("this.user.userGroups[0] - " + this.user.userGroups[0]); this.logger.info("this.user.userGroups[0].displayName - " + this.user.userGroups[0].displayName); } | |||
3 | this.env |
| DWF服务端的当前环境信息,包括appConfig、locale、serverIp、serverPort、serverURL等关键字 | this.env this.logger.info("this.env - " + JSON.stringify(this.env)); this.logger.info("this.env.serverIp - " + this.env.serverIp); this.logger.info("this.env.serverPort - " + this.env.serverPort); this.logger.info("this.env.serverURL - " + this.env.serverURL); this.logger.info("this.env.appConfig - " + JSON.stringify(this.env.appConfig)); this.logger.info("this.env.appConfig.demoKey - " + JSON.stringify(this.env.appConfig.demoKey)); // 暂不支持以下方法 // this.logger.info("this.env.appConfig.demoKey.with.dots - " + JSON.stringify(this.env.appConfig.demoKey.with.dots)); this.logger.info("this.env.locale - " + JSON.stringify(this.env.locale)); this.logger.info("this.env.locale.name - " + this.env.locale.name); | |||
4 | this.obj | 表单绑定的类对象 | 实体类:
this.obj this.logger.info("this.obj - " + JSON.stringify(this.obj)); this.logger.info("this.obj.oid - " + this.obj.oid); this.logger.info("this.obj.ceshiAttr - " + this.obj.ceshiAttr); 关联类:
this.obj this.logger.info("this.obj - " + JSON.stringify(this.obj)); this.logger.info("this.obj.relation_oid - " + this.obj.relation_oid); this.logger.info("this.obj.left_oid - " + this.obj.left_oid); this.logger.info("this.obj.right_oid - " + this.obj.right_oid); | 实体类 关联类 | |||
5 | this.objs | 前端多对象控件选中的对象传递到后端(多选的多个对象,默认多对象控件有效) | 实体类:(x代表第x个元素)
this.objs this.logger.info("this.objs - " + JSON.stringify(this.objs)); if (this.objs.length > 0) { this.logger.info("this.objs[0].oid - " + this.objs[0].oid); this.logger.info("this.objs[0].ceshiAttr - " + this.objs[0].ceshiAttr); } 关联类:(x代表第x个元素)
this.objs this.logger.info("this.objs - " + JSON.stringify(this.objs)); if (this.objs.length > 0) { this.logger.info("this.objs[0].relation_oid - " + this.objs[0].relation_oid); this.logger.info("this.objs[0].left_oid - " + this.objs[0].left_oid); this.logger.info("this.objs[0].right_oid - " + this.objs[0].right_oid); } | 实体类 关联类 | |||
6 | this.selectedObj | 前端多对象控件选中的对象传递到后端(选中的多个对象中的第一条,默认多对象控件有效) | 实体类: this.selectedObj.属性名,如this.selectedObj.oid this.selectedObj this.logger.info("this.selectedObj - " + JSON.stringify(this.selectedObj)); if (this.selectedObj != null) { this.logger.info("this.selectedObj.oid - " + this.selectedObj.oid); this.logger.info("this.selectedObj.ceshiAttr - " + this.selectedObj.ceshiAttr); } 关联类: this.selectedObj.relation_关联类属性名,如this.selectedObj.relation_oid this.selectedObj.left_左类属性名,如this.selectedObj.left_oid this.selectedObj.right_右类属性名,如this.selectedObj.right_oid this.selectedObj this.logger.info("this.selectedObj - " + JSON.stringify(this.selectedObj)); if (this.selectedObj != null) { this.logger.info("this.selectedObj.relation_oid - " + this.selectedObj.relation_oid); this.logger.info("this.selectedObj.left_oid - " + this.selectedObj.left_oid); this.logger.info("this.selectedObj.right_oid - " + this.selectedObj.right_oid); } | 实体类 关联类 | |||
7 | this.selectedObjs | 前端多对象控件选中的对象传递到后端(多选的多个对象,默认多对象控件有效) | 实体类:(x代表第x个元素) this.selectedObjs[x].属性名,如this.selectedObjs[0].oid this.selectedObjs this.logger.info("this.selectedObjs - " + JSON.stringify(this.selectedObjs)); if (this.selectedObjs != null && this.selectedObjs.length > 0) { this.logger.info("this.selectedObjs[0].oid - " + this.selectedObjs[0].oid); this.logger.info("this.selectedObjs[0].ceshiAttr - " + this.selectedObjs[0].ceshiAttr); } 关联类:(x代表第x个元素) this.selectedObjs[x].relation_关联类属性名,如this.selectedObjs[0].relation_oid this.selectedObjs[x].left_左类属性名,如this.selectedObjs[0].left_oid this.selectedObjs[x].right_右类属性名,如this.selectedObjs[0].right_oid this.selectedObjs this.logger.info("this.selectedObjs - " + JSON.stringify(this.selectedObjs)); if (this.selectedObjs != null && this.selectedObjs.length > 0) { this.logger.info("this.selectedObjs[0].relation_oid - " + this.selectedObjs[0].relation_oid); this.logger.info("this.selectedObjs[0].left_oid - " + this.selectedObjs[0].left_oid); this.logger.info("this.selectedObjs[0].right_oid - " + this.selectedObjs[0].right_oid); } | 实体类 关联类 | |||
8 | this.oldObj | 获取当前更新类的更新前的数据对象 可以是实体类和关联类 | 该关键字只能使用在类事件上 | 与this.obj相同 | |||
9 | this.oldObjs | 获取当前更新类的更新前的多条数据对象 可以是实体类和关联类 | 该关键字只能使用在类事件上 | 与this.objs相同 | |||
10 | this.customData | 前端脚本调用后端脚本传入的自定义参数 参数需要是Json对象 | 在前端脚本中通过this.callServer(param,"scriptName");这个param对应的是后端脚本的customData | this.customData // 前端脚本 this.callServer({"a": 1, "b": 2}).then(res => { console.log(res); }); // 后端脚本 this.logger.info("this.customData - " + JSON.stringify(this.customData)); | |||
11 | this.generateUUID() | 返回一个全局唯一的UUID(32位长度) | this.generateUUID() this.logger.info("this.generateUUID() - " + this.generateUUID()); | ||||
12 | 数据交互 | this.omf | getByOid(Integer oid, String className) getByOid(String oid, String className) getByOid(String oid, String className, boolean flatten) | 根据对象oid和类名查询对象详情 传入:
返回:ProxyObject | this.omf.getByOid var entityObj = this.omf.getByOid("63ED49BD68B7B841B985C9658364D993", this.className); this.logger.info(JSON.stringify(entityObj)); this.logger.info("entityObj.oid - " + entityObj.oid); var flattenRelationObj = this.omf.getByOid("FD00543903AED649BBC257F1190FD7A4", "AllTestRel", true); this.logger.info(JSON.stringify(flattenRelationObj)); this.logger.info("flattenRelationObj.relation_oid - " + flattenRelationObj.relation_oid); this.logger.info("flattenRelationObj.left_tstring - " + flattenRelationObj.left_tstring); | ||
13 | handleQueryData(String condition, String className) handleQueryData(String condition, String className, boolean withEnv) | 根据自定义查询条件查询对象列表 传入:
返回: List<ProxyObject> | condition:
| this.omf.handleQueryData // 快速查询 this.logger.info("---------- 快速查询 - 实体类 ----------"); let entitySql = `and obj.tstring is not null limit 2`; var entityObjs = this.omf.handleQueryData(entitySql, this.className); this.logger.info(JSON.stringify(entityObjs)); this.logger.info("entityObjs.length - " + entityObjs.length); this.logger.info("entityObjs[0].oid" + entityObjs[0].oid); this.logger.info("---------- 快速查询 - 关联类 ----------"); let relationSql = `and obj.relation_relstring is not null limit 2`; var relationObjs = this.omf.handleQueryData(relationSql, "AllTestRel"); this.logger.info(JSON.stringify(relationObjs)); this.logger.info("relationObjs.length - " + relationObjs.length); this.logger.info("relationObjs[0].relation_oid" + relationObjs[0].relation_oid); this.logger.info("relationObjs[0].left_id" + relationObjs[0].left_id); // 原生查询 this.logger.info("---------- 原生查询 - 实体类 ----------"); let entityNativeSql = `nativequery:select plt_currentprocess as "currentProcess",plt_createtime as "createTime",plt_creator as "creator",plt_lastmodifytime as "lastModifyTime",plt_lastmodifier as "lastModifier",plt_id as "id",plt_owner as "owner",plt_oid as "oid",plt_tcustombind as "tcustombind",plt_dynamicparams as "dynamicParams",plt_tstring as "tstring",plt_tuuid as "tuuid",plt_ttimestamp as "ttimestamp",plt_tboolean as "tboolean",plt_tinteger as "tinteger",plt_tdouble as "tdouble",plt_ttimeseries as "ttimeseries",plt_tlong as "tlong",plt_ttime as "ttime",plt_tlocalfile as "tlocalfile",plt_tclob as "tclob",plt_ttext as "ttext",cast(plt_tjson as varchar) as "tjson",plt_www as "www",plt_testlength as "testLength",plt_ceshiattr as "ceshiAttr",plt_signstring as "signString",plt_hhh as "hhh" from plt_test_alltest where 1=1 limit 2`; var entityNativeObjs = this.omf.handleQueryData(entityNativeSql, this.className); this.logger.info("entityNativeObjs.length - " + entityNativeObjs.length); this.logger.info("entityNativeObjs[0].oid" + entityNativeObjs[0].oid); this.logger.info("---------- 原生查询 - 关联类 ----------"); let relationNativeSql = `nativequery:select leftclass.plt_currentprocess as "left_currentProcess",leftclass.plt_createtime as "left_createTime",leftclass.plt_creator as "left_creator",leftclass.plt_lastmodifytime as "left_lastModifyTime",leftclass.plt_lastmodifier as "left_lastModifier",leftclass.plt_id as "left_id",leftclass.plt_owner as "left_owner",leftclass.plt_oid as "left_oid",leftclass.plt_tcustombind as "left_tcustombind",leftclass.plt_dynamicparams as "left_dynamicParams",leftclass.plt_tstring as "left_tstring",leftclass.plt_tuuid as "left_tuuid",leftclass.plt_ttimestamp as "left_ttimestamp",leftclass.plt_tboolean as "left_tboolean",leftclass.plt_tinteger as "left_tinteger",leftclass.plt_tdouble as "left_tdouble",leftclass.plt_ttimeseries as "left_ttimeseries",leftclass.plt_tlong as "left_tlong",leftclass.plt_ttime as "left_ttime",leftclass.plt_tlocalfile as "left_tlocalfile",leftclass.plt_tclob as "left_tclob",leftclass.plt_ttext as "left_ttext",cast(leftclass.plt_tjson as varchar) as "left_tjson",leftclass.plt_www as "left_www",leftclass.plt_testlength as "left_testLength",leftclass.plt_ceshiattr as "left_ceshiAttr",leftclass.plt_signstring as "left_signString",leftclass.plt_hhh as "left_hhh",relationclass.plt_createtime as "relation_createTime",relationclass.plt_creator as "relation_creator",relationclass.plt_version as "relation_version",relationclass.plt_rightclass as "relation_rightClass",relationclass.plt_leftoid as "relation_leftOid",relationclass.plt_rightoid as "relation_rightOid",relationclass.plt_lastmodifytime as "relation_lastModifyTime",relationclass.plt_oid as "relation_oid",relationclass.plt_lastmodifier as "relation_lastModifier",relationclass.plt_rightrev as "relation_rightRev",relationclass.plt_leftclass as "relation_leftClass",relationclass.plt_order as "relation_order",relationclass.plt_relint as "relation_relint",relationclass.plt_relstring as "relation_relstring",cast(relationclass.plt_reljson as varchar) as "relation_reljson",relationclass.plt_rellocalfile as "relation_relLocalfile",rightclass.plt_currentprocess as "right_currentProcess",rightclass.plt_createtime as "right_createTime",rightclass.plt_creator as "right_creator",rightclass.plt_lastmodifytime as "right_lastModifyTime",rightclass.plt_lastmodifier as "right_lastModifier",rightclass.plt_id as "right_id",rightclass.plt_owner as "right_owner",rightclass.plt_oid as "right_oid",rightclass.plt_tcustombind as "right_tcustombind",rightclass.plt_dynamicparams as "right_dynamicParams",rightclass.plt_tstring as "right_tstring",rightclass.plt_tuuid as "right_tuuid",rightclass.plt_ttimestamp as "right_ttimestamp",rightclass.plt_tboolean as "right_tboolean",rightclass.plt_tinteger as "right_tinteger",rightclass.plt_tdouble as "right_tdouble",rightclass.plt_ttimeseries as "right_ttimeseries",rightclass.plt_tlong as "right_tlong",rightclass.plt_ttime as "right_ttime",rightclass.plt_tlocalfile as "right_tlocalfile",rightclass.plt_tclob as "right_tclob",rightclass.plt_ttext as "right_ttext",cast(rightclass.plt_tjson as varchar) as "right_tjson",rightclass.plt_www as "right_www",rightclass.plt_testlength as "right_testLength",rightclass.plt_ceshiattr as "right_ceshiAttr",rightclass.plt_signstring as "right_signString",rightclass.plt_hhh as "right_hhh" from plt_cus_r_alltestrel relationclass left join plt_test_alltest leftclass on leftclass.plt_oid = relationclass.plt_leftoid left join plt_test_alltest rightclass on relationclass.plt_rightoid = rightclass.plt_oid where 1=1 limit 2`; var relationNativeObjs = this.omf.handleQueryData(relationNativeSql, "AllTestRel"); this.logger.info("relationNativeObjs.length - " + relationNativeObjs.length); this.logger.info("relationNativeObjs[0].relation_oid" + relationNativeObjs[0].relation_oid); this.logger.info("relationNativeObjs[0].left_id" + relationNativeObjs[0].left_id); | |||
14 | duplicateValueCheck(Map<String, Object> obj, String className, List<String> attrNames) | 判断对象中指定属性取值是否重复 传入:
返回:List<String> 存在重复的属性名列表 | this.omf.duplicateValueCheck var dvc = this.omf.duplicateValueCheck({"id": "789", "tstring": "test", "currentProcess": "123"}, this.className, ["id", "tstring"]); this.logger.info("duplicateValueCheck - " + dvc); 以上代码中配置对id、tstring判重,返回结果为“存在重复的属性名列表“,没有重复则返回空列表 数据中,id和currentProcess重复,tstring不重复,因此返回结果为[id] | ||||
15 | create(Map<String, Object> obj, String className) create(Map<String, Object> obj, String className, boolean runScript) create(Map<String, Object> obj, String className, List<String> attrNames) create(Map<String, Object> obj, String className, boolean runScript, List<String> attrNames) | 创建对象 传入:
返回:ProxyObject 创建后的对象 | this.omf.create try { var createdObj1 = this.omf.create({"tstring": "createByScript1", "id": 789}, this.className); this.logger.info("createdObj1 - " + JSON.stringify(createdObj1)); } catch (err) { this.ex.setFieldError("1创建失败", err.getMessage()); } try { var createdObj2 = this.omf.create({"tstring": "createByScript2", "id": 789}, this.className, ["id"]); this.logger.info("createdObj2 - " + JSON.stringify(createdObj2)); } catch (err) { this.ex.setFieldError("2创建失败", err.getMessage()); } | 对象1创建成功 对象2因为id重复判重而创建失败 | |||
16 | createObjs(List<Map<String, Object>> objs, String className) createObjs(List<Map<String, Object>> objs, String className, boolean runScript) createObjs(List<Map<String, Object>> objs, String className, List<String> attrNames) createObjs(List<Map<String, Object>> objs, String className, boolean runScript, List<String> attrNames) | 批量创建对象 传入:
返回:ProxyArray 创建后的对象列表 | this.omf.createObjs try { var createdObjs = this.omf.createObjs([{"tstring": "createByScript1", "id": 001}, {"tstring": "createByScript2", "id": 002}], this.className); this.logger.info("createdObjs - " + JSON.stringify(createdObjs)); this.logger.info("createdObjs[0].oid - " + createdObjs[0].oid); this.logger.info("createdObjs[1].oid - " + createdObjs[1].oid); } catch (err) { this.ex.setFieldError("创建失败", err.getMessage()); } this.omf.createObjs // omf.createObjs 脚本2 var myDate = new Date(); var objs = []; var obj1 = {"tstring": "testObj1 " + myDate.toLocaleTimeString()}; var obj2 = {"tstring": "testObj2 " + myDate.toLocaleTimeString()}; objs.push(obj1); objs.push(obj2); this.logger.info("obj1.tstring - " + objs[0].tstring); this.logger.info("obj2.tstring - " + objs[1].tstring); var myCreates = this.omf.createObjs(objs, this.className); this.logger.info("myCreates1.oid - " + myCreates[0].oid); this.logger.info("myCreates2.oid - " + myCreates[1].oid); this.res = myCreates; | 脚本1 脚本2 | |||
17 | edit(Map<String, Object> obj, String className) edit(Map<String, Object> obj, String className, boolean runScript) edit(Map<String, Object> obj, String className, List<String> attrNames) edit(Map<String, Object> obj, String className, boolean runScript, List<String> attrNames) | 编辑对象 传入:
返回:ProxyObject 修改后的对象 | this.omf.edit try { var queryObjs = this.omf.handleQueryData(" and obj.tstring is not null limit 1", this.className); if (queryObjs.length > 0) { var newObj = queryObjs[0]; newObj.tstring = "editedByScript"; newObj.id = 999; var editedObj = this.omf.edit(newObj, this.className); this.logger.info("editedObj - " + JSON.stringify(editedObj)); this.logger.info("editedObj.tstring - " + editedObj.tstring); } else this.logger.error("查询失败"); } catch (err) { this.ex.setFieldError("更新失败", err.getMessage()); } | ||||
18 | editObjs(List<Map<String, Object>> objs, String className) editObjs(List<Map<String, Object>> objs, String className, boolean runScript) editObjs(List<Map<String, Object>> objs, String className, List<String> attrNames) editObjs(List<Map<String, Object>> objs, String className, boolean runScript, List<String> attrNames) | 批量编辑对象 传入:
返回:ProxyArray 修改后的对象列表 | this.omf.editObjs try { var editedObjs = this.omf.editObjs([ {"oid": "AEF5B0B0CA6BE1448592CA3534F83A71", "tstring": "editedByScript1", "id": 111}, {"oid": "F94FD27B94685242900FA1FE54436A6F", "tstring": "editedByScript2", "id": 222} ], this.className); this.logger.info("editedObjs - " + JSON.stringify(editedObjs)); this.logger.info("editedObjs[0].tstring - " + editedObjs[0].tstring); this.logger.info("editedObjs[1].tstring - " + editedObjs[1].tstring); } catch (err) { this.ex.setFieldError("更新失败", err.getMessage()); } this.omf.editObjs // omf.editObjs 脚本2(上接omf.createObjs脚本2) myDate = new Date(); myCreates[0].tstring = "testObj1 edit " + myDate.toLocaleTimeString(); myCreates[1].tstring = "testObj2 edit " + myDate.toLocaleTimeString(); var myEdits = this.omf.editObjs(myCreates, this.className); this.logger.info("myEdits1.tstring - " + myEdits[0].tstring); this.logger.info("myEdits2.tstring - " + myEdits[1].tstring); this.res = myEdits; | 脚本1 脚本2 | |||
19 | delete(Map<String, Object> obj, String className) delete(Map<String, Object> obj, String className, boolean runScript) | 删除对象
返回:Boolean 是否删除成功 | this.omf.delete let oid = "testoid"; var queryObj = this.omf.getByOid(oid, this.className); let deleteRes1 = this.omf.delete(queryObj, this.className); this.logger.info("deleteRes1 - " + deleteRes1); let deleteRes2 = this.omf.delete({"oid": oid}, this.className); this.logger.info("deleteRes2 - " + deleteRes2); | ||||
20 | deleteObjs(List<Map<String, Object>> objs, String className) deleteObjs(List<Map<String, Object>> objs, String className, boolean runScript) | 批量删除对象
返回:Boolean 所有对象是否删除成功 | this.omf.deleteObjs let deleteRes3 = this.omf.deleteObjs([{oid: "AEF5B0B0CA6BE1448592CA3534F83A71"}, {oid: "F94FD27B94685242900FA1FE54436A6F"}], this.className); this.logger.info("deleteRes3 - " + deleteRes3); | ||||
21 | deleteByCondition(String condition, String className) deleteByCondition(String condition, String className, boolean runScript) | 按条件删除对象
返回:Boolean 是否删除成功 | this.omf.deleteByCondition if (this.selectedObjs != null && this.selectedObjs.length > 0) { var condition = `and obj.oid = '${this.selectedObjs[0].oid}'`; this.logger.info("condition - " + condition); let deleteRes4 = this.omf.deleteByCondition(condition, this.className); this.logger.info("deleteRes4 - " + deleteRes4); } else this.ex.setFieldError("删除失败", "请选择对象"); | ||||
22 | relCreate(Map<String, Object> flattenObj, String className) relCreate(Map<String, Object> flattenObj, String className, boolean runScript) relCreate(Map<String, Object> flattenObj, String className, List<String> flattenAttrNames) relCreate(Map<String, Object> flattenObj, String className, boolean runScript, List<String> flattenAttrNames) | 创建关联类对象,并创建/更新左右类对象 传入:
返回:ProxyObject 创建后的对象 | this.omf.relCreate // 新增关联对象及其左右类对象 let relObj1 = { "left_tstring": "leftTstringTest1", "right_id": "rightIdTest1", "relation_relstring": "relStringTest1" }; let relCreatedObj1 = this.omf.relCreate(relObj1, this.className); this.logger.info("relCreatedObj1 - " + JSON.stringify(relCreatedObj1)); // 新增关联对象和左类对象,更新右类对象 let relObj2 = { "left_tstring": "leftTstringTest2", "right_id": "rightIdTest2", "relation_relstring": "relStringTest2", "relation_rightOid": "63ED49BD68B7B841B985C9658364D993" }; let relCreatedObj2 = this.omf.relCreate(relObj2, this.className); this.logger.info("relCreatedObj2 - " + JSON.stringify(relCreatedObj2)); | ||||
23 | relCreateObjs(List<Map<String, Object>> flattenObjs, String className) relCreateObjs(List<Map<String, Object>> flattenObjs, String className, boolean runScript) relCreateObjs(List<Map<String, Object>> flattenObjs, String className, List<String> attrNames) relCreateObjs(List<Map<String, Object>> flattenObjs, String className, boolean runScript, List<String> flattenAttrNames) | 批量创建关联类对象,含左类对象和右类对象 传入:
返回:ProxyArray 创建后的对象列表 | this.omf.relCreateObjs let relObj1 = { "left_tstring": "leftTstringTest1", "right_id": "rightIdTest1", "relation_relstring": "relStringTest1" }; let relObj2 = { "left_tstring": "leftTstringTest2", "right_id": "rightIdTest2", "relation_relstring": "relStringTest2", "relation_rightOid": "63ED49BD68B7B841B985C9658364D993" }; let relCreatedObjs = this.omf.relCreateObjs([relObj1, relObj2], this.className); this.logger.info("relCreatedObjs - " + JSON.stringify(relCreatedObjs)); this.logger.info("relCreatedObjs[0].relation_relstring - " + relCreatedObjs[0].relation_relstring); this.logger.info("relCreatedObjs[0].left_oid - " + relCreatedObjs[0].left_oid); this.logger.info("relCreatedObjs[0].right_oid - " + relCreatedObjs[0].right_oid); this.logger.info("relCreatedObjs[1].relation_relstring - " + relCreatedObjs[1].relation_relstring); this.logger.info("relCreatedObjs[1].left_oid - " + relCreatedObjs[1].left_oid); this.omf.relCreateObjs var myDate = new Date(); var objs = []; // 优先级 left_oid > relation_leftOid var obj1 = { "relation_relString": "relString1 " + myDate.toLocaleTimeString(), "relation_leftOid": "54D98B2C9A770B479A4EA7742F210A69", "relation_rightOid": "C0AE6822C308744BABFF3621F85F86FA" }; var obj2 = { "relation_relString": "relString2 " + myDate.toLocaleTimeString(), "relation_leftOid": "750D4855B440034D87B00748FAF432DF", "relation_rightOid": "6F7777BE9DA6A94892C235C625963002", "left_tstring": "testRelObj1 testObj1 edit " + myDate.toLocaleTimeString(), "right_tstring": "testRelObj1 testObj2 edit " + myDate.toLocaleTimeString() }; var obj3 = { "relation_relString": "relString3 " + myDate.toLocaleTimeString(), "left_tstring": "left addRelationsWithEntityObjFromScript", "right_tstring": "right addRelationsWithEntityObjFromScript" }; objs.push(obj1); objs.push(obj2); objs.push(obj3); var myCreates = this.omf.relCreateObjs(objs, this.className); this.logger.info("myCreates1.relation_oid - " + myCreates[0].relation_oid); this.logger.info("myCreates2.relation_oid - " + myCreates[1].relation_oid); this.logger.info("myCreates3.relation_oid - " + myCreates[2].relation_oid); this.res = myCreates; | ||||
24 | relEdit(Map<String, Object> flattenObj, String className) relEdit(Map<String, Object> flattenObj, String className, boolean runScript) relEdit(Map<String, Object> flattenObj, String className, List<String> flattenAttrNames) relEdit(Map<String, Object> flattenObj, String className, boolean runScript, List<String> flattenAttrNames) | 编辑关联类对象,并更新左右类对象 传入:
返回:ProxyObject 编辑后的对象 | this.omf.relEdit if (this.selectedObj != null) { // 更新关联类对象及其左右类对象 this.selectedObj.relation_relstring = "testEditScript1"; this.selectedObj.left_tstring = "testEditScript1_left"; this.selectedObj.right_tstring = "testEditScript1_right"; let relEditedObj = this.omf.relEdit(this.selectedObj, this.className); this.logger.info("relEditedObj - " + JSON.stringify(relEditedObj)); } | ||||
25 | relEditObjs(List<Map<String, Object>> flattenObjs, String className) relEditObjs(List<Map<String, Object>> flattenObjs, String className, boolean runScript) relEditObjs(List<Map<String, Object>> flattenObjs, String className, List<String> flattenAttrNames) relEditObjs(List<Map<String, Object>> flattenObjs, String className, boolean runScript, List<String> flattenAttrNames) | 批量编辑关联类对象,并更新左右类对象 传入:
返回:ProxyArray 编辑后的对象列表 | this.omf.relEditObjs if (this.selectedObjs != null && this.selectedObjs.length > 1) { // 更新关联类对象及其左右类对象 this.selectedObjs[0].relation_relstring = "testEditScript001"; this.selectedObjs[0].left_tstring = "testEditScript001_left"; this.selectedObjs[0].right_tstring = "testEditScript001_right"; this.selectedObjs[1].relation_relstring = "testEditScript002"; this.selectedObjs[1].left_tstring = "testEditScript002_left"; this.selectedObjs[1].right_tstring = "testEditScript002_right"; let relEditedObjs = this.omf.relEditObjs([this.selectedObjs[0], this.selectedObjs[1]], this.className); this.logger.info("relEditedObjs - " + JSON.stringify(relEditedObjs)); this.logger.info("relEditedObjs[0].left_tstring - " + relEditedObjs[0].left_tstring); this.logger.info("relEditedObjs[0].right_tstring - " + relEditedObjs[0].right_tstring); this.logger.info("relEditedObjs[1].left_tstring - " + relEditedObjs[1].left_tstring); this.logger.info("relEditedObjs[1].right_tstring - " + relEditedObjs[1].right_tstring); } | ||||
26 | relDelete(Map<String, Object> flattenObj, String className) relDelete(Map<String, Object> flattenObj, String className, boolean runScript) | 删除关联类对象,不删除左右类对象 传入:
返回:boolean 是否删除成功 | this.omf.relDelete if (this.selectedObjs != null && this.selectedObjs.length > 1) { var flattenRelObj = this.omf.getByOid(this.selectedObjs[0].relation_oid, this.className, true); var deleteRes1 = this.omf.relDelete(flattenRelObj, this.className); this.logger.info("deleteRes1 - " + deleteRes1); var deleteRes2 = this.omf.relDelete(this.selectedObjs[1], this.className); this.logger.info("deleteRes2 - " + deleteRes2); } | ||||
27 | relDeleteObjs(List<Map<String, Object>> flattenObjs, String className) relDeleteObjs(List<Map<String, Object>> flattenObjs, String className, boolean runScript) | 批量删除关联类对象,不删除左右类对象 传入:
返回:boolean 是否全部删除成功 | this.omf.relDeleteObjs if (this.selectedObjs != null) { var deleteRes3 = this.omf.relDeleteObjs(this.selectedObjs, this.className); this.logger.info("deleteRes3 - " + deleteRes3); } | ||||
28 | cudBatchObjs(List<Map<String, Object>> events) | 批量增删改类对象,与cud-batch接口一致 传入:
(cud事件格式参考cud-batch接口,包含action、className、objs和oids参数,其中objs和oids类型需要为ArrayList) 返回:ProxyArray 对象列表 | this.omf.cudBatchObjs var ArrayList = Java.type(`java.util.ArrayList`); var cudBatchList = []; var objs = new ArrayList(); objs.add({"tstring": "cudBatchTest1"}); objs.add({"tstring": "cudBatchTest2"}); var cudObj1 = { "action": "create", "className": this.className, "objs": objs } cudBatchList.push(cudObj1); var myCudResult = this.omf.cudBatchObjs(cudBatchList); this.logger.info("myCudResult - " + myCudResult); // 目前暂不清楚如何从ProxyArray获取内容,只好将ProxyArray结果转为String let rawData = "" + myCudResult; // 使用正则表达式替换键值对格式,并将等号替换为冒号,但值中的等号保持不变 var jsonData = rawData.replace(/(\w+)=(\{[^{}]+\}|[^,}\]]+)/g, function(match, key, value) { // 检查值是否为null或是一个对象形式 if (value === "null" || (value.charAt(0) === '{' && value.charAt(value.length - 1) === '}')) return `"${key}":${value}`; else return `"${key}":"${value}"`; }).replace(/":(?!null|"|{|})/g, '":'); var parsedData = JSON.parse(jsonData); // 解析JSON this.logger.info("parsedData - " + JSON.stringify(parsedData)); this.logger.info("parsedData[0].tstring - " + parsedData[0].tstring); | ||||
29 | getString(Integer oid, String className, String attrName) getString(String oid, String className, String attrName) getString(String stashOid) | 根据主键oid和localfile类型的属性英文名attrName返回对应文件的base64字符串 传入:
返回:String 文件的base64字符串 | this.omf.getString // getString(String oid, String className, String attrName) var fileStr = this.omf.getString(this.obj.oid, this.className, "tlocalfile"); this.logger.info("fileStr - " + fileStr); // getString(String stashOid) if (this.obj.tlocalfile != null && this.obj.tlocalfile.startsWith("stash")) { var stashFileStr = this.omf.getString(this.obj.tlocalfile); this.logger.info("stashFileStr - " + stashFileStr); } | 表单edit状态且第一个对象的tlocalfile属性有文件时 表单create状态,在tlocalfile属性上传一个文件后(点击新增前) | |||
30 | getByteArray(Integer oid, String className, String attrName) getByteArray(String oid, String className, String attrName) getByteArray(String stashOid) | 根据主键oid和localfile类型的属性英文名attrName返回对应文件的Byte[]字节流 传入:
返回:ProxyArray 文件的Byte[]字节流 | this.omf.getByteArray if (this.obj.tlocalfile != null) { if (this.obj.tlocalfile.startsWith("stash")) { // getByteArray(String stashOid) var stashFileBytes = this.omf.getByteArray(this.obj.tlocalfile); this.logger.info("stashFileBytes.length - " + stashFileBytes.length); this.logger.info("stashFileBytes - " + stashFileBytes); } else { // getByteArray(String oid, String className, String attrName) var bytes = this.omf.getByteArray(this.obj.oid, this.className, "tlocalfile"); this.logger.info("bytes.length - " + bytes.length); this.logger.info("bytes - " + bytes); } } | 表单edit状态且第一个对象的tlocalfile属性有文件时 表单create状态,在tlocalfile属性上传一个文件后(点击新增前) | |||
31 | getFilePath(Integer oid, String className, String attrName) getFilePath(String oid, String className, String attrName) getFilePath(String stashOid) | 根据主键oid和localfile类型的属性英文名attrName获取对应文件的路径 传入:
返回:String 文件路径 | this.omf.getByteArray if (this.obj.tlocalfile != null) { if (this.obj.tlocalfile.startsWith("stash")) { // getFilePath(String stashOid) var stashFilePath = this.omf.getFilePath(this.obj.tlocalfile); this.logger.info("stashFilePath - " + stashFilePath); } else { // getFilePath(String oid, String className, String attrName) var filePath = this.omf.getFilePath(this.obj.oid, this.className, "tlocalfile"); this.logger.info("filePath - " + filePath); } } | 表单edit状态且第一个对象的tlocalfile属性有文件时 表单create状态,在tlocalfile属性上传一个文件后(点击新增前) | |||
32 | setLocalFile(Integer oid, String className, String filePath) setLocalFile(String oid, String className, String filePath) | 将指定路径filePath的文件存储到主键oid对象的localfile类型的属性英文名attrName中 传入:
返回:boolean 文件是否上传成功 | this.omf.setLocalFile let filePath = "/home/dwf/test.sh"; this.logger.info(`将文件${filePath}改为对象${this.obj.oid}的tlocalfile对应的文件`); var setLFSuccess = this.omf.setLocalFile(this.obj.oid, this.className, "tlocalfile", filePath); this.logger.info("setLFSuccess - " + setLFSuccess); | 表单edit状态且第一个对象的tlocalfile属性有文件时 成功后可查看和下载该对象的文件,已变为test.sh | |||
33 | transferToStashFile(String filePath) | 将指定路径filePath的文件转存为暂存文件(原文件会被删除,暂存文件超过30min会过期自动删除) 传入:
返回:String 暂存文件oid,以stash开头 | this.omf.transferToStashFile let filePath = "/home/dwf/test.sh"; this.logger.info(`将文件${filePath}转存为暂存文件,并返回暂存文件oid`); var stashOid = this.omf.transferToStashFile(filePath); this.logger.info("stashOid - " + stashOid); 注意,暂存文件超过30min会过期,自动删除 | ||||
34 | uploadFileToResource(String oid, String className, String attrName) | 根据主键oid和localfile类型的属性英文名attrName将对应文件(必须为zip文件)上传为资源文件 传入:
返回:ProxyObject 资源文件信息 | this.omf.uploadFileToResource var resource = this.omf.uploadFileToResource(this.obj.oid, this.className, "tlocalfile"); this.logger.info("resource - " + JSON.stringify(resource)); this.logger.info("resource.filePath - " + resource.filePath); 注意,只有zip文件允许被上传为资源文件 | ||||
35 | testApi(String apiConfigOid) testApi(String apiConfigOid, Map<String, Object> customConfigMap) | 传入:
返回:Object | this.omf.testApi var result = this.omf.testApi("2AC55B9B53A1554CBF1B3D3859073B10"); this.logger.info("result - " + result); this.logger.info("result.totalCount - " + result.totalCount); this.logger.info("result.data[0].tstring - " + result.data[0].tstring); let customConfigMap = { "requestHeader": `{"Authorization":"$user.token"}`, "requestParam": `{"pageIndex": 1, "pageSize": 3, "totalCount": true}`, "requestBody": `{"condition": "and obj.tstring is not null and obj.tstring <> 'cudBatchTest2'"}`, "dataAnalysis": "res" }; result = this.omf.testApi("2AC55B9B53A1554CBF1B3D3859073B10", customConfigMap); this.logger.info("result - " + result); this.logger.info("result.data.totalCount - " + result.data.totalCount); this.logger.info("result.data.data[0].tstring - " + result.data.data[0].tstring); | API配置: | |||
36 | handleQueryByAPI(String apiName) handleQueryByAPI(String apiName, Map<String, Object> customConfigMap) | 传入:
返回:Object | this.omf.handleQueryByAPI var result1 = this.omf.handleQueryByAPI("测试"); this.logger.info("result1.data[0].tstring - " + result1.data[0].tstring); // 解析为空时,将结果转为json var JSONObject = Java.type("com.alibaba.fastjson.JSONObject"); let customConfigMap = { "requestHeader": `{"Authorization":"$user.token"}`, "requestParam": `{"pageIndex": 1, "pageSize": 3, "totalCount": true}`, "requestBody": `{"condition": "and obj.tstring is not null and obj.tstring <> 'cudBatchTest2'"}`, "dataAnalysis": null }; var result2 = this.omf.handleQueryByAPI("测试", customConfigMap); var json = JSONObject.parseObject(result2.toString()); this.logger.info("json - " + json); this.logger.info("json.data.data[0] - " + json.getJSONObject("data").getJSONArray("data").get(0)); | ||||
37 | handleQueryBySQL(Map<String, Object> queryObjReqMap) handleQueryBySQL(String dataSourceName, Map<String, Object> queryObjReqMap) | 传入:
返回:ProxyObject | this.omf.handleQueryBySQL var result3 = this.omf.handleQueryBySQL({"condition": "select * from plt_mdl_metaclass limit 2"}); this.logger.info("result3.head - " + result3.head); this.logger.info("result3.data[0] - " + result3.data[0]); var result4 = this.omf.handleQueryBySQL("pgtest", {"condition": "select * from plt_mdl_metaclass limit 2 offset 2"}); this.logger.info("result4.head - " + result4.head); let headStr = "" + result4.head; var headArray = headStr.slice(1, -1).split(", "); // 去除字符串中的方括号并用逗号分割成数组 var idx = headArray.indexOf("plt_classname"); this.logger.info("result4.data[0][indexOfClassName] - " + result4.data[0][idx]); | 数据连接配置: | |||
38 | executeSQL(Map<String, Object> queryObjReqMap) executeSQL(String dataSourceName, Map<String, Object> queryObjReqMap) | 传入:
返回:void | this.omf.executeSQL // 第一段测试代码:pg增、改、删对象 this.omf.executeSQL({"condition": "insert into plt_cus_alltest(plt_oid, plt_str) values ('oidtest', 'teststr')"}); this.omf.executeSQL({"condition": "update plt_cus_alltest set plt_str = 'test1' where plt_oid = 'oidtest'"}); this.omf.executeSQL({"condition": "delete from plt_cus_alltest where plt_oid = 'oidtest'"}); // var obj1 = this.omf.handleQueryBySQL({"dataSourceName": "pgtest", "condition": "select * from plt_mdl_metaclass"}); // this.logger.info("obj1 - " + obj1); var obj2 = this.omf.handleQueryBySQL({"condition": "select * from plt_cus_alltest"}); this.logger.info("obj2 - " + obj2); // 第二段测试代码:iotdb新增对象 this.omf.executeSQL({"dataSourceName": "iotdb1065", "condition": "insert into root.cac.fcc.2911401.hc1(timestamp, t1, t2) values(now(), 22.22, 33.33)"}); var iotdbObj1 = this.omf.handleQueryBySQL({"dataSourceName": "iotdb1065", "condition": "select * from root.cac.fcc.2911401.hc1 where t2 = 33.33"}); this.logger.info("iotdbObj1 - " + iotdbObj1); // 第三段测试代码:iotdb新增对象,condition加密 this.omf.executeSQL({"dataSourceName": "iotdb1065", "condition": this.omf.dwfEncode("insert into root.cac.fcc.2911401.hc1(timestamp, t1, t2) values(now(), 44.44, 55.55)")}); var iotdbObj2 = this.omf.handleQueryBySQL({"dataSourceName": "iotdb1065", "condition": this.omf.dwfEncode("select * from root.cac.fcc.2911401.hc1 where t2 = 55.55")}); this.logger.info("iotdbObj2 - " + iotdbObj2); | ||||
39 | dwfDecode(String content) | 传入:
返回:String 解密后的查询条件 | this.omf.dwfDecode this.logger.info(this.omf.dwfDecode("YW5kJTIwb2JqLm9pZCUyMCUzRCUyMCUyNzElMjc=")); this.logger.info(this.omf.dwfDecode("YW5kIG9iai5vaWQgPSAnMSc=")); | ||||
40 | dwfEncode(String content) | 传入:
返回:String 加密后的查询条件 | this.omf.dwfEncode this.logger.info(this.omf.dwfEncode("and obj.oid = '1'")); | ||||
41 | this.em | createNativeQuery(String sqlString) | 直接执行SQL语句,支持数据更新、数据查询 支持的执行方法包括以下三种 1)更新数据对象executeUpdate()【支持:insert 、 update、delete】 2)查询数据对象,返回单个对象getSingleResult() 3)查询数据对象,返回多个对象getResultList() | 1)执行SQL语言executeUpdate() 2)查询返回单个对象getSingleResult () 3)查询返回多个对象getResultList() | 执行sql语句
| ||
42 | this.restTemplate | getForEntity(String url, Class<T> responseType, Object... uriVariables) | get方法请求第三方服务接口 @param url:第一参数表示要调用的服务的地址 @param responseType :第二个参数表示返回的消息体的数据类型 @param Object.../Map<String, ?> :第三个参数表示上传的参数 ,支持map和object @return <T> ResponseEntity<T> :
|
| |||
43 | postForEntity(String url, @Nullable Object request, Class<T> responseType, Object... uriVariables) | post方法请求第三方服务接口 @param url:第一参数表示要调用的服务的地址 @param responseType:第二个参数表示返回的消息体的数据类型 @param Object... /Map<String, ?> uriVariables:第三个参数表示上传的参数 @retrun 返回值是一个 |
var HttpHeaders = Java.type('org.springframework.http.HttpHeaders'); // 请求头 // 发送请求 | ||||
44 | exchange(String url, HttpMethod method, @Nullable HttpEntity<?> requestEntity, Class<T> responseType, Object... uriVariables) | exchange方法请求第三方服务接口 1)url: 请求地址; | (示例一)使用后端脚本的restTemplate.exchange请求第三方接口示例(POST方法),此方法可以带Header //开始请求token var HttpHeaders = Java.type("org.springframework.http.HttpHeaders"); var HttpEntity = Java.type('org.springframework.http.HttpEntity'); var HttpMethod = Java.type('org.springframework.http.HttpMethod'); var HashMap = Java.type('java.util.HashMap'); headers = new HttpHeaders(); headers.add("Content-Type", "application/json"); headers.add("Accept", "*/*"); request_body = { "appName":clientId, "userName":username, "password":password }; request = new HttpEntity(request_body,headers); //以下注释掉,等有了登录接口后在开通 this.logger.info("post_response:"); var get_response = this.restTemplate.exchange(tokenUrl,HttpMethod.POST, request,java.lang.String.class); var get_response_body = get_response.getBody(); this.res=get_response_body; //将请求结果返回给前端 (示例二)使用后端脚本的restTemplate.getForEntity方法请求第三方接口(Get方法) 无需header var get_response = this.restTemplate.getForEntity("接口访问地址,带参数的",Java.type('java.util.Map').class); // 如果返回结果是json,response建议反序列化为Map,从而可以用.直接访问属性 var get_response_body = get_response.getBody(); this.logger.info("body: "+ get_response_body); this.res = get_response_body; (示例三)使用后端脚本的restTemplate.exchange的方法调用Get接口带header var HttpHeaders = Java.type("org.springframework.http.HttpHeaders"); var HttpEntity = Java.type('org.springframework.http.HttpEntity'); var HttpMethod = Java.type('org.springframework.http.HttpMethod'); headers = new HttpHeaders(); headers.set("user", username); headers.set("timestamp", timestamp+""); headers.set("sign", sign); request_body ={}; this.logger.info("request"); request = new HttpEntity(headers); var get_response = restTemplate.exchange(tokenUrl,HttpMethod.GET, request, Java.type('java.util.Map').class); this.res = get_response.getBody() //请求结果返回给前端 | ||||
45 | this.websocket | socketId instanceId | 当前连接对应的socketId | 仅在消息订阅控件事件中支持 | var msg1 = this.websocket.getMsg(); this.logger.info("getMsg1 = " + msg1+" sockId:"+this.websocket.socketId+" msg"+this.customData); this.logger.info("getMsg1 = null"); | ||
46 | sendMsg(Object msg) | 发送单个连接信息 @param msg:消息对象 | 仅在消息订阅控件事件中支持 | this.websocket.sendMsg({"percent": 100, "desc": over}); | |||
47 | getLastMsg() | 根据socketid返回socket最后一次消息 @param socketId 指定的socketId @return Object : | 仅在消息订阅控件事件中支持 | var msg2 = this.websocket.getLastMsg(); this.logger.info("getLastMsg = " + msg2+" sockId:"+this.websocket.socketId+" customData:"+this.customData); this.logger.info("msg2 = null"); | |||
48 | getMsg() | 获取最后一个消息 @return Object : | 仅在消息订阅控件事件中支持 | var msg1 = this.websocket.getMsg(); this.logger.info("getMsg1 = " + msg1+" sockId:"+this.websocket.socketId+" msg"+this.customData); this.logger.info("getMsg1 = null"); | |||
49 | checkSocketIdExists() | 检查socketId是否活动 @return Object : | 仅在消息订阅控件事件中支持 | this.logger.info("2 checkSockIdExists - " + this.websocket.checkSocketIdExists()); | |||
50 | this.ex | setFieldError(String field, String message) | 在前端弹出错误提示信息 @param field:自定义,例如“报错信息是“; @param message:自定义,可以try catch异常后,将异常抛出,err.getMessage() | 会在前端执行后端脚本的界面上提示错误信息 | this.ex try { let queryObj = this.omf.handleQueryData("errorQuerySql", this.className); this.logger.info("queryObj - " + queryObj); } catch (err) { this.ex.setFieldError("报错内容", err.getMessage()); } | 日志:无 接口返回 前端提示信息 | |
51 | 日志打印 | this.logger | info(String msg) | 打印info类型信息 | this.logger this.logger.warn("this is a warn message"); this.logger.info("this is a info message"); this.logger.error("this is a error message"); | ||
52 | error(String msg) | 打印error类型信息 | |||||
53 | warn(String msg) | 打印warn类型信息 | |||||
54 | 执行第三方程序 | this.sh | exeCmd(String[] args) | 执行命令并等待命令执行结果,无超时限制 传入:
返回:String 执行命令后产生的内容 | this.sh this.logger.info("--------------- exeCmd ---------------"); let cmdArray = ["python3", "/home/dwf/test.py", "exeCmd"]; this.logger.info(this.sh.exeCmd(cmdArray)); this.logger.info("--------------- execute ---------------"); this.logger.info(this.sh.execute("python3 /home/dwf/test.py execute")); this.logger.info("--------------- execute with timeOut ---------------"); this.logger.info(this.sh.execute("python3 /home/dwf/test.py executeWithTimeout", 5)); this.logger.info("--------------- executeAsync ---------------"); this.logger.info(this.sh.executeAsync("python3 /home/dwf/test.py executeAsync")); | 脚本功能为连续10s打印日志 | |
55 | execute(String commandStr) execute(String commandStr, Integer timeoutSecond) | 执行命令并等待命令执行结果 传入:
返回:String 执行命令后产生的内容 | |||||
56 | executeAsync(String commandStr) | 异步执行,不等待返回结果 传入:
返回:null | |||||
57 | 组织用户管理 | this.org | user.create(Map<String, Object> user) | 新增用户 | this.org.user.create // 新增用户 this.logger.info("------------- 新增用户 -------------"); var ArrayList = Java.type('java.util.ArrayList'); var groupNames = new ArrayList(); groupNames.add("AllTestGroup"); // 传入用户组英文名 var u = {"name":"userTest0823", "displayName":"测试脚本", "password":"123Abc", "email":"123Abc@123.com", "groupNames":groupNames, "comment":"测试脚本"}; let createResult = this.org.user.create(u); this.logger.info("create user: " + JSON.stringify(createResult)); | ||
58 | user.edit(Map<String, Object> user) | 修改用户 | this.org.user.edit // 编辑用户 this.logger.info("------------- 编辑用户 -------------"); let testU = this.org.user.getByName("userTest0823"); this.logger.info("testU: " + JSON.stringify(testU)); testU.displayName = "edit"; let editResult = this.org.user.edit(testU); // 与接口一致,只返回true和false this.logger.info("edit user: " + editResult); var editedUser = this.org.user.getByName(testU.name); this.logger.info("editedUser: " + JSON.stringify(editedUser)); | ||||
59 | user.delete(String name) user.delete(Map<String, Object> user) | 根据用户名删除用户 | this.org.user.delete // 删除用户 this.logger.info("------------- 删除用户 -------------"); deleteResult = this.org.user.delete("userTest0823"); // 与接口一致,只返回true和false this.logger.info("delete user: " + deleteResult); | ||||
60 | user.getByName(String name) | 根据用户名获取用户信息(password不返回) | this.org.user.getByName // 查询用户信息 this.logger.info("------------- 查询用户信息 -------------"); let testUser = this.org.user.getByName("userTest0823"); this.logger.info("testUser: " + JSON.stringify(testUser)); | ||||
61 | user.getToken(String userName, String password) | 根据账号密码获取token | this.org.user.getToken // 根据用户名和密码获取token this.logger.info("------------- 根据用户名和密码获取token -------------"); var token = this.org.user.getToken("userTest0823", "123Abc"); this.logger.info("getToken: " + token); | ||||
62 | user.login(String userName, String password) | this.org.user.login // 根据用户名和密码登录并获取token var token = this.org.user.login("uTest", "uTest123123"); this.logger.info("login: " + token); | |||||
63 | group.create(Map<String, Object> group) | 新增用户组 | this.org.group.create // 新增用户组 var g = {"name":"groupTest0912", "displayName":"测试脚本", "comment":"测试脚本"}; let createdGroup = this.org.group.create(g); this.logger.info("create - " + JSON.stringify(createdGroup)); | ||||
64 | group.edit(Map<String, Object> group) | 修改用户组 | this.org.group.edit // 编辑用户组 var testG = this.org.group.getByName("groupTest0912"); this.logger.info("getByName - " + JSON.stringify(testG)); testG.displayName = "edit"; let editResultG = this.org.group.edit(testG); // 与接口一致,只返回true和false this.logger.info("edit - " + editResultG); var editedGroup = this.org.group.getByName(testG.name); this.logger.info("getByName - " + JSON.stringify(editedGroup)); | ||||
65 | group.delete(String name) group.delete(Map<String, Object> group) | 根据用户组名删除用户组 | this.org.group.delete // 删除用户组 deleteResult = this.org.group.delete("groupTest0912"); // 与接口一致,只返回true和false this.logger.info("delete - " + deleteResult); | ||||
66 | group.getByName(String name) | 根据用户组名获取用户组信息 | this.org.group.getByName // 查询用户组信息 var testG = this.org.group.getByName("groupTest0912"); this.logger.info("getByName - " + JSON.stringify(testG)); | ||||
67 | group.bindChildGroup(String parentGroupOid, String childGroupOid) group.bindChildGroup(String parentGroupOid, List<String> childGroupOid) | 根据oid绑定父子用户组 | this.org.group.bindChildGroup // 创建用户组 let parentGroup = this.org.group.create({"name":"groupTest0912", "displayName":"groupTest0912", "comment":"parent"}); this.logger.info("parentGroup: " + JSON.stringify(parentGroup)); this.logger.info("parentGroup.oid: " + parentGroup.oid); let childGroup = this.org.group.create({"name":"childGroupTest0912", "displayName":"childGroupTest0912", "comment":"child"}); this.logger.info("childGroup: " + JSON.stringify(childGroup)); this.logger.info("childGroup.oid: " + childGroup.oid); // 通过oid绑定父子组 var result = this.org.group.bindChildGroup(parentGroup.oid, childGroup.oid); this.logger.info("bindChildGroup: " + JSON.stringify(result)); | ||||
68 | 工具 | this.util | dwfDecode(String content) | 传入:
返回:String 解密后的查询条件 | this.util.dwfDecode this.logger.info(this.util.dwfDecode("YW5kJTIwb2JqLm9pZCUyMCUzRCUyMCUyNzElMjc=")); this.logger.info(this.util.dwfDecode("YW5kIG9iai5vaWQgPSAnMSc=")); | ||
69 | dwfEncode(String content) | 传入:
返回:String 加密后的查询条件 | this.util.dwfEncode this.logger.info(this.util.dwfEncode("and obj.oid = '1'")); | ||||
70 | transferLanguage(String content) transferLanguage(String content, Map<String, String> keyWordMap) | 传入:
返回:String 翻译后的内容 | this.util.transferLanguage // 翻译成功 this.logger.info("【类名不允许为空】翻译后 - " + this.util.transferLanguage("类名不允许为空")); // 翻译成功,且keyword替换正确 this.logger.info("【{keyword}连接失败】翻译后 - " + this.util.transferLanguage("{keyword}连接失败", {"keyword": this.className})); // 翻译成功,但keyword替换错误 this.logger.info("【类{className}查询失败:】翻译后 - " + this.util.transferLanguage("类{className}查询失败:", {"keyword": this.className})); // 获取前端语言环境 this.logger.info("this.env.locale - " + JSON.stringify(this.env.locale)); this.logger.info("this.env.locale.name - " + this.env.locale.name); | ||||
71 | 消息订阅 | this.subscription | instanceId | ||||
72 | 系统消息、站内信 | this.sysNotification | sendMail(Map<String, String> mailMap, List<String> receiverList) | this.sysNotification // 收件人(用户、用户组英文名) let receiverList = ["zs", "ls", "testGroup"]; // 发邮件 let mailMap = { "type": "测试", "title": "邮件标题", "content": "邮件内容" }; let mailResp = this.sysNotification.sendMail(mailMap, receiverList); // 或者 this.sysNotification.sendMailOrNotice(mailMap, receiverList, true) this.logger.info("" + mailResp); // 发通告 let noticeMap = { "type": "测试", "title": "通告标题", "content": "通告内容" }; let noticeResp = this.sysNotification.sendNotice(noticeMap, receiverList); // 或者 this.sysNotification.sendMailOrNotice(noticeMap, receiverList, false) this.logger.info("" + noticeResp); | |||
73 | sendNotice(Map<String, String> noticeMap, List<String> receiverList) | ||||||
74 | sendMailOrNotice(Map<String, String> notificationMap, List<String> receiverList, boolean isMail) | ||||||
75 | this.objectMapper | ? | |||||
76 | 代码装配 | this.partExt | ? |
老版本(尚未合并入新版本)
序号 | 功能分类 | 脚本名称/关键字 | 功能描述 | 适用范围/场景 | 脚本示例说明 | 备注 |
---|---|---|---|---|---|---|
1 | 关键字 | this.obj | 实体类.attrNames 关联类.attrNames 按钮中获取关联类对象的属性需要加左left右类right、关联类的前缀relation this.obj.relation_关联类属性名 this.obj.left_左类属性名 this.obj.right_右类属性名 关联类事件中只支持获取当前关联类对象 ,是从关联类对象返回结果中获取属性值 this.obj.oid this.obj.leftOid this.obj.rg=rightOid | 获取从表单上提取的当前实体类对象的属性值 注:类事件和按钮均可用 | //打印获取WorKOrder的系统属性oid this.logger.info("当前对象的oid属性值为"+this.obj.oid) //打印获取WorKOrder的类属性属性woTitle this.logger.info("当前对象的woTitle属性值为"+this.obj.woTitle) | |
获取从表单上提取的当前关联对象的属性值 注:类事件和按钮均可用 | //获取PartToPart的系统属性oid this.logger.info("当前关联类对象oid属性值为"+this.obj.relaiton_oid) //打印获取PartToPart的leftOid this.logger.info("当前关联类对象leftOid属性值为"+this.obj.left_oid) //打印获取PartToPart的rightOid this.logger.info("当前关联类对象rightOid属性值为"+this.obj.right_oid) | |||||
this.customData | 获取调用this.callServer(customData)传递的自定义对象。 | this.logger.info("当前对象的oid属性值为"+this.customDataw) | ||||
this.selectedObj | 前端的表单中有选中的对象 | this.logger.info("当前对象的oid属性值为"+this.selectedObj) | ||||
this.selectedObjs | 前端的表单中选中的多个对象 | this.logger.info("当前对象的oid属性值为"+this.selectedObjs) | ||||
this.oldObj | 实体类.attrNames 关联类.attrNames this.oldObj.relation_关联类属性名 this.oldObj.left_左类属性名 this.oldObj.right_右类属性名 | 获取当前更新前实体类对象的属性值 注:仅类事件上可用 | //打印WorkOrder对象更新前的系统属性oid this.logger.info("当前实体类对象更新前oid属性值为"+this.oldObj.oid) //打印WorkOrder对象更新/删除前的类属性oid this.logger.info("当前实体类对象更新前woTitle属性值为"+this.oldObj.woTitle) | |||
获取当前更新前关联对象的属性值 注:仅类事件可用 关联类属性:oid | //打印PartToPart对象更新前的系统属性leftOid this.logger.info("当前关联类对象更新前oid属性值为"+this.oldObj.leftOid) //获取PartToPart对象操作前的leftOid this.logger.info("当前关联类对象更新前leftOid属性值为"+this.oldObj.leftOid) this.logger.info("当前关联类对象更新前rightOid属性值为"+this.oldObj.rightOid) | |||||
this.objs | 实体类.attrNames 关联类.attrNames this.objs.relation_关联类属性名 this.objs.left_左类属性名 this.objs.right_右类属性名 | 获取表单内默认多对象控件,对象集合中实体类对象的属性值 注:类事件和按钮均可用 | //打印获取对象集合中第x对象的系统属性oid this.logger.info("当前实体类对象集第x个对象的oid属性值为"+this.objs[x].oid) //获取对象集合中第x对象的类属性woTitle this.logger.info("当前实体类对象集第x个对象的rightOid属性值为"+this.objs[x].woTitle) | |||
获取表单内默认多对象控件,获取当前对象集合中关联类对象的属性值 | //获取关联类对象集合中第x对象的系统属性oid this.logger.info("当前关联类对象集第x个对象的oid属性值为"+this.objs[x].relation_oid) //获取关联类对象集合中的第x对象的leftOid this.logger.info("当前关联类对象集第x个对象的leftOid属性值为"+this.objs[x].left_oid) //获取关联类对象集合中的第x对象的rightOid this.logger.info("当前关联类对象集第x个对象的rightOid属性值为"+this.objs[x].right_oid) | |||||
this.oldObjs | 实体类.attrNames 关联类.attrNames this.oldObjs.relation_关联类属性名 this.oldObjs.left_左类属性名 this.oldObjs.right_右类属性名 | 获取当前更新前实体类对象集合中对象的属性值 注:仅类事件上可用 | //获取更新前对象集合中第x对象的系统属性oid this.logger.info("当前实体类对象集第x个对更新前的oid属性值为"+this.oldObjs[x].oid) //获取操作前对象集合中第x对象的类属性woTitle this.logger.info("当前实体类对象集第x个对更新前的woTitle属性值为"+this.oldObjs[x].woTitle) | |||
获取当前更新前关联类类对象集合中对象的属性值 注:仅类事件可用 | this.logger.info("当前关联类对象集第x个对更新前的oid属性值为"+this.oldObjs[x].oid) this.logger.info("当前关联类对象集第x个对更新前的leftOid属性值为"+this.oldObjs[x].leftOid) this.logger.info("当前关联类对象集第x个对更新前的rightOid属性值为"+this.oldObjs[x].rightOid) | |||||
this.env | 获取当前环境的信息,关键字包括appConfig、serverIp、serverPort、serverURL四种关键字。
| 获取application文件中external属性 注意:在application文件中能获取到参数值需要以 external.appConfig开头,例如 external.appConfig.demoKey=demoValue | this.logger.info("获取application文件中的demKey"+this.env.appConfig.demoKey) this.logger.info("获取application文件中的demoKey.with.dots"+this.env.appConfig.demoKey.with.dots) this.logger.info("获取application文件中关于图片库上传单个文件的maxsize"+this.env.appConfig.maxFileSizeKb) this.logger.info("获取application文件中的roleGroup"+this.env.appConfig.roleGroup) | |||
获取当前服务器ip | this.logger.info("获取当前服务器ip"+this.env.serverIp) | |||||
获取当前服务器端口 | this.logger.info("获取当前服务器端口"+this.env.serverPort) | |||||
获取当前服务器URL | this.logger.info("获取当前服务器URL"+this.env.serverURL) | |||||
this.user | 获取当前登录用户的信息。关键字包括token、oid、userId、userName、displayName、userGroups。
| 获取当前用户token | this.logger.info("当前用户token"+this.user.token) | |||
获取当前用户oid | this.logger.info("获取当前用户oid"+this.user.oid) | |||||
获取当前用户userId(同oid) | this.logger.info("当前用户userId"+this.user.userId) | |||||
获取当前用户英文名userName | this.logger.info("当前用户英文名userName"+this.user.userName) | |||||
获取当前用户显示名displayName | this.logger.info("当前用户显示名displayName"+his.user.displayName) | |||||
获取用户所属用户组集,可以拿到userGroups的 comment:备注 displayName:显示名 order:序号 lastModifyTime:最近更新时间 creator:创建人 lastModifier:更新人 createTime:创建时间 name:英文名 oid:全局唯一标识 length:长度 | this.logger.info("用户所属用户组集第一个用户组的长度"+this.user.userGroups[0].length); this.logger.info("用户所属用户组集第一个用户组的备注"+this.user.userGroups[0].comment); this.logger.info("用户所属用户组集第一个用户组的 序号"+this.user.userGroups[0].order); this.logger.info("用户所属用户组集第一个用户组的 最近更新时间"+this.user.userGroups[0].lastModifyTime); this.logger.info("用户所属用户组集第一个用户组的 创建人"+this.user.userGroups[0].creator); this.logger.info("用户所属用户组集第一个用户组的 创建时间"+this.user.userGroups[0].createTime); this.logger.info("用户所属用户组集第一个用户组的 全局唯一标识"+this.user.userGroups[0].oid); this.logger.info("用户所属用户组集第一个用户组的 英文名"+this.user.userGroups[0].name); | |||||
this.className | 获取当前类名 | 获取当前类名 | this.logger.info("获取当前类名"+this.className) | |||
this.generateUUID | 生成uuid的函数 | this.logger.info("打印自动生成的uuid"+this.generateUUID()) | ||||
2 | 数据访问 | this.omf | getByOid(oid,className) | (Integer oid, String className)--根据oid获取对象(主键为int) (String oid, String className)--根据oid获取对象(主键为string) @param oid:支持String或Integer的主键 @param className:类名 @retrun ProxyObject:返回一个对象 | //获取当前操作对象的oid var oid=this.obj.oid; //根据oid获取当前操作的实例对象 var obj=this.omf.getByOid(this.oid,this.className) //打印获取到的对象 this.logger.info("当前操作的对象为—"+obj) //示例2- | |
handleQueryData(condition,className) | 执行sql语句 @param condition:数据库的sql语句; @param className:查询对象的类名 @return List<ProxyObject>:返回对象集合 | var objs=this.omf.handleQueryData("nativequery:select * from plt_cus_workorder limit 3",this.className) this.logger.info("objs的长度"+objs.length); this.logger.info("objs[0]的oid"+objs[0].oid); //示例2-
| ||||
create (Map<String, Object> obj, String className) | 创建对象 @param Map<String, Object> obj:对象 @param className:对应的类名 @return ProxyObject:返回一个对象 | //示例1 var obj={ "woTitle":"testScript", "woStatus":"已创建" } this.omf.create(obj,this.className); //示例2-创建实体类对象
//示例3-创建关联类对象
| ||||
create(Map<String, Object> obj, String className, boolean runScript) | 对象创建后是否调用创建前后事件 @param Map<String, Object> obj:对象 @param className:对应的类名 @param runScript:是否运行创建前后事件 @return ProxyObject:返回一个对象 | //需要在WorkOrder类创建后事件写入一个this.logger.info("执行了创建后事件") var obj={ "woTitle":"testScript", "woStatus":"已创建" } this.omf.create(obj,this.className,false) | ||||
create(Map<String, Object> obj, String className, List<String> attrNames) | 对象创建时,attrName值唯一 @param Map<String, Object> obj:对象 @param className:对应的类名 @param List<String> attrNames:需要哪些校验attrName值不允许重复 @return ProxyObject:返回一个对象 | var obj={ "woTitle":"testScript", "woStatus":"已创建" } try{ this.omf.create(obj,this.className,["woTitle"]);} catch(err){ this.ex.setFieldError("error",err.getMessage()) } | ||||
create(Map<String, Object> obj, String className, boolean runScript, List<String> attrNames) | 对象创建时,attrName值唯一, 是否调用创建前后事件 @param Map<String, Object> obj:对象 @param className:对应的类名 @param runScript:是否运行创建前后事件 @param List<String> attrNames:需要哪些校验attrName值不允许重复 @return ProxyObject:返回一个对象 | //需要在WorkOrder类创建后事件写入一个this.logger.info("执行了创建后事件") var obj={ "woTitle":"testScript", "woStatus":"已创建" } try{ this.omf.create(obj , this.className,false,["woTitle"]);} catch(err){ this.ex.setFieldError("error",err.getMessage()) } | ||||
delete(Map<String, Object> obj, String className) | 删除对象 @param Map<String, Object> obj:对象 @param className:对应的类名 @return boolean:返回一个删除是否成功 | //示例1 删除当前表单对象 var obj=this.omf.getByOid(this.obj.oid , this.className); try{ this.omf.delete(obj , this.className) catch(err){ this.ex.setFieldError("error",err.getMessage()) } //示例2
// 批量删除 deleteObjs | ||||
delete(Map<String, Object> obj, String className, boolean runScript) | 删除对象后是否调用删除前后事件 @param Map<String, Object> obj:对象 @param className:对应的类名 @param runScript:是否运行创建前后事件 @return boolean:返回一个删除是否成功 | //需要在WorkOrder类创建后事件写入一个this.logger.info("执行了删除后事件") var obj=this.omf.getByOid(this.obj.oid,this.className); try{ this.omf.delete(obj , this.className,false) catch(err){ this.ex.setFieldError("error",err.getMessage()) } | ||||
edit(Map<String, Object> obj, String className) | 编辑对象 @param Map<String, Object> obj:对象 @param className:对应的类名 @return ProxyObject返回对象 | var obj=this.omf.getByOid(this.obj.oid , this.className); let obj={ "woTitle":"testEditScript" } try{ this.omf.edit(obj , this.className) catch(err){ this.ex.setFieldError("error",err.getMessage()) } | ||||
edit(Map<String, Object> obj, String className, boolean runScript) | 编辑对象后是否调用更新前后事件 @param Map<String, Object> obj:对象 @param className:对应的类名 @paramboolean runScript:是否调用更新前后事件 @return ProxyObject返回对象 注:如果更新后事件还有this.omf.edit脚本,在执行按钮上的this.omf.edit时尽量不要设置为true,会出现循环调用数据库死锁的情况。 | //需要在WorkOrder类更新后事件写入一个this.logger.info("执行了更新后事件") var obj=this.omf.getByOid(this.obj.oid,this.className); let obj={ "woTitle":"testEditScript" } try{ this.omf.edit(obj , this.className,false) }catch(err){ this.ex.setFieldError("error",err.getMessage()) } | ||||
edit(Map<String, Object> obj, String className, boolean runScript,List<String> attrNames) | 编辑对象,attrName值唯一,是否调用更新前后事件 @param Map<String, Object> obj:对象 @param className:对应的类名 @paramboolean runScript:是否调用更新前后事件 @param List<String> attrNames:需要校验哪些属性值不允许重复 @return ProxyObject返回对象 | //需要在WorkOrder类更新后事件写入一个this.logger.info("执行了更新后事件") var obj=this.omf.getByOid(this.obj.oid,this.className); let obj={ "woTitle":"testEditScript" } try{ this.omf.edit(obj , this.className,false,["woTitle"]) catch(err){ this.ex.setFieldError("error",err.getMessage()) } | ||||
edit(Map<String, Object> obj, String className, List<String> attrNames) | 编辑对象,atrrName值唯一 @param Map<String, Object> obj:对象 @param className:对应的类名 @param List<String> attrNames:需要校验哪些属性值不允许重复 @return ProxyObject返回对象 | var obj=this.omf.getByOid(this.obj.oid,this.className); let obj={ "woTitle":"testScript" } try{ this.omf.edit(obj , this.className,false,["woTitle"]) }catch(err){ this.ex.setFieldError("error",err.getMessage()) } | ||||
duplicateValueCheck(Map<String, Object> obj, String className, List<String> attrNames) | 单纯判重,获得属性值出现重复值的数组 @param Map<String, Object> obj:对象 @param className:对应的类名 @param List<String> attrNames:需要校验哪些属性值不允许重复 @return List<String> :返回数组 | try{ var titles= this.omf.duplicateValueCheck(this.obj,this.className,["woTitle"]); catch(err){ this.ex.setFieldError("error",err.getMessage()) } | ||||
getString(Integer/String oid, String className, String attrName) | 返回base64字符串,主要为了配合上传文件使用 @param attrName:localfile类型的属性名,非localfile返回原值toString() @param oid:对象主键,支持integer和String @param className:类名 @return String :返回base64字符串 | //引用一个主键为integer的外部实体类 var attrs = this.omf.getString(this.obj.oid, this.className, "file00"); | ||||
getByteArray(Integer oid, String className, String attrName) | 主要为了配合上传文件使用 @param attrName:localfile类型的属性名,非localfile返回原值toString() @param oid:对象主键,支持integer和String @param className:对象类型 @return ProxyArray:返回byte[] | //引用一个主键为integer的外部实体类 var bytes = this.omf.getByteArray(this.obj.oid, this.className, "file00"); | ||||
//直接使用DWF内置的类 var bytes = this.omf.getByteArray(this.obj.oid, this.className, "file00"); | ||||||
getFilePath(String/Integer oid, String className, String attrName) | 获取对象的文件路径 @param oid:对象的主键,支持String或者integer @param className:类名 @return String:返回对象文件夹路径 | //返回本地文件夹,attrName是localfile var filePath = this.omf.getFilePath(this.obj.oid, this.className, "file00"); this.logger.info("filePath = " + filePath); | ||||
setLocalFile(Integer oid, String className, String attrName, String filePath) | 为对象上传附件 @param oid:对象的主键,支持String或者integer @param className:类名 @return boolean:返回对象文件是否上传成功 | this.logger.info("oid = " + this.obj.oid); this.logger.info("res = " + this.res); | ||||
新增后端脚本,支持拉平结构关联类对象的增删改
| ||||||
| ||||||
| ||||||
transferToStashFile | ||||||
deleteByCondition(condition,className,true/false) | var objs = this .selectedObjs[0]; var condition = `and obj.partName = '${objs.partName}' `; this .omf.deleteByCondition(condition, this .className, false ); | |||||
this.em | createNativeQuery(String sqlString) | 直接执行SQL | // 执行sql语句
| |||
this.restTemplate | getForEntity(String url, Class<T> responseType,Object.../Map<String, ?> uriVariables) | get方法请求第三方服务接口 三个重载方法 (String url, Class<T> responseType,Object... uriVariables) (String url, Class<T> responseType,Map<String, ?> uriVariables) 注:“/”代表同时支持 (URI url, Class<T> responseType) @param url:第一参数表示要调用的服务的地址 @param responseType :第二个参数表示返回的消息体的数据类型 @param Object.../Map<String, ?> :第三个参数表示上传的参数 @return <T> ResponseEntity<T> :
|
| |||
this.restTemplate | postForEntity(String url, Class<T> responseType,Object.../Map<String, ?> uriVariables) | post方法请求第三方服务接口 (String url, @Nullable Object request, 注:“/”代表同时支持 (URI url, @Nullable Object request, Class<T> responseType) @param url:第一参数表示要调用的服务的地址 @param responseType:第二个参数表示返回的消息体的数据类型 @param Object... /Map<String, ?> uriVariables:第三个参数表示上传的参数 @retrun 返回值是一个 |
var HttpHeaders = Java.type('org.springframework.http.HttpHeaders'); // 请求头 // 发送请求 | |||
3 | 订阅控件 | this.websokect | 支持sendMsg(msg)、getLastMsg(String sockId)getMsg、checkSockIdExists()四种函数 | 发送单个连接信息 @param msg:消息对象 | this.sendeMsg | |
@return Object :根据socketid返回socket最后一次消息 | ||||||
@return Object :根据类名和操作名、socket返回socket最后一个消息 | ||||||
4 | 执行服务器程序 | this.sh.exeCmd | exeCmd(String[] args) | 执行windows的命令 | // 在D:\建立mp3文件夹 this.exeCmd("md d:\mp3 ") | |
this.sh.execute | execute(String commandStr) | 执行Linux的命令(启动Shell命令) | //在/home/dwf目录中根据当前对象的oid和用户名创建一个文件 this .sh.execute( "cd /home/dwf && touch " + _obj.oid + "-" + _env.userName); | |||
5 | 打印后端日志 | this.logger.info | 打印info类型信息 | this.logger.info("this is a info message"); | ||
this.logger.warn | 打印error类型信息 | this.logger.error("this is a error message"); | ||||
this.logger.error | 打印warn类型信息 | this.logger.warn("this is a warn essage"); | ||||
6 | 后端脚本执行成功,设置表单提示 | this.ex.setFieldError | 当执行后端脚本需要在前端用message信息弹出报错信息时,使用this.ex抛出异常,可自定义设置报错信息 @param field:自定义,例如“报错信息是“; @param message:自定义,可以try catch异常后,将异常抛出,err.getMessage() | //设置异常报错信息 try{ this.omf.getByOid("1".this.className); }catch( err){ this.ex.setFieldError("报错消息是",err.getMessage()) } | ||
this.ex.setNotNullableError | 当执行后端脚本需要在前端用message信息弹出报错信息时,使用this.ex抛出不能为空的异常报错提示 @param field:自定义,例如可以设置某个字段不能为空this.obj.oid,也可以设置文字 | //根据oid获取实体类对象 var obj=thisomf.getByOid("s7w7b039300",this.className) //如果对象存在就设置woTitle属性为“工单1”,否则抛出不能为空的异常 if(!obj){ obj.woTitle="工单1" }else { this.setNotNullableError("s7w7b039300") } |