# 1. DEE使用实例

# 1.1. 表单触发设置

简要描述:

  • 表单触发设置通常用于当预定条件满足时,将A8表单中的数据通过DEE写入到第三方系统(数据库)

必要条件:

  • A8流程表单
  • DEE任务

这里主要讲解: 1、如何创建DEE任务、获取流程表单数据并且通过转换以后写入第三方数据库。 2、如何配置表单触发设置。


# 1.1.1. 一、DEE可视化配置工具-创建DEE任务

  1. 进入DEE可视化配置工具创建DEE任务(任务创建详见用户操作手册)
  2. 来源配置,用于获取A8表单数据,这里使用【JDBC适配器】。注意:需要在sql添加where id=$masterId。

1696919784945.png 1696919794050.png

  1. 转换配置-创建【字段映射适配器】,用于将字段映射为目标所需要的字段

这里我们的目标表的格式为: 1696919810353.png 所以我们需要通过【字段映射】适配器将来源A8表单中的字段映射为目标数据库表中的字段。

1)首先需要将来源字段载入映射配置来源中,可以通过手工填写,也可以通过【载入来源字段】按钮来直接载入。 1696919823377.png

2)通过【批量配置】按钮,进行映射配置目标字段的批量配置,也可以通过手工填写 1696919835169.png

3)需要确认字段映射的来源字段与目标字段一一匹配,如果不匹配,可以通过拖拽的方式进行排序,最后保存 1696919844922.png

  1. 此时我们已经完成来源配置与转换配置,从A8表单中取到的数据字段已经转换成为了我们需要写入第三方数据库的数据字段格式

1696919855114.png

  1. 接下来我们要配置目标适配器,将数据写入第三方数据库中

1)因为本例是写入第三方数据库,所以目标适配器需要创建一个【JDBC适配器】 1696919863890.png

  1. 到此我们的DEE任务就配置完成了,回顾一下这个任务都做了哪些事情

1)来源配置:通过JDBC适配器获取表单数据,记得在sql添加where id = $masterId就可以获取调用任务时当前表单的数据

2)转换配置:将A8表单数据转换成了第三方数据库所需要的数据格式 通过【载入来源字段】载入了来源配置中获取到的A8表单数据字段 通过【批量配置】配置了目标数据库字段 检查映射配置中“来源”字段与“目标”字段是否一一匹配

3)输出目标:将转换完成后的数据,写入目标数据库,完成数据写入。

  1. 我们需要将该DEE任务导出为drp包,等待下一步部署到A8中(如何导出drp包详见用户操作手册)

# 1.1.2. 二、A8-表单触发设置配置

  1. 通过集团管理员(集团版)/单位管理员(企业版)将导出的drp包部署到A8

1696919880770.png

  1. 登录表单管理员,编辑表单,进入触发设置页签

1696919888690.png

  1. 这里我们选择“流程结束后触发”,“核定节点通过”与“首次条件满足时”留给大家自己去试试

1696919897042.png

  1. 到这里A8端的触发设置的配置也全部完成了,接下来我们来演示效果

# 1.1.3. 三、结果展示

  1. 发起表单并填入数据

1696919908489.png

  1. 处理表单,直至流程结束
  2. 查看第三方目标数据库表,发现数据已经完美写入

1696919917353.png

# 1.2. 定时器发起A8流程表单

简要描述:

  • 通过定时器轮询第三方系统,定时发起A8流程表单。
  • 可用于将业务系统的待审批数据自动发起A8流程表单进行审批。

必要条件:

  • A8流程表单
  • DEE任务

这里主要讲解: 1、如何创建一个DEE任务能够查询第三方数据库并发起A8流程表单 2、如何设置定时器定时执行DEE任务 3、如何设置流程表单相关


# 1.2.1. 一、DEE可视化配置工具-创建DEE任务

1.首先获取第三方表数据,每次获取一条数据

1)第三方数据库表结构 1696919930250.png

2)来源配置,因为是从数据库里面取数据,所以我们采用【JDBC适配器】 1696919939162.png

3)对取出来的数据做一些限制,每次只取一条数据,并且取flag=0的数据,这里我们对第三方数据库的数据有标记 flag=0表示没有被DEE任务读取 flag=1表示已经被DEE任务读取但是还未被发起流程表单 flag=2表示已经被DEE任务读取并且已经发起A8流程表单 1696919949482.png

