...
概述
...
实体类.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:
serverIp:
serverPort:
serverURL:
...
本文包含了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 | 兼容性测试 |
|
-