第三方获取待办数
场景描述
第三方系统需要获取某个用户(传入用户名)的待办数量。
实现思路
在应用中添加一个服务请求,获取某个人的待办数。这个请求设置为匿名访问,提供给第三方系统调用。
由于调用工作流的api需要先登录,查询待办数需要人的id,所以服务请求分为三部分:
- 登录系统
- 用用户名查询出用户id
- 查询该用户的待办数
实现步骤
1 登录系统
登录系统的代码参考开发手册——高级篇——集成——第三方登录企业云中后端java登录里面的代码
- 可以固定一个用户用于登录
- 使用http请求传用户名和密码执行login,在response的headers中可以获取Set-Cookie中的user_session
2 根据用户名查询出用户id
根据用户名查询出用户id,代码如下
String url = "/uaa/dbrest/users?select=users.id&users.username=eq."+username;
JSONArray users = ServiceUtil.get(SpringWebUtil.getRequest(),"entry",url,null,JSONArray.class);
if(users.size()>0) {
String userId = users.getJSONObject(0).getString("users.id");
}
3 查询某个用户的待办数
查询某个用户待办数的api如下
post https://域名/wf/BusinessServer/business-action
headers
Cookie :第一步获取的user_session
Content-Type : application/json
body
{
"process": "/SA/task/taskCenter/taskCenterProcess",
"activity": "mainActivity",
"action": "queryTaskCountAction",
"parameters": {
"status": "waiting",
"org": 第二步获取的用户id,
"filter": "SA_Task.sKindID<>'tkNotice'"
}
}
执行post请求的部分代码如下
String url = ServiceUtil.getServiceUrl("wf") + "/BusinessServer/business-action";
Map<String, String> headers = ServiceUtil.getExtHeaders(request);
headers.put("Cookie", user_session);
headers.put("content-type", "application/json");
ServiceUtil.post(url, data, headers, String.class);
返回内容如下
<?xml version="1.0" encoding="UTF-8"?>
<root>
<flag>true</flag>
<message/>
<code/>
<reason/>
<stack/>
<messages>[]</messages>
<data xmlns:xbiz="http://www.justep.com/xbiz#">
<xbiz:simple type="http://www.w3.org/2001/XMLSchema#Long">2</xbiz:simple>
</data>
<customer>15</customer>
<guid>1651914198</guid>
<md5>D17820701B87B9683DF1C89471E4A89D</md5>
<ver>534</ver>
<aCode>Z201307010178</aCode>
<ext></ext>
</root>
其中data中的2是查询到的待办数