2.使用脚本适配器更新读取的数据状态,避免并发时DEE任务脏读

1)这里我们使用脚本适配器来更新flag=1,避免下一个定时器触发的DEE任务脏读;并且将id放入上下文参数中,方便后续更新状态使用 1696920008757.png

2)以上我们就完成了读取第三方数据库数据,并且更新数据状态,防止脏读

3.转换配置,需要将我们从第三方数据库读取出来的数据映射成为A8表单需要的数据格式

1)使用【字段映射】适配器转换数据格式,载入来源字段 1696920019617.png

2)使用【批量配置】载入目标A8表单字段 1696920028545.png

3)勾选【是否使用到A8表单】,注意:只要在【字段映射】中使用到了A8表单字段,那么必须要勾选【是否使用到A8表单】 1696920037435.png

4)创建转换适配器-【XSLT格式转换】 1696920045427.png

4.以上我们就完成了:

1、第三方系统数据读取,并标记 2、将第三方系统数据转换成为A8表单所需要数据 1696920055257.png

5.输出目标-发起A8流程表单

1)使用输出目标中的【A8接口】适配器,完成适配器配置 1696920066882.png

6.更新数据状态flag=2,表示该条数据已经成功发起A8流程表单

1)这里我们同样使用脚本适配器来完成状态flag=2的更新 1696920075412.png

7.到此我们完成了整个DEE任务的配置!


# 1.2.2. 二、设置定时器

1.在DEE可视化配置工具中使用定时器

进入【基础设置】-【定时器管理】-【新建】 1696920084441.png

2.在A8中使用定时器

1、需要将DEE可视化配置工具中的定时器停用 2、将DEE任务导出drp包,并且部署到A8中 3、通过集团管理员(集团版)/单位管理员(企业版)登录,打开【DEE控制台】-【定时器设置】,重新启用定时器 1696920097154.png


# 1.2.3. 三、结果展示

1)首先我们看看我们准备的数据,4条数据,也就是说定时器会花费4分钟完成自动发起4张表单 1696920105073.png

2)目前A8待办是空的 1696920111665.png

3)最后结果,完美发起A8流程表单,并且数据全部更新为flag=2 1696920118930.png

# 1.3. 批量发起A8流程表单

简要描述:

  • 通过查询多条数据,一次性批量发起流程表单
  • 可用于将业务系统的待审批数据批量自动发起A8流程表单进行审批。

必要条件:

  • A8流程表单
  • DEE任务

这里主要讲解: 1、如何创建一个DEE任务能够查询第三方数据库并批量发起A8流程表单 2、如何设置流程表单相关

# 1.3.1. 一、DEE可视化配置工具-创建DEE任务

1.首先获取第三方系统数据库数据,我们先看看第三方系统数据结构

1696920164658.png

2.来源配置-因为是从第三方系统数据库获取数据,所以我们使用【JDBC】适配器,并且加上where flag = 0

1696920177403.png

1696920184849.png

3.使用【脚本】适配器为已经读取到的数据设置flag=1,避免其它DEE任务脏读

1696920194268.png

4.映射配置-通过【字段映射】,将第三方系统的字段映射成为A8表单字段

1)通过【载入来源字段】载入映射配置来源 2)通过【批量配置】载入映射配置目标 3)勾选【是否使用到A8表单】 1696920204561.png 1696920211689.png

5.映射配置-通过【XSLT格式转换】,将数据格式转换为A8表单所需数据格式

1696920219858.png

6.输出目标-通过【rest】-【批量发起A8流程表单】,将取到的多条数据一次发起多张流程表单

1696920226843.png

7.最后再次回写来源数据库中的数据,set flag = 2,表示该条数据已经成功被发起流程表单,同样通过【脚本】适配器来完成

1696920235370.png 1696920242538.png

8.到此就完成了整个DEE任务的配置

1696920250065.png

# 1.3.2. 二、结果展示

1.首先我们看一下第三方数据库中的数据,一共有6条,flag都等于0,也就是说一会儿会批量发起6个流程

1696920259170.png

2.我们在看一下A8中的待办,并没有待办流程

1696920266675.png

3.接下来我们调试任务,可以看到A8中一次性批量发起了6张流程表单,并且第三方数据库的数据flag都已经被设置为了flag=2

