之前的博客里,已经说了一些钉钉企业内部应用所需的准备和如何获取员工名单,有兴趣的可以浏览一下->
回到正题,这里的场景是,获取企业内所有的待办任务和详情。
那需要做的就是根据员工名单,查到每个员工的待办任务的id(这里会有重复的),然后再根据每个待办任务的id查到任务的详情。
foreach(string userId in userList)
{
IDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/process/workrecord/task/query");
OapiProcessWorkrecordTaskQueryRequest req = new OapiProcessWorkrecordTaskQueryRequest();
req.Userid = userId;
req.Offset = 0;//分页游标
req.Count = 50;//每页数量,最大50
req.Status = 0;//0为待处理,-1为已经移除
OapiProcessWorkrecordTaskQueryResponse rsp = client.Execute(req, access_token);
//这里获取每个员工的待办任务
JObject task = (JObject)JsonConvert.DeserializeObject(rsp.Body);
if(task["errcode"].ToString() == "0")
{
if (task["result"].ToObject<JObject>().ContainsKey("list"))
{
JArray jarrayTask = task["result"]["list"].ToObject<JArray>();
foreach(JObject jobjectTask in jarrayTask )
{
IDingTalkClient clientDetail = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/processinstance/get");
OapiProcessinstanceGetRequest reqDetail = new OapiProcessinstanceGetRequest();
reqDetail.ProcessInstanceId = jobjectTask["instance_id"].ToString();
OapiProcessinstanceGetResponse rspDetail = clientDetail.Execute(reqDetail, access_token);
//这里获取每个待办任务的详情
JObject taskDetail = (JObject)JsonConvert.DeserializeObject(rspDetail .Body);
if (taskDetail ["errcode"].ToString() == "0")
{
...
}
}
}
}
}
按员工ID返回的待办任务结果结构如下
{
"errcode": 0,
"result": {
"has_more": true,
"list": [
{
"forms": [
{
"content": "杨xx",
"title": "入职员工姓名"
},
{
"content": "技术",
"title": "部门"
},
{
"content": "测试123",
"title": "职位zaqqwe"
}
],
"instance_id": "b6aqwe12xzqdf2-e0b221423313",
"task_id": "65429579088",
"title": "xx提交的审批",
"url": "https://aflow.dingtalk.com/dingtalk/mobile/homepage.htm?121asdxxx"
},
{
"forms": [
{
"content": "北京",
"title": "出差地点"
},
{
"content": "2018-08-21",
"title": "开始时间"
},
{
"content": "2018-08-25",
"title": "结束时间"
}
],
"instance_id": "6716467976986zfsa62187",
"task_id": "65394649400",
"title": "xx提交的申请",
"url": "https://aflow.dingtalk.com/dingtalk/mobile/homepage.htm?xxxxxxxx"
}
]
},
"request_id": "107anigl5ekxg"
}
而任务详情的结果结构如下
{
"errcode":0,
"errmsg":"ok",
"process_instance":{
"form_component_values":[
{
"component_type":"TextField",
"name":"请假天数",
"id":"TextField_23QXWOU7G4JK0",
"value":"1"
}
],
"create_time":"2020-12-21 15:30:26",
"attached_process_instance_ids":[],
"cc_userids":[
"user456"
],
"originator_dept_name":"测试1112",
"originator_userid":"gnrty4r56",
"title":"测试的请假",
"finish_time":"2020-12-21 15:30:27",
"result":"agree",
"originator_dept_id":"xcbet45gdsas",
"business_id":"20201",
"tasks":[
{
"task_status":"COMPLETED",
"activity_id":"bmty756",
"task_result":"AGREE",
"userid":",bui567wsdf",
"finish_time":"2020-12-21 15:30:27",
"taskid":"124dfbvcht",
"url":"https://www.xxxx.com"
},
{
"task_status":"COMPLETED",
"activity_id":"asd213zxc",
"task_result":"AGREE",
"userid":"ngfu74",
"finish_time":"2020-12-21 15:30:27",
"taskid":"66738",
"url":"https://www.xxxx.com"
}
],
"biz_action":"NONE",
"operation_records":[
{
"date":"2020-12-21 15:30:26",
"operation_type":"START_PROCESS_INSTANCE",
"operation_result":"NONE",
"userid":"zxcw12dsf"
},
{
"date":"2020-12-21 15:30:26",
"operation_type":"EXECUTE_TASK_AUTO",
"operation_result":"AGREE",
"userid":"123xcvas"
},
{
"date":"2020-12-21 15:30:26",
"operation_type":"EXECUTE_TASK_AUTO",
"operation_result":"AGREE",
"userid":"2155dfxcv"
},
{
"date":"2020-12-21 15:30:26",
"operation_type":"PROCESS_CC",
"operation_result":"NONE",
"remark":"",
"userid":"hgrtu1232"
}
],
"status":"COMPLETED"
},
"request_id":"10c0pggajcsu7"
}
通过对详情数据的统计,就可以实现这个场景了