【泛微E9】第三方系统调用泛微E9API接口(REST)创建流程

1、 前言

之前写了一篇通过webservices 创建流程的文章。详见 WebServices创建流程。今天的这个 主要是为了方便第三方系统调用泛微得E9API接口(REST)创建流程。

2、调用方式

2.1 配置准备工作

2.1.1 配置ecology系统白名单(泛微方)

在ecology系统中找到: 【 ecology/WEB-INF/prop/weaver_session_filter.properties 】
在unchecksessionurl=后面添加/api/ec/dev/auth/regist;/api/ec/dev/auth/applytoken;
注:如果存在,可跳过此步骤。

2.1.2 ecology系统发放许可证(泛微方)

在ecology系统得数据库中添加许可证(appid),插入如下代码(红色标注部分必须修改)

INSERT INTO ECOLOGY_BIZ_EC(ID,APPID,NAME) VALUES('保证唯一的ID','EEAA5436-7577-4BE0-8C6C-89E9D88805EA','上海泛微网络科技股份有限公司');

字段描述:
• ID:数据库主键。保证与其它系统发放的许可证在数据库中的主键标识不冲突即可
• APPID:许可码,可通过 http://www.uuid.online/ 随机生成即可【保证唯一】
• NAME:许可证名称,能够快速辩识即可,可根据需求修改

2.1.3 获取token

在这里插入图片描述

变量声明

 public static final String HOST = "http://ip:port";

APPID为2.1.2中生成得APPID

2.1.3.1 向ecology系统注册许可证,获取spk,secret(第三方)
//httpclient的使用请自己封装,可参考ECOLOGY中HttpManager类
HttpManager http = new HttpManager();
//请求头信息封装集合
Map<String, String> heads = new HashMap<String, String>();
//获取当前异构系统RSA加密的公钥
String cpk = new RSA().getRSA_PUB();
//当前异构系统用于向ECOLOGY注册时使用的账号密码通过DES加密后密文进行传输
//kb1906及以上版本 已废弃账号密码校验
//封装参数到请求头
System.out.println("cpk:::" + cpk);
heads.put("appid", APPID);
heads.put("cpk", cpk);
//调用ECOLOGY系统接口进行注册
try {
    String data = http.postDataSSL(HOST + "/api/ec/dev/auth/regist", new HashMap<>(), heads);
    //返回的数据格式为json,具体格式参数格式请参考文末API介绍。
    //注意此时如果注册成功会返回秘钥信息,请根据业务需要进行保存。
    if (data != null) {
        JSONObject result = JSON.parseObject(data);
        if ("true".equals(result.getString("status"))) {
            this.SPK = result.getString("spk");
            this.SECRET = result.getString("secrit");
        }
    }
} catch (Exception e) {
    e.printStackTrace();
}
2.1.3.2 获取token(第三方)

根据2.1.3.1得到的secret和spk,加密后获取token信息