1696920275617.png

1696920282448.png

# 1.4. 定时器同步A8基础数据

简要描述:

  • 通过定时器轮询第三方系统,将其它系统基础数据同步到A8基础数据中。
  • 基础数据一般为填写表单的基本数据,如物料等…

必要条件:

  • A8基础数据(无流程表单)
  • DEE任务

这里主要讲解: 1、如何创建一个DEE任务查询第三方数据库并且将数据同步到A8基础数据中 2、如何设置定时器定时执行DEE任务 3、如何设置A8基础数据相关


# 1.4.1. 一、DEE可视化配置工具-创建DEE任务

1.来源配置-首先获取第三方系统数据库数据

1)首先看一下第三方数据库数据格式 1696920297505.png

2)因为是从第三方数据库中获取数据,那么这里我们使用【JDBC适配器】来获取数据 1696920305832.png

2.转换配置-需要将第三方系统的数据转换成为A8基础数据表单格式

1)使用【字段映射】适配器,将第三方系统数据转换成A8基础数据表单格式

2)使用【载入来源字段】功能载入字段映射中来源字段 1696920315688.png

3)使用【批量配置】载入字段映射中目标字段 1696920323200.png

4)【字段映射】中只要使用到了A8表单字段,那么必须勾选上【是否使用到A8表单】 1696920330442.png

5)创建【XSLT格式转换】适配器,将数据格式装换为A8基础数据所需格式 1696920338378.png

6)到此我们的转换配置就完成了,接下来需要调用A8接口写入A8基础数据

3.输出目标-A8接口-无流程表单

1)在输出目标中,创建【A8接口】适配器,方法选择【无流程表单】 1696920349874.png

4.到此我们完成整个DEE任务的创建,该任务完成了:

1、从第三方系统数据库获取基础数据 2、将第三方系统的数据格式转换成为A8基础数据格式 3、将数据通过A8接口同步到A8基础数据中


# 1.4.2. 二、设置定时器

1.在DEE可视化配置工具中使用定时器

进入【基础设置】-【定时器管理】-【新建】 1696920360057.png

2.在A8中使用定时器

1、需要将DEE可视化配置工具中的定时器停用 2、将DEE任务导出drp包,并且部署到A8中 3、通过集团管理员(集团版)/单位管理员(企业版)登录,打开【DEE控制台】-【定时器设置】,重新启用定时器 1696920368805.png


# 1.4.3. 三、结果展示

1)首先看看我们准备的第三方系统的数据 1696920382960.png

2)在看看A8中基础数据,里面并没有任何数据 1696920389906.png

3)现在我们开启定时器,等待1分钟,发现数据已经全部同步过去了 1696920396467.png

4)我们在到第三方数据库中增加2条数据,并修改一条数据 1696920403105.png

5)等待定时器同步后,A8基础数据完美同步 1696920411354.png

# 1.5. DEE栏目配置

简要描述:

  • DEE栏目配置通常用于把第三方数据库的数据直接展示在A8栏目中

必要条件:

  • A8栏目
  • DEE任务

这里主要讲DEE栏目配置DEE任务如何创建,以及如何展示表单栏目。


# 1.5.1. DEE可视化配置工具

  1. 进入DEE可视化配置工具创建DEE任务(任务创建见用户操作手册)
  2. 首先创建来源适配器,获取需要展示的数据,注意需要在sql上加上$whereString。

1696920423297.png

  1. 调试任务(去掉sql中的 $whereString 否则调试报错,调试完成后依然需要加上)然后在元数据中载入元数据,可以在元数据中配置字段和表的别名

1696920430563.png

  1. 完成任务配置后导出任务部署到A8服务器

# 1.5.2. A8端DEE栏目配置

  1. 用system账户登录A8管理界面,如图所示配置所需栏目

1696920442418.png

  1. 用单位管理员账户登录A8管理界面,如图所示添加所需所需栏目

1696920453193.png 1696920460578.png

  1. 用个人账户登录A8界面,进入个人空间查看栏目展示效果

1696920492809.png

# 1.6. 表单开发高级

简要描述:

  • 表单开发高级主要用于表单发起数据格式检验(这里的例子是对发起表单数据的第一行数据进行校验[输入以 你好 开头的字符才能发起表单,否则流程阻塞]),节点操作绑定DEE任务

