...
概述
...
实体类.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)
...
自定义内容
...
实体类.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)
...
实体类.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)
...
实体类.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)
...
获取当前环境的信息,关键字包括appConfig、serverIp、serverPort、serverURL四种关键字。
- appConfig:application文件
- serverIp:当前服务器ip
- serverPort:获取当前服务器端口
- serverURL:获取当前服务器URL
...
获取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)
...
获取当前登录用户的信息。关键字包括token、oid、userId、userName、displayName、userGroups。
- token:当前用户token
- oid:当前用户userId(同oid)
- userId:当前用户英文名userName
- userName:当前用户显示名displayName
- displayName:显示名
- userGroups:用户组
...
获取用户所属用户组集,可以拿到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);
...
(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-使用oid进行查询
var
obj =
this
.omf.getByOid(
"021C686BD26F594F9CA8AE56489BBEE7"
,
"yzqrelation"
);
...
执行sql语句
@param condition:数据库的sql语句;
@param className:查询对象的类名
@return List<ProxyObject>:返回对象集合
...
var objs=this.omf.handleQueryData("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-使用查询条件进行查询
var
objs =
this
.omf.handleQueryData(
"and obj.version > 100 order by obj.version limit 5"
,
"yzqrelation"
);
this
.logger.info(JSON.stringify(objs));
...
创建对象
@param Map<String, Object> obj:对象
@param className:对应的类名
@return ProxyObject:返回一个对象
...
//示例1
var obj={
"woTitle":"testScript",
"woStatus":"已创建"
}
this.omf.create(obj,this.className);
//示例2-创建实体类对象
var
newobj =
this
.omf.create({
"creator"
:
"9C92E891E9AE534DB685737DE467A9D0"
,
"createTime"
: 1574322941000,
"lastModifyTime"
: 1574322941000,
"lastModifier"
:
"9C92E891E9AE534DB685737DE467A9D0"
,
"yzqplainref"
:
"new_obj_3"
,
"oid"
:
"D883978E62398F4FB35F30A669B0E113"
,
"id"
:
"YZ20191121155541204"
,
"currentProcess"
:
"test_script_create"
},
"yzqright"
);
// 返回值是最终的存储到数据库的对象
//示例3-创建关联类对象
var
newRelation =
this
.omf.create(
{
"creator"
:
"9C92E891E9AE534DB685737DE467A9D0"
,
"rightClass"
:
"yzqright"
,
"rightOid"
:
"D883978E62398F4FB35F30A669B0E113"
,
"version"
: 1024,
"leftOid"
:
"2A47A5892C3C5746B0C063C72617E90F"
,
"createTime"
:
"1574322941000"
,
"leftClass"
:
"yzqleft"
,
"multiFile"
:
"[{\"name\":\"canlendar.png\",\"size\":\"4.863KB\",\"file_id\":\"ff8081816e8cc9d6016e8cf5a7cb0047\"}]"
},
"yzqrelation"
);
...
对象创建后是否调用创建前后事件
@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)
...
对象创建时,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())
}
...
对象创建时,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())
}
...
@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
this.omf.deleteObjs(
[
{oid: "F1213F4447A3AF4EBC0719191A0D21AD"},
{oid: "008C05026B27AA4F92F79773063E213A"}
], "className"
);
...
删除对象后是否调用删除前后事件
@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())
}
...
编辑对象
@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())
}
...
编辑对象后是否调用更新前后事件
@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())
}
...
编辑对象,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())
}
...
编辑对象,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())
}
...
单纯判重,获得属性值出现重复值的数组
@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"]);
this.logger.info("--------"+titles) ;
}
catch(err){
this.ex.setFieldError("error",err.getMessage())
}
...
返回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");
this.logger.info("str = " + attrs);
...
主要为了配合上传文件使用
@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");
this.logger.info("bytes = " + bytes.length);
this.logger.info("bytes = " + bytes);
...
//直接使用DWF内置的类
var bytes = this.omf.getByteArray(this.obj.oid, this.className, "file00");
this.logger.info("bytes = " + bytes.length);
this.logger.info("bytes = " + bytes);
...
获取对象的文件路径
@param oid:对象的主键,支持String或者integer
@param className:类名
@return String:返回对象文件夹路径
...
为对象上传附件
@param oid:对象的主键,支持String或者integer
@param className:类名
@return boolean:返回对象文件是否上传成功
...
this.logger.info("oid = " + this.obj.oid);
this.res = this.omf.setLocalFile(this.obj.oid, this.className, "file2", "/home/dwf/fileTest/2.png");
this.logger.info("res = " + this.res);
...
- relCreate(Map<String, Object> obj, String className, boolean runScript, List<String> attrNames)
...
- relEdit(Map<String, Object> obj, String className, boolean runScript, List<String> attrNames)
...
- relDelete(Map<String, Object> obj, String className, boolean runScript)
...
直接执行SQL
// 执行sql语句
//先定义一个函数,产生UUID
function
id() {
return
(((1+Math.random())*0x10000)|0).toString(16).substring(1);
}
//利用hibernate的em对象执行SQL
this
.em.createNativeQuery(
"insert into public.plt_org_user(plt_oid, plt_creator, plt_lastmodifier, plt_name, plt_displayname) values ('"
+ id() +
"', '9C92E891E9AE534DB685737DE467A9D0', '9C92E891E9AE534DB685737DE467A9D0', 'testServerScript', '测试服务端脚本')"
).executeUpdate();
//2执行存储函数
/* 假设库中已经存在一个名为 test_procedure 的函数:
CREATE OR REPLACE FUNCTION public.test_procedure()
RETURNS void AS
$BODY$
BEGIN
insert into test_procedure_table (id, create_time) values (1, now());
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION public.test_procedure()
OWNER TO postgres;
即,这个存储过程是向一个名为 test_procudure_table 的表中插入一条新数据
表 test_procudure_table 的定义:
CREATE TABLE public.test_procedure_table
(
id integer NOT NULL,
create_time timestamp without time zone
)
*/
// 执行存储过程
this
.em.createNativeQuery(
"select cast(test_procedure() as text)"
).getResultList();
...
发送单个连接信息
@param msg:消息对象
...
// 在D:\建立mp3文件夹
this.exeCmd("md d:\mp3 ")
...
启动Shell命令)
...
当执行后端脚本需要在前端用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())
}
...
当执行后端脚本需要在前端用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")
...
本文包含了DWF的后端脚本对应的全局关键字,主要内容有:
- 全局变量:DWF脚本引擎中可以直接访问到的变量数据
- 数据交互:DWF脚本访问数据或者通过接口访问数据,与前端进行消息通讯等
- 日志打印:DWF脚本输出日志信息
- 执行第三方程序:DWF后端服务器执行Python等本地程序
其它
- 最近更新于2023.09.06,对应DWF版本 master 20230906-093569487b
- 往右滑,“用法示例”为示例脚本,“备注”为对应的执行日志截图
- 绿色部分为旧版本内容,尚未更新(应该也是可用的)
激活后端脚本
在操作的前端脚本中依靠:this.callServer().then(res=>{}),激活配置在一起的后端脚本,其中this.callServer的参数有两个:
- customData:对象,可以不传,默认为空,用于传递到后端脚本的自定义变量,后端脚本通过this.customData获得该对象
- scriptName:字符串,可不传递,默认为:“default”,当操作中存在多个后端脚本的时候,用于指定执行哪个后端脚本
在类事件中激活后端脚本,当实体类、关联类对象被创建前后,删除前后,更新前后会执行对应事件的后端脚本。
在工作流的服务任务、用户任务前后处理事件被激活的时候执行后端脚本。
使用Java的能力
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
在后端脚本中,可以使用的Java依赖包如下:
代码块 | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>edu.thss.platform</groupId>
<artifactId>dwf-common-core</artifactId>
<version>1.0</version><!--VERSION-->
<properties>
<graalvm.version>21.3.6</graalvm.version> <!-- 19.2.0,21.3.6 -->
<poi.version>4.1.2</poi.version>
<iotdb.version>0.13.4</iotdb.version> <!-- 0.13.4,1.0.1 -->
<jjwt.version>0.11.5</jjwt.version>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.15</version>
</parent>
<dependencies>
<!--DWF_COMMON_CORE_PLACEHOLDER-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency> <!--starter-data-jpa中自带的是hibernate5.4可以兼容dm8(5.4-5.4都是兼容的)-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-starter-test</artifactId>-->
<!-- <scope>test</scope>-->
<!-- </dependency>-->
<dependency> <!-- 与xiaoymin相互依赖 -->
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
<dependency> <!-- OmfScriptFacade.MockMultipartFile -->
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
</dependency>
<dependency> <!-- LibraryService.StringEscapeUtils -->
<groupId>org.apache.commons</groupId>
<artifactId>commons-text</artifactId>
<version>1.10.0</version>
<scope>compile</scope>
</dependency>
<dependency> <!-- org.apache.tools.zip -->
<groupId>org.apache.ant</groupId>
<artifactId>ant</artifactId>
<version>1.10.13</version>
</dependency>
<dependency> <!-- rule, cond -->
<groupId>org.antlr</groupId>
<artifactId>antlr</artifactId>
<version>3.5.2</version>
</dependency>
<dependency> <!-- CondExprCalculatorUtil -->
<groupId>org.antlr</groupId>
<artifactId>antlr4-runtime</artifactId>
<version>4.7</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.34</version>
</dependency>
<!-- schemaN dependencies -->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.6.0</version>
</dependency>
<dependency>
<groupId>org.apache.iotdb</groupId>
<artifactId>iotdb-jdbc</artifactId>
<version>${iotdb.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.29</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc8</artifactId>
<version>12.2.0.1</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>9.2.1.jre8</version>
</dependency>
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>sqljdbc4</artifactId>
<version>4.0</version>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.6.3</version>
</dependency>
<dependency>
<groupId>org.neo4j.driver</groupId>
<artifactId>neo4j-java-driver</artifactId>
<version>4.4.2</version>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver-sync</artifactId>
<version>4.4.1</version>
</dependency>
<dependency>
<groupId>com.datastax.cassandra</groupId>
<artifactId>cassandra-driver-core</artifactId>
<version>3.11.3</version>
</dependency>
<dependency> <!-- cassandra.connect -->
<groupId>com.codahale.metrics</groupId>
<artifactId>metrics-core</artifactId>
<version>3.0.2</version>
</dependency>
<!-- schemaN dependencies END -->
<!-- graal.js -->
<dependency>
<groupId>org.graalvm.sdk</groupId>
<artifactId>graal-sdk</artifactId>
<version>${graalvm.version}</version>
</dependency>
<dependency>
<groupId>org.graalvm.js</groupId>
<artifactId>js</artifactId>
<version>${graalvm.version}</version>
</dependency>
<dependency>
<groupId>org.graalvm.js</groupId>
<artifactId>js-scriptengine</artifactId>
<version>${graalvm.version}</version>
</dependency>
<dependency>
<groupId>org.graalvm.tools</groupId>
<artifactId>profiler</artifactId>
<version>${graalvm.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.graalvm.tools</groupId>
<artifactId>chromeinspector</artifactId>
<version>${graalvm.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
<version>1.9.6</version>
<exclusions>
<exclusion> <!-- hibernate-core中也引用了 -->
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-websocket</artifactId>
<version>5.3.27</version>
<scope>compile</scope>
</dependency>
<!-- graal.js END -->
<!-- importData -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>${poi.version}</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>${poi.version}</version>
</dependency>
<!-- importData END -->
<!-- 官网制程中心需求 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.1</version>
<exclusions>
<exclusion>
<groupId>org.apache.commons</groupId>
<artifactId>commons-compress</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-compress</artifactId>
<version>1.23.0</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-scratchpad</artifactId>
<version>4.1.1</version>
</dependency>
<!-- 官网制程中心需求 END -->
<dependency> <!-- onlinePdfPreview -->
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.27</version>
</dependency>
<!-- ModelPackage -->
<dependency> <!-- CodePart / ModelPackageManagerService / spring-boot-starter-quartz -->
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.19</version>
</dependency>
<dependency> <!-- CodePartShowUp -->
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-yaml</artifactId>
<version>2.15.2</version>
<exclusions>
<exclusion>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency> <!-- CodeService -->
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.16.1</version>
</dependency>
<dependency>
<groupId>net.lingala.zip4j</groupId>
<artifactId>zip4j</artifactId>
<version>2.11.1</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-core</artifactId>
<version>5.8.22</version>
</dependency>
<!-- ModelPackage END -->
<dependency> <!-- quickStartExcel -->
<groupId>com.belerweb</groupId>
<artifactId>pinyin4j</artifactId>
<version>2.5.1</version>
</dependency>
<dependency> <!-- ExcelPrinter -->
<groupId>net.sourceforge.jexcelapi</groupId>
<artifactId>jxl</artifactId>
<version>2.6</version>
</dependency>
<dependency> <!-- RestExceptionAdvice -->
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.28</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache</artifactId>
<version>2.10.9.2</version>
</dependency>
<!-- jwt -->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-api</artifactId>
<version>${jjwt.version}</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-impl</artifactId>
<version>${jjwt.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-jackson</artifactId>
<version>${jjwt.version}</version>
<scope>runtime</scope>
</dependency>
<!-- jwt END -->
<dependency>
<groupId>com.konghq</groupId>
<artifactId>unirest-java</artifactId>
<version>3.14.1</version>
<exclusions>
<exclusion>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.11.0</version>
</dependency>
<dependency> <!-- AddinService,OrgService -->
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version>
</dependency>
<!-- 达梦 START -->
<!-- <dependency>-->
<!-- <groupId>com.dameng</groupId>-->
<!-- <artifactId>Dm8JdbcDriver18</artifactId>-->
<!-- <version>8.1.1.49</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>com.dameng</groupId>-->
<!-- <artifactId>DmDialect-for-hibernate5.4</artifactId>-->
<!-- <version>8.1.2.192</version>-->
<!-- </dependency>-->
<!-- 达梦 END -->
<!--plugin start-->
<!--plugin end-->
</dependencies>
<repositories>
<repository>
<id>aliyun</id>
<name>aliyun Repository</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>spring-snapshots</id>
<url>https://repo.spring.io/snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>spring-milestones</id>
<url>https://repo.spring.io/milestone</url>
</repository>
<repository>
<id>Nuiton-Repository</id>
<url>http://maven.nuiton.org/release</url>
</repository>
<repository>
<id>repository.cloudera.com</id>
<name>repository.cloudera.com-releases</name>
<url>https://repository.cloudera.com/artifactory/datanucleus</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-snapshots</id>
<url>https://repo.spring.io/snapshot</url>
</pluginRepository>
<pluginRepository>
<id>spring-milestones</id>
<url>https://repo.spring.io/milestone</url>
</pluginRepository>
<pluginRepository>
<id>Nuiton-Repository</id>
<url>http://maven.nuiton.org/release</url>
</pluginRepository>
<pluginRepository>
<id>repository.cloudera.com</id>
<name>repository.cloudera.com-releases</name>
<url>https://repository.cloudera.com/artifactory/datanucleus</url>
</pluginRepository>
</pluginRepositories>
</project> |
详情
序号 | 分类 | 关键字 | 函数/变量 | 功能说明 | 适用范围 | 用法示例 | 备注 | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | 全局变量 | this.className this.oprName | 获取当前类名(当前脚本所在表单对应的类名) 获取当前操作名 |
| ||||||||||||||||||||
2 | this.user |
| 获取当前登录用户信息,包括token、oid、userId、userName、displayName、userGroups等关键字 |
| ||||||||||||||||||||
3 | this.env |
| DWF服务端的当前环境信息,包括appConfig、locale、serverIp、serverPort、serverURL等关键字 |
| ||||||||||||||||||||
4 | this.obj | 表单绑定的类对象 | 实体类:
关联类:
| 实体类 关联类 | ||||||||||||||||||||
5 | this.objs | 前端多对象控件选中的对象传递到后端(多选的多个对象,默认多对象控件有效) | 实体类:(x代表第x个元素)
关联类:(x代表第x个元素)
| 实体类 关联类 | ||||||||||||||||||||
6 | this.selectedObj | 前端多对象控件选中的对象传递到后端(选中的多个对象中的第一条,默认多对象控件有效) | 实体类: this.selectedObj.属性名,如this.selectedObj.oid
关联类: this.selectedObj.relation_关联类属性名,如this.selectedObj.relation_oid this.selectedObj.left_左类属性名,如this.selectedObj.left_oid this.selectedObj.right_右类属性名,如this.selectedObj.right_oid
| 实体类 关联类 | ||||||||||||||||||||
7 | this.selectedObjs | 前端多对象控件选中的对象传递到后端(多选的多个对象,默认多对象控件有效) | 实体类:(x代表第x个元素) this.selectedObjs[x].属性名,如this.selectedObjs[0].oid
关联类:(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
| 实体类 关联类 | ||||||||||||||||||||
8 | this.oldObj | 获取当前更新类的更新前的数据对象 可以是实体类和关联类 | 该关键字只能使用在类事件上 | 与this.obj相同 | ||||||||||||||||||||
9 | this.oldObjs | 获取当前更新类的更新前的多条数据对象 可以是实体类和关联类 | 该关键字只能使用在类事件上 | 与this.objs相同 | ||||||||||||||||||||
10 | this.customData | 前端脚本调用后端脚本传入的自定义参数 参数需要是Json对象 | 在前端脚本中通过this.callServer(param,"scriptName");这个param对应的是后端脚本的customData |
| ||||||||||||||||||||
11 | this.generateUUID() | 返回一个全局唯一的UUID(32位长度) |
| |||||||||||||||||||||
12 | 数据交互 | this.omf | getByOid(Integer oid, String className) getByOid(String oid, String className) getByOid(String oid, String className, boolean flatten) | 根据对象oid和类名查询对象详情 传入:
返回:ProxyObject |
| |||||||||||||||||||
13 | handleQueryData(String condition, String className) handleQueryData(String condition, String className, boolean withEnv) | 根据自定义查询条件查询对象列表 传入:
返回: List<ProxyObject> | condition:
|
| ||||||||||||||||||||
14 | duplicateValueCheck(Map<String, Object> obj, String className, List<String> attrNames) | 判断对象中指定属性取值是否重复 传入:
返回:List<String> 存在重复的属性名列表 |
以上代码中配置对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 创建后的对象 |
| 对象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 创建后的对象列表 |
| 脚本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 修改后的对象 |
| |||||||||||||||||||||
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 修改后的对象列表 |
| 脚本1 脚本2 | ||||||||||||||||||||
19 | delete(Map<String, Object> obj, String className) delete(Map<String, Object> obj, String className, boolean runScript) | 删除对象
返回:Boolean 是否删除成功 |
| |||||||||||||||||||||
20 | deleteObjs(List<Map<String, Object>> objs, String className) deleteObjs(List<Map<String, Object>> objs, String className, boolean runScript) | 批量删除对象
返回:Boolean 所有对象是否删除成功 |
| |||||||||||||||||||||
21 | deleteByCondition(String condition, String className) deleteByCondition(String condition, String className, boolean runScript) | 按条件删除对象
返回:Boolean 是否删除成功 |
| |||||||||||||||||||||
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 创建后的对象 |
| |||||||||||||||||||||
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 创建后的对象列表 |
| |||||||||||||||||||||
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 编辑后的对象 |
| |||||||||||||||||||||
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 编辑后的对象列表 |
| |||||||||||||||||||||
26 | relDelete(Map<String, Object> flattenObj, String className) relDelete(Map<String, Object> flattenObj, String className, boolean runScript) | 删除关联类对象,不删除左右类对象 传入:
返回:boolean 是否删除成功 |
| |||||||||||||||||||||
27 | relDeleteObjs(List<Map<String, Object>> flattenObjs, String className) relDeleteObjs(List<Map<String, Object>> flattenObjs, String className, boolean runScript) | 批量删除关联类对象,不删除左右类对象 传入:
返回:boolean 是否全部删除成功 |
| |||||||||||||||||||||
28 | cudBatchObjs(List<Map<String, Object>> events) | 批量增删改类对象,与cud-batch接口一致 传入:
(cud事件格式参考cud-batch接口,包含action、className、objs和oids参数,其中objs和oids类型需要为ArrayList) 返回:ProxyArray 对象列表 |
| |||||||||||||||||||||
29 | getString(Integer oid, String className, String attrName) getString(String oid, String className, String attrName) getString(String stashOid) | 根据主键oid和localfile类型的属性英文名attrName返回对应文件的base64字符串 传入:
返回:String 文件的base64字符串 |
| 表单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[]字节流 |
| 表单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 文件路径 |
| 表单edit状态且第一个对象的tlocalfile属性有文件时 表单create状态,在tlocalfile属性上传一个文件后(点击新增前) | ||||||||||||||||||||
32 | setLocalFile(Integer oid, String className, String filePath) setLocalFile(String oid, String className, String filePath) | 将指定路径filePath的文件存储到主键oid对象的localfile类型的属性英文名attrName中 传入:
返回:boolean 文件是否上传成功 |
| 表单edit状态且第一个对象的tlocalfile属性有文件时 成功后可查看和下载该对象的文件,已变为test.sh | ||||||||||||||||||||
33 | transferToStashFile(String filePath) | 将指定路径filePath的文件转存为暂存文件(原文件会被删除,暂存文件超过30min会过期自动删除) 传入:
返回:String 暂存文件oid,以stash开头 |
注意,暂存文件超过30min会过期,自动删除 | |||||||||||||||||||||
34 | uploadFileToResource(String oid, String className, String attrName) | 根据主键oid和localfile类型的属性英文名attrName将对应文件(必须为zip文件)上传为资源文件 传入:
返回:ProxyObject 资源文件信息 |
注意,只有zip文件允许被上传为资源文件 | |||||||||||||||||||||
35 | testApi(String apiConfigOid) testApi(String apiConfigOid, Map<String, Object> customConfigMap) | 传入:
返回:Object |
| API配置: | ||||||||||||||||||||
36 | handleQueryByAPI(String apiName) handleQueryByAPI(String apiName, Map<String, Object> customConfigMap) | 传入:
返回:Object |
| |||||||||||||||||||||
37 | handleQueryBySQL(Map<String, Object> queryObjReqMap) handleQueryBySQL(String dataSourceName, Map<String, Object> queryObjReqMap) | 传入:
返回:ProxyObject |
| 数据连接配置: | ||||||||||||||||||||
38 | executeSQL(Map<String, Object> queryObjReqMap) executeSQL(String dataSourceName, Map<String, Object> queryObjReqMap) | 传入:
返回:void |
| |||||||||||||||||||||
39 | dwfDecode(String content) | 传入:
返回:String 解密后的查询条件 |
| |||||||||||||||||||||
40 | dwfEncode(String content) | 传入:
返回:String 加密后的查询条件 |
| |||||||||||||||||||||
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
(示例二)使用后端脚本的restTemplate.getForEntity方法请求第三方接口(Get方法) 无需header
(示例三)使用后端脚本的restTemplate.exchange的方法调用Get接口带header
| |||||||||||||||||||||
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() | 会在前端执行后端脚本的界面上提示错误信息 |
| 日志:无 接口返回 前端提示信息 | ||||||||||||||||||
51 | 日志打印 | this.logger | info(String msg) | 打印info类型信息 |
| |||||||||||||||||||
52 | error(String msg) | 打印error类型信息 | ||||||||||||||||||||||
53 | warn(String msg) | 打印warn类型信息 | ||||||||||||||||||||||
54 | 执行第三方程序 | this.sh | exeCmd(String[] args) | 执行命令并等待命令执行结果,无超时限制 传入:
返回:String 执行命令后产生的内容 |
| 脚本功能为连续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) | 新增用户 |
| |||||||||||||||||||
58 | user.edit(Map<String, Object> user) | 修改用户 |
| |||||||||||||||||||||
59 | user.delete(String name) user.delete(Map<String, Object> user) | 根据用户名删除用户 |
| |||||||||||||||||||||
60 | user.getByName(String name) | 根据用户名获取用户信息(password不返回) |
| |||||||||||||||||||||
61 | user.getToken(String userName, String password) | 根据账号密码获取token |
| |||||||||||||||||||||
62 | user.login(String userName, String password) |
| ||||||||||||||||||||||
63 | group.create(Map<String, Object> group) | 新增用户组 |
| |||||||||||||||||||||
64 | group.edit(Map<String, Object> group) | 修改用户组 |
| |||||||||||||||||||||
65 | group.delete(String name) group.delete(Map<String, Object> group) | 根据用户组名删除用户组 |
| |||||||||||||||||||||
66 | group.getByName(String name) | 根据用户组名获取用户组信息 |
| |||||||||||||||||||||
67 | group.bindChildGroup(String parentGroupOid, String childGroupOid) group.bindChildGroup(String parentGroupOid, List<String> childGroupOid) | 根据oid绑定父子用户组 |
| |||||||||||||||||||||
68 | 工具 | this.util | dwfDecode(String content) | 传入:
返回:String 解密后的查询条件 |
| |||||||||||||||||||
69 | dwfEncode(String content) | 传入:
返回:String 加密后的查询条件 |
| |||||||||||||||||||||
70 | transferLanguage(String content) transferLanguage(String content, Map<String, String> keyWordMap) | 传入:
返回:String 翻译后的内容 |
| |||||||||||||||||||||
71 | 消息订阅 | this.subscription | instanceId | |||||||||||||||||||||
72 | 系统消息、站内信 | this.sysNotification | sendMail(Map<String, String> mailMap, List<String> receiverList) |
| ||||||||||||||||||||
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 | ? | |||||||||||||||||||||
77 | Java扩展 | Java.type('...') |
|
| ||||||||||||||||||||
78 | 兼容性测试 |
|
-