public String getToken() {
        //httpclient的使用请自己封装,可参考ECOLOGY中HttpManager类
        HttpManager http = new HttpManager();
        //请求头信息封装集合
        Map<String, String> heads = new HashMap<String, String>();
        RSA rsa = new RSA();
        //对秘钥进行加密传输,防止篡改数据
        String secret = rsa.encrypt(null, SECRET, null, "utf-8", SPK, false);
        //封装参数到请求头
        heads.put("appid", APPID);
        heads.put("secret", secret);
        //调用ECOLOGY系统接口进行申请
        try {
            String data = http.postDataSSL(HOST + "/api/ec/dev/auth/applytoken", new HashMap<>(), heads);
            if (data != null) {
                JSONObject res = JSON.parseObject(data);
                if ("true".equals(res.getString("status"))) {
                    return res.getString("token");
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

3. 接口列表

3.1 接口及参数说明

3.1.1 流程实例:新建

在这里插入图片描述

3.1.2 待办流程列表

在这里插入图片描述

3.1.3 待阅流程列表

在这里插入图片描述

3.1.4 已办流程列表

在这里插入图片描述

3.1.5 流程实例:提交

在这里插入图片描述

3.1.6 流程实例:退回

在这里插入图片描述
在这里插入图片描述

3.1.7 流程实例:转发、意见征询、转办

在这里插入图片描述
在这里插入图片描述

3.1.8 流程实例:删除流程

在这里插入图片描述

3.1.9 流程实例:强制收回

在这里插入图片描述

3.1.10 流程实例:强制归档

在这里插入图片描述

3.1.11 流程实例:获取流程意见

在这里插入图片描述

3.1.12 流程实例:获取流程信息

在这里插入图片描述
在这里插入图片描述

3.2 主要参数示例

3.2.1 Detaildata
detailData:
[
  {
    "tableDBName": "formtable_main_1356_dt1",
    "workflowRequestTableRecords": [
      {
        "recordOrder": 0,
        "workflowRequestTableFields": [
          {
            "fieldName": "dhwb",
            "fieldValue": "第一行"
          },
          {
            "fieldName": "drl",
            "fieldValue": "2978"
          },
          {
            "fieldName": "xlk",
            "fieldValue": "0"
          }
        ]
      },
      {
        "recordOrder": 0,
        "workflowRequestTableFields": [
          {
            "fieldName": "dhwb",
            "fieldValue": "第2行"
          },
          {
            "fieldName": "drl",
            "fieldValue": "2978"
          },
          {
            "fieldName": "xlk",
            "fieldValue": "1"
          }
        ]
      }
    ]
  }
]
3.2.2 mainData
mainData:
[
  {
    "fieldName": "dhwb",
    "fieldValue": {
      "value": "1212",
      "name": "aaaa.html"
    }
  },
  {
    "fieldName": "drlzy",
    "fieldValue": "2978"
  },
  {
    "fieldName": "drlzy1",
    "fieldValue": "2978,2979"
  },
  {
    "fieldName": "fjsc",
    "fieldValue": [
      {
        "filePath": "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1577426926378&di=0084fc19f5cb90fc2286aab5ca8c343e&imgtype=0&src=http%3A%2F%2Fpic.51yuansu.com%2Fpic2%2Fcover%2F00%2F41%2F80%2F581369c715701_610.jpg",
        "fileName": "timg.jpg"
      },
      {
        "filePath": "http://192.168.7.216:8080/weaver/weaver.file.FileDownload?download=1&fileid=3819049&authStr=dmlld0NoYWluPTIyNTkzOTA1fG1haW5pZD0yMjU5MzkwNXw=&authSignatureStr=81b08f6e0b8ee06dcc1b43fda8204bdf&requestid=22593905&f_weaver_belongto_userid=4548&f_weaver_belongto_usertype=0",
        "fileName": "自由节点视图mysql.txt"
      }
    ]
  }
]
3.2.3 FieldName字段可参考泛微流程引擎表单字段

在这里插入图片描述

3.3 返回值示例

{"code":"SUCCESS","data":{"requestid":289303},"errMsg":{}}
3.3.1 返回参数说明

在这里插入图片描述

3.4 注意事项

1、如果新建流程参数不符合规则、比如mainData 格式错误多个“}、]”则会提示参数错误,一般会提示workflowId为0

2、必填字段不允许为空

3、 参数workflowId对应的流程要有该流程创建权限

4、主表、明细表中如果参数不正确(和路径表单字段 字段名称不一致,参数中多了都不允许正常新建流程,并且会提示异常参数)

5、附件上传说明,字段值格式如下: 格式为 [{“fieldName”:“字段数据库名称”,“fieldValue”:字段值}] 例如:附件上传字段的值为 fieldValue:[{“filePath”:“上传的附件地址或者base64”,“fileName”:“附件名称(包含附件类型)”}] 除了附件上传,其余字段类型的字段值都为字段内容

6、otherParams参数为map,扩展参数暂时支持如下参数: isnextflow :新建流程是否默认提交到第二节点,可选值为[0 :不流转 1:流转 (默认)] delReqFlowFaild:新建流程失败是否默认删除流程,可选值为[0 :不删除 1:删除 (默认)] requestSecLevel: “流程密级, 开启密级后生效,默认公开”。

4. 调用示例

以【3.6 流程实例:退回】为例:
1)接口入参:requestId、userId

2)请求头部需要加入得信息: Token、APPID、spk

3)代码示例
// 请求头部需要得参数

Map<String, String> heads = new HashMap<>();
heads.put("token", token);
heads.put("appid", APPID);
RSA rsa = new RSA();
String secretUserid = rsa.encrypt(null, userid, null, "utf-8", spk, false);
heads.put("userid", secretUserid);

// 添加参数
String url = HOST + "/api/workflow/paService/rejectRequest";
HttpManager http = new HttpManager();

Map<String, String> params = new HashMap<>();
params.put("requestId", requestid);
params.put("remark", "restful接口退回流程测试");

//默认是按出口退回
//自由退回参数设置
Map<String, String> otherParams = new HashMap<>();
otherParams.put("RejectToType", "0");
otherParams.put("RejectToNodeid", "3974");
params.put("otherParams", JSONObject.toJSONString(otherParams));

// 发送请求
try {
    String res = http.postDataSSL(url, params, heads);
    System.out.println(res);
} catch (Exception e) {
    e.printStackTrace();
}

完整Demo 地址:
workflow-restful-demo

  • 24
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

司徒剑南

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值