必要条件:

  • A8表单
  • DEE任务

这里主要讲DEE任务如何创建,以及表单高级开发配置,流程表单创建不做讲述。


# 1.6.1. DEE可视化配置工具

  1. 进入DEE可视化配置工具创建DEE任务(任务创建见用户操作手册)
  2. 首先在来源配置创建脚本适配器(主要用脚本适配器结合系统代码库完成)。

下图中使用了大量系统代码库函数这些函数的使用方法可以在系统代码库使用说明中查看详情,这里只做简单讲解:formDataToDoc函数用于取出表单高级发开中的formdata数据并转化为document对象(该函数可以获取表单数据),getRootElement函数可以获取document的根节点并转化为Elenment对象,getChildByName函数可以获取Element的子节点,getElementValue函数获取节点值,再对取出值进行条件判断,最后用setHighSetStr函数来控制流程是否阻塞。 1696920548098.png

  1. 完成任务配置后导出任务部署到A8服务器

# 1.6.2. A8端表单高级开发配置

  1. 用登录A8表单管理员账户,如图进行高级开发配置

首先点击操作设置选项卡中的添加,然后完成对应信息的填写,再点击高级开发弹出小窗口,点击增加按钮添加时间绑定,选择对应操作,任务类型选择DEE,最后绑定对应的任务,处理方式有阻塞和并发两种,阻塞任务可以阻塞流程,也可以不阻塞流程(系统代码库高级开发函数有说明),并发任务和流程互不干涉执行。 1696920562450.png

  1. 把高级开发创建的操作绑定到对应的流程节点

在应用绑定选项卡中修改对应流程,然后点击修改流程,弹出流程界面点击发起人节点,选择节点属性,然后在流程操作中绑定高级开发创建的操作。 1696920571388.png

  1. 用个人账户发起对应流程表单查看效果

在第一个输入框输入:123,然后点击发送,会弹出提示框,点击确定后,回到流程界面;在第一个输入框输入:你好。。。,然后点击发送,不会有任何提示,流程发起成功。 1696920578481.png

# 1.7. 表单扩展控件

简要描述:

  • 表单扩展控件主要用于将数据库的数据展示到界面并选择其中的数据回填到表单

必要条件:

  • A8表单
  • DEE任务

这里主要讲DEE任务如何创建,以及表单扩展控件配置,流程表单创建不做讲述。


# 1.7.1. DEE可视化配置工具

  1. 进入DEE可视化配置工具创建DEE任务(任务创建见用户操作手册)
  2. 首先在来源配置创建JDBC适配器。

创建三个JDBC适配器,分别是树、主表、从表,树是展示树结构的表数据(至少三个字段:唯一id、父节点、节点名),主表和从表是要展示的数据(主表和从表需要有关联字段),树和主表也需要关联字段(点击树节点会展示该节点和节点下所有的主表数据),sql后要加上$whereString否则条件查询不生效

1696920593729.png 1696920604648.png 1696920613041.png 1696920620608.png

  1. 调试任务(去掉sql中的 $whereString 否则调试报错,调试完成后依然需要加上)然后在元数据中载入元数据

1696920663195.png 1696920671961.png

  1. 完成任务配置后导出任务部署到A8服务器

# 1.7.2. A8端表单高级开发配置

  1. 用登录A8表单管理员账户,如图表单扩展控件配置

进入表单的基础设置选项卡,然后选择对应表格,录入类型选择选择数据交换任务,然后点击后面的空格会弹出交换任务设置窗口,选择对应任务和对应结果集,绑定字段是回填当前单元格选择数据对应的字段,列表样式选择树形列表(列表数据回填不用显示树,去掉DEE任务的树结果集即可),列表分类字段是关联主表数据的字段,然后选择对应字段,最后选择要回填数据的单元格,录入类型选择数据关联,然后选择关联对象和关联属性。 1696920692522.png 1696920699163.png 1696920706075.png

  1. 用个人账户发起对应流程表单查看效果

点击数据选择按钮弹出详细信息展示界面,然后点击对应树节点展示相应数据,选择主表数据弹出从表数据,然后勾选所要回填的数据点击确定,数据就会回填入表单。 1696920716071.png 1696920723449.png 1696920729935.png

# 1.8. 自定义适配器

简要描述:

  • 根据表单的“字段1”选择内容,查询对应地区的数据库,写入指定数据表中 (说明:上海数据库的“t_adr”存放的记录为“上海”表;香港数据库的“t_adr”表存放的记录为“香港”,需要写入到演示数据库的“t_input”表中)

必要条件:

  • 开发自定义适配器

  • 配置自定义适配

  • 配置A8表单

    开发步骤:

# 1.8.1. 1 开发自定义适配器

package com.seeyon.v3x.dee.adapter.extend;

import com.seeyon.v3x.dee.Document;
import com.seeyon.v3x.dee.Parameters;
import com.seeyon.v3x.dee.TransformException;
import com.seeyon.v3x.dee.TransformFactory;
import com.seeyon.v3x.dee.adapter.Adapter;
import com.seeyon.v3x.dee.resource.DbDataSource;
import com.seeyon.v3x.dee.util.DocumentUtil;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.ResultSetMetaData;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

//Created by dkywolf on 2017-3-25. 实现 com.seeyon.v3x.dee.adapter.Adapter接口 execute(Document document)方法 方法参数document为上文传入document对象
public class TrainAdapter implements Adapter {

    private static final long serialVersionUID = -3429864985613740672L;
    // 传入参数
    private String dbType;
    // 执行数据源
    private DbDataSource dsId1; // 上海数据源
    private DbDataSource dsId2; // 香港数据源
    // 执行sql

    private Map<String, String> sql;

    // document:上文出入的document对象
    @Override
    public Document execute(Document document) throws TransformException {

        Connection con = null;
        Document newDoc = TransformFactory.getInstance().newDocument("root");
        Document.Element root = newDoc.getRootElement();
        try {
            // 获取数据库连接
            con = getConnection(document.getContext().getParameters());
            if (con == null)
                return document;
            for (Map.Entry<String, String> entry : sql.entrySet()) {
                // 表名
                String tableName = entry.getKey();
                // SQL
                String mySql = entry.getValue();
                Document.Element table = root.addChild(tableName);
                PreparedStatement pstmt = null;
                ResultSet rs = null;
                try {
                    pstmt = con.prepareStatement(mySql);
                    rs = pstmt.executeQuery();
                    // 获取列头
                    Map<String, Integer> cmap = getColumnInfo(rs);
                    // 构造document对象
                    int count = 0;
                    while (rs.next()) {
                        Document.Element row = table.addChild("row");
                        Iterator<String> it = cmap.keySet().iterator();
                        while (it.hasNext()) {
                            String columnName = it.next();
                            Document.Element column = row.addChild(columnName.trim());
                            Object o = rs.getObject(columnName);
                            column.setValue(o);
                        }
                        count++;
                    }
                    table.setAttribute("count", count);
                    table.setAttribute("totalCount", count);
                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                    if (rs != null)
                        rs.close();
                    if (pstmt != null)
                        pstmt.close();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (con != null)
                try {
                    con.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
        }
        // 合并document(不考虑分页)
        // newDoc = PageUtil.pageDocument(newDoc,
        // document.getContext().getParameters());
        document = DocumentUtil.merge(document, newDoc);
        return document;
    }

    protected Connection getConnection(Parameters param) throws TransformException {

        try {
            if ("2".equals(param.evalString(dbType))) {
                // 香港
                if (dsId2 == null) {
                    return null;
                }
                return dsId2.getConnection();
            }
            if (dsId1 == null) {
                return null;
            }
            return dsId1.getConnection();
        } catch (Exception e) {
            throw new TransformException(e.getLocalizedMessage(), e);
        }
    }

    // 获取列头
    public Map<String, Integer> getColumnInfo(ResultSet rs) throws SQLException {

        ResultSetMetaData metaData = rs.getMetaData();
        Map<String, Integer> cmap = new HashMap<String, Integer>();
        int columnCount = metaData.getColumnCount();
        for (int i = 1; i < columnCount + 1; i++) {
            cmap.put(metaData.getColumnLabel(i), metaData.getColumnType(i));
        }
        return cmap;
    }

    public String getDbType() {

        return dbType;
    }

    public void setDbType(String dbType) {

        this.dbType = dbType;
    }

    public DbDataSource getDsId1() {

        return dsId1;
    }

    public void setDsId1(DbDataSource dsId1) {

        this.dsId1 = dsId1;
    }

    public DbDataSource getDsId2() {

        return dsId2;
    }

    public void setDsId2(DbDataSource dsId2) {

        this.dsId2 = dsId2;
    }

    public Map<String, String> getSql() {
        return this.sql;
    }

    public void setSql(Map<String, String> sql) {
        this.sql = sql;
    }
}

# 1.8.2. 2 配置任务

自定义适配器: 在来源配置中创建一适配器,选择自定义配置 1696920752728.png 映射配置: 1696920760545.png 写入配置: 1696920766648.png

# 1.8.3. 3 表单配置

在流程首节点,填写权限的开发高级中阻塞绑定该DEE任务, 参数绑定表单字段field1字段,如图 1696920774777.png

发起流程时,任务就会根据field1字段选取的值,去查询对应的数据库 1696920781680.png 发起后,执行结果: 1696920789001.png

# 1.9. 调用REST适配器发起流程表单

简要描述:

  • 利用DEE工具取数据然后进行映射和格式转换,再调用REST接口适配器发起流程表单

必要条件:

  • A8服务和DEE工具端

    开发步骤:

# 1.9.1. 1 给对应流程表单添加模板编号

  1. 登录A8表单制作人员帐号,选择表单应用-流程表单制作页签,修改对应的流程表单,在应用绑定的模板编号处填入模板编号,如下图: 1696920798473.png

# 1.9.2. 2 配置DEE任务

创建任务: 1696920806818.png 创建数据来源适配器(取数据): 1696920813938.png 创建映射适配器和格式转化适配器: 1696920823113.png 1696920830203.png 创建REST适配器发起流程表单: 1696920839313.png

# 1.9.3. 3 执行任务结果

调试任务后登录对应流程人员帐号进入代办事项: 1696920846938.png

# 1.10. 调用REST适配器发起无流程表单

简要描述:

  • 利用DEE工具取数据然后进行映射和格式转换,再调用REST接口适配器发起无流程表单

必要条件:

  • A8服务和DEE工具端

    开发步骤:

# 1.10.1. 1 给对应无流程表单添加模板编号

  1. 登录A8表单制作人员帐号,选择业务生成器-基础数据制作页签,修改对应的无流程表单,在应用绑定的模板编号处填入模板编号,如下图: 1696920858234.png

# 1.10.2. 2 配置DEE任务

创建任务: 1696920872696.png 创建数据来源适配器(取数据): 1696920879129.png 创建映射适配器和格式转化适配器: 1696920886218.png 1696920892817.png 创建REST适配器发起无流程表单: 1696920900313.png

# 1.10.3. 3 执行任务结果

调试任务后登录对应流程人员帐号进入业务生成器-基础数据页签,点击对应无流程表单查看数据: 1696920908072.png

# 1.11. java代码调用rest接口执行DEE任务

简要描述:

  • 根据任务编号调用A8服务或者DEE工具端提供的rest接口来执行DEE任务

必要条件:

  • 编写相关java代码

  • A8服务或DEE工具端

  • 有任务编号的DEE任务

    开发步骤:

# 1.11.1. 1 编写java代码如下

package test;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;

import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.seeyon.v3x.dee.TransformException;

public class CallRest {
    public static void main(String[] args) {
        try {
            String isA8 = "1";// 1是A8接口服务器,0是工具端接口服务器
            int timeOut = 30;// 超市时间单位:s
            String url = "http://127.0.0.1:8080";// 服务器地址
            HttpURLConnection conn = null;
            String token = "";
            Map<String, Object> jheader = new HashMap<String, Object>();
            if ("1".equals(isA8)) {
                String userName = "rest";// A8rest用户(需要用A8system管理员用户创建并授权)
                String passWord = "123456";// A8rest用户密码
                // A8接口验证token获取接口地址
                String getToken = url + "/seeyon/rest/token/" + userName + "/" + passWord;
                // 创建请求链接
                conn = (HttpURLConnection) new URL(getToken).openConnection();
                conn.setRequestMethod("GET");// 设置请求方法
                conn.setConnectTimeout(timeOut * 1000);// 设置请求超时时间
                int code = conn.getResponseCode();// 获取请求结果状态码
                String jsonResult = "";
                if (code == 200) {// 结果状态码为200表示调用接口成功
                    BufferedReader inStream = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
                    jsonResult = getResponseString(inStream);
                    token = jsonResult;
                    if (jsonResult.contains("{")) {
                        JSONObject result = JSONObject.parseObject(jsonResult);
                        token = result.getString("id");
                    }
                    jheader.put("token", token);
                    jheader.remove("userName");
                    jheader.remove("passWord");
                }
            }
            String taskNo = "csdyrw";// 任务编号(任务创建时选填)
            // dee任务调用接口地址
            String getRest = url + "/seeyon/rest/dee/task/" + taskNo;
            conn = (HttpURLConnection) new URL(getRest).openConnection();
            // 设置头消息(存放token、请求参数类型等)
            conn.setRequestProperty("Content-type", "application/json");
            for (Entry<String, Object> entry : jheader.entrySet()) {
                conn.setRequestProperty(entry.getKey(), (String) entry.getValue());
            }
            String urlType = "POST";// 请求类型(DEE任务调用只有GET[无参]和POST[有参])
            conn.setRequestMethod(urlType);
            conn.setConnectTimeout(timeOut * 1000);
            conn.setDoOutput(true);// 是否输入参数
            // body参数
            Map<String, Object> bodys = new HashMap<String, Object>();
            bodys.put("printStr", "测试任务已被调用!");
            if (!"GET".equals(urlType)) {
                SerializerFeature[] features = {};
                byte[] bypes = JSONObject.toJSONBytes(bodys, features);
                conn.getOutputStream().write(bypes);// 输入参数
            }
            int code = conn.getResponseCode();
            String jsonResult = "";
            if (code == 200) {
                BufferedReader inStream = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
                jsonResult = getResponseString(inStream);
            } else {
                throw new TransformException("访问rest接口出错,错误代码:" + code);
            }
            System.out.println(jsonResult);
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }

    /**
     * 获取返回结果并转化为字符串
     */
    private static String getResponseString(BufferedReader inStream) throws Exception {
        String result = "";
        String lines = "";
        while ((lines = inStream.readLine()) != null) {
            result += lines;
        }
        return result;
    }
}

# 1.11.2. 2 配置任务并导入A8

创建任务: 1696920923601.png 创建脚本适配器: 1696920930024.png 创建任务参数: 1696920936592.png

# 1.11.3. 3 执行代码结果

执行代码后A8控制台结果 1696920944746.png 1696920951737.png

# 1.12. C#代码调用rest接口执行DEE任务

简要描述:

  • 根据任务编号调用A8服务或者DEE工具端提供的rest接口来执行DEE任务

必要条件:

  • 编写相关C#代码

  • DEE工具端

  • 有任务编号的DEE任务

    开发步骤:

# 1.12.1. 1 编写C#代码如下

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Net;
using System.Web;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void label1_Click(object sender, EventArgs e)
        {
            // csdyrw为任务编号
            Uri address = new Uri("http://127.0.0.1:8085/seeyon/rest/dee/task/csdyrw");

            // 创建页面请求
            HttpWebRequest request = WebRequest.Create(address) as HttpWebRequest;

            // 设置请求类型
            request.Method = "POST";
            request.ContentType = "application/json";

            StringBuilder data = new StringBuilder();
            data.Append("{'printStr':'测试任务已被调用!'}");

            // 设置参数信息
            byte[] byteData = UTF8Encoding.UTF8.GetBytes(data.ToString());

            // 设置消息头
            request.ContentLength = byteData.Length;

            using (Stream postStream = request.GetRequestStream())
            {
                postStream.Write(byteData, 0, byteData.Length);
            }

            // 获取响应请求
            using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
            {
                StreamReader reader = new StreamReader(response.GetResponseStream());

                // 打印返回结果
                Console.WriteLine(reader.ReadToEnd());
                label1.Text = "调用成功!";
            }
        }
    }
}

# 1.12.2. 2 配置任务

创建任务: 1696920965392.png 创建脚本适配器: 1696920972761.png 创建任务参数: 1696920979552.png

# 1.12.3. 3 启动调试执行代码结果

调试窗体点击控件结果 1696920988408.png 执行代码后A8控制台结果 1696920995089.png 1696921001409.png

# 1.13. 调用A8接口适配器rest接口同步底表数据

简要描述:

  • 通过定时器轮询第三方系统,将其它系统基础数据同步到A8基础数据中。
  • 基础数据一般为填写表单的基本数据,如物料等…

必要条件:

  • A8基础数据(无流程表单)
  • DEE任务

这里主要讲解: 1、如何创建一个DEE任务查询第三方数据库并且将数据同步到A8基础数据中 2、如何设置定时器定时执行DEE任务 3、如何设置A8基础数据相关


# 1.13.1. 一、DEE可视化配置工具-创建DEE任务

1.来源配置-首先获取第三方系统数据库数据

1)首先看一下第三方数据库数据格式 1696921013656.png

2)因为是从第三方数据库中获取数据,那么这里我们使用【JDBC适配器】来获取数据 1696921020544.png

2.转换配置-需要将第三方系统的数据转换成为A8基础数据表单格式

1)使用【字段映射】适配器,将第三方系统数据转换成A8基础数据表单格式

2)使用【载入来源字段】功能载入字段映射中来源字段 1696921030984.png

3)使用【批量配置】载入字段映射中目标字段 1696921038057.png

4)【字段映射】中只要使用到了A8表单字段,那么必须勾选上【是否使用到A8表单】 1696921046176.png

5)创建【XSLT格式转换】适配器,将数据格式装换为A8基础数据所需格式 1696921053720.png

6)到此我们的转换配置就完成了,接下来需要调用A8接口写入A8基础数据

3.输出目标-A8接口-无流程表单

1)在输出目标中,创建【A8接口】适配器,方法选择【无流程表单】 1696921063178.png

4.到此我们完成整个DEE任务的创建,该任务完成了:

1、从第三方系统数据库获取基础数据 2、将第三方系统的数据格式转换成为A8基础数据格式 3、将数据通过A8接口同步到A8基础数据中


# 1.13.2. 二、设置定时器

1.在DEE可视化配置工具中使用定时器

进入【基础设置】-【定时器管理】-【新建】 1696921072015.png


# 1.13.3. 三、结果展示

1)首先看看我们准备的第三方系统的数据 1696921080026.png

2)在看看A8中基础数据,里面并没有任何数据 1696921086248.png

3)现在我们开启定时器,等待1分钟,发现数据已经全部同步过去了 1696921092504.png

4)我们在到第三方数据库中增加2条数据,并修改一条数据 1696921098923.png

5)等待定时器同步后,A8基础数据完美同步 1696921105848.png

# 1.14. 调用webservice高级适配器

简要描述:

  • 新增的webservice高级适配器增加了document字段生成报文信息以及手动配置报文以及多种密码加密方式。

必要条件:

  • DEE任务

这里主要讲解: 1、如何配置及调用一个webservice高级适配器(从jdbc取数作为参数传入webservice计算然后写会Document)


# 1.14.1. 一、DEE可视化配置工具-创建DEE任务

1.添加一个脚本适配器添加一个loginName参数

1696921117249.png

2.添加一个jdbc适配器取数据

1696921124000.png

3.配置webservice高级适配器

1)新建适配器 1696921133145.png

2)根据wsdl生成配置及报文 1696921139873.png

3)完善配置信息 1696921268960.png

4)映射报文信息 1696921276425.png

5)报文预览(需要先保存适配器,再打开界面点击报文预览) 1696921283265.png

4.添加脚本适配器将webservice返回值回写到document的b字段当中(任务配置最后一步)

1696921291050.png


# 1.14.2. 二、结果展示

1)首先看看我们准备的第三方系统的数据 1696919756055.png

2)在控制台查看document数据 1696919747489.png

# 1.15. CAP4表单关联(A8 V7.0SP1+,V4.0SP1+)

文档下载 (opens new window)

视频地址:https://pan.baidu.com/s/1GGm5K4z1cf2M4nufuYEyOQ 密码:pgqw

位置:A8 V7.0SP1+DEE V4.0SP1培训视频/cap4关联触发.mp88

# 1.16. 流程事件(A8 V7.0+)

文档下载 (opens new window)

视频地址:https://pan.baidu.com/s/1GGm5K4z1cf2M4nufuYEyOQ 密码:pgqw

位置:A8 V7.0SP1+DEE V4.0SP1培训视频/CAP3、CAP4工作流事件、节点事件DEE任务制作.mp88

创建人:chuhc
修改人:wujhyf、lichaoj

快速跳转