processCode
。processCode
,调用新版服务端API-发起审批实例接口发起审批实例,获取审批实例instanceId
。processCode
,调用新版服务端API-获取审批实例ID列表接口,获取权限范围内的相关部门审批实例ID列表。 public void getAccessToken() throws Exception {
Config config = new Config();
config.protocol = "https";
config.regionId = "central";
com.aliyun.dingtalkoauth2_1_0.Client client = new com.aliyun.dingtalkoauth2_1_0.Client(config);
GetAccessTokenRequest accessTokenRequest = new GetAccessTokenRequest()
.setAppKey("din*********hgn")
.setAppSecret("9G_O************mBkhgGIO");
GetAccessTokenResponse accessToken = client.getAccessToken(accessTokenRequest);
System.out.println(JSON.toJSONString(accessToken.getBody()));
}
processCode
。processCode
,钉钉管理后台版本不同,获取processCode的方式不同。登录钉钉管理后台,在首页查看版本。如下图所示,页面展示回到旧版和新版反馈,说明当前是新版。 public void createProcessTemplate() throws Exception {
Config config = new Config();
config.protocol = "https";
config.regionId = "central";
com.aliyun.dingtalkworkflow_1_0.Client client = new com.aliyun.dingtalkworkflow_1_0.Client(config);
FormCreateHeaders formCreateHeaders = new FormCreateHeaders();
formCreateHeaders.xAcsDingtalkAccessToken = "accessToken";
// 1. 单行输入控件
FormComponentProps formComponentProps1 = new FormComponentProps()
.setComponentId("TextField-sys1001")
.setPlaceholder("请输入")
.setLabel("客户名称")
.setRequired(false);
FormComponent formComponent1 = new FormComponent()
.setComponentType("TextField")
.setProps(formComponentProps1);
// 2. 多行输入控件
FormComponentProps formComponentProps2 = new FormComponentProps()
.setComponentId("TextareaField-sys1002")
.setPlaceholder("请输入")
.setLabel("客户描述")
.setRequired(false);
FormComponent formComponent2 = new FormComponent()
.setComponentType("TextareaField")
.setProps(formComponentProps2);
//3.多选控件
SelectOption option3 = new SelectOption();
option3.setKey("option1");
option3.setValue("重要");
SelectOption option4 = new SelectOption();
option4.setKey("option2");
option4.setValue("一般");
FormComponentProps formComponentProps3 = new FormComponentProps()
.setComponentId("DDMultiSelectField-sys1003")
.setLabel("客户标签")
.setOptions(java.util.Arrays.asList(option3, option4));
FormComponent formComponent3 = new FormComponent()
.setComponentType("DDMultiSelectField")
.setProps(formComponentProps3);
//4. 时间区间控件
FormComponentProps formComponentProps4 = new FormComponentProps()
.setComponentId("DDDateRangeField-sys1004")
.setLabel("[\"客户达成意向开始时间\",\"客户达成意向结束时间\"]")
.setUnit("小时")
.setPlaceholder("请选择对应时间")
.setFormat("yyyy-MM-dd HH:mm");
FormComponent formComponent4 = new FormComponent()
.setComponentType("DDDateRangeField")
.setProps(formComponentProps4);
//5.明细控件
//明细子控件统计
FormComponentProps.FormComponentPropsStatField formComponentPropsStatField2 = new FormComponentProps.FormComponentPropsStatField()
.setComponentId("NumberField-sysC1005")
.setLabel("数字输入");
FormComponentProps.FormComponentPropsStatField formComponentPropsStatField1 = new FormComponentProps.FormComponentPropsStatField()
.setComponentId("CalculateField-sysC1005")
.setLabel("金额(元)");
//明细子控件
//5.1明细单行输入框
FormComponentProps childProp1 = new FormComponentProps()
.setComponentId("TextField-sysC1005")
.setLabel("名称");
FormComponent child1 = new FormComponent()
.setComponentType("TextField")
.setProps(childProp1);
//5.2明细金额输入框
FormComponentProps childProp2 = new FormComponentProps()
.setComponentId("MoneyField-sysC1005")
.setLabel("单价(元)");
FormComponent child2 = new FormComponent()
.setComponentType("MoneyField")
.setProps(childProp2);
//5.3明细数字输入框
FormComponentProps childProp3 = new FormComponentProps()
.setComponentId("NumberField-sysC1005")
.setLabel("个数");
FormComponent child3 = new FormComponent()
.setComponentType("NumberField")
.setProps(childProp3);
//5.4计算公式组件
JSONObject jsonObject1 = new JSONObject();
jsonObject1.put("id", "NumberField-sysC1005");
String s = "*";
JSONObject jsonObject2 = new JSONObject();
jsonObject2.put("id", "MoneyField-sysC1005");
Object objects[] = new Object[]{jsonObject1, s, jsonObject2};
FormComponentProps childProp4 = new FormComponentProps()
.setComponentId("CalculateField-sysC1005")
.setLabel("总计")
.setPlaceholder("自动计算数值")
.setRequired(false)
.setFormula(JSON.toJSONString(objects));
FormComponent child4 = new FormComponent()
.setComponentType("CalculateField")
.setProps(childProp4);
FormComponentProps formComponentProps5 = new FormComponentProps()
.setComponentId("TableField-sys1005")
.setTableViewMode("table")
.setLabel("明细")
.setVerticalPrint(true)
.setStatField(Arrays.asList(formComponentPropsStatField1, formComponentPropsStatField2));
FormComponent formComponent5 = new FormComponent()
.setComponentType("TableField")
.setChildren(Arrays.asList(child1, child2, child3, child4))
.setProps(formComponentProps5);
// 6. 联系人控件
FormComponentProps formComponentProps6 = new FormComponentProps()
.setComponentId("InnerContactField-sys1006")
.setLabel("联系人")
.setPlaceholder("请选择联系人")
.setChoice("1");
FormComponent formComponent6 = new FormComponent()
.setComponentType("InnerContactField")
.setProps(formComponentProps6);
// 7. 部门控件
FormComponentProps formComponentProps7 = new FormComponentProps()
.setComponentId("DepartmentField-sys1007")
.setLabel("联系人部门")
.setPlaceholder("请选择部门")
.setMultiple(false);
FormComponent formComponent7 = new FormComponent()
.setComponentType("DepartmentField")
.setProps(formComponentProps7);
// 8. 省市区控件
FormComponentProps formComponentProps8 = new FormComponentProps()
.setComponentId("AddressField-sys1008")
.setLabel("客户地址")
.setPlaceholder("请选择")
.setAddressModel("city");
FormComponent formComponent8 = new FormComponent()
.setComponentType("AddressField")
.setProps(formComponentProps8);
//9.单选控件
SelectOption selectOption1 = new SelectOption();
selectOption1.setKey("option1");
selectOption1.setValue("紧急");
SelectOption selectOption2 = new SelectOption();
selectOption2.setKey("option2");
selectOption2.setValue("普通");
FormComponentProps formComponentProps9 = new FormComponentProps()
.setComponentId("DDSelectField-sys1009")
.setLabel("审批需求状态")
.setOptions(Arrays.asList(selectOption1, selectOption2));
FormComponent formComponent9 = new FormComponent()
.setComponentType("DDSelectField")
.setProps(formComponentProps9);
FormCreateRequest formCreateRequest = new FormCreateRequest()
.setName("客户表单")
.setDescription("客户表单")
//有参数processCode时为更新模板,无参数processCode时,为创建模板,该示例为创建模板
//.setProcessCode("PROC-ECED8693-****-****-****-A5EE2F7E9F46")
.setFormComponents(java.util.Arrays.asList(
formComponent1, formComponent2, formComponent3, formComponent4,
formComponent5, formComponent6, formComponent7, formComponent8,
formComponent9
));
try {
FormCreateResponse formCreateResponse = client.formCreateWithOptions(formCreateRequest, formCreateHeaders, new RuntimeOptions());
System.out.println(JSON.toJSONString(formCreateResponse.getBody()));
} catch (TeaException err) {
if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
// err 中含有 code 和 message 属性,可帮助开发定位问题
System.out.println(err.code);
System.out.println(err.message);
}
} catch (Exception _err) {
TeaException err = new TeaException(_err.getMessage(), _err);
if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
// err 中含有 code 和 message 属性,可帮助开发定位问题
System.out.println(err.code);
System.out.println(err.message);
}
}
}
public void processManagementTemplates() throws Exception {
Config config = new Config();
config.protocol = "https";
config.regionId = "central";
com.aliyun.dingtalkworkflow_1_0.Client client = new com.aliyun.dingtalkworkflow_1_0.Client(config);
com.aliyun.dingtalkworkflow_1_0.models.GetManageProcessByStaffIdHeaders getManageProcessByStaffIdHeaders = new com.aliyun.dingtalkworkflow_1_0.models.GetManageProcessByStaffIdHeaders();
getManageProcessByStaffIdHeaders.xAcsDingtalkAccessToken = "accessToken";
com.aliyun.dingtalkworkflow_1_0.models.GetManageProcessByStaffIdRequest getManageProcessByStaffIdRequest = new com.aliyun.dingtalkworkflow_1_0.models.GetManageProcessByStaffIdRequest()
.setUserId("manager7078");
try {
GetManageProcessByStaffIdResponse getManageProcessByStaffIdResponse = client.getManageProcessByStaffIdWithOptions(getManageProcessByStaffIdRequest, getManageProcessByStaffIdHeaders, new com.aliyun.teautil.models.RuntimeOptions());
System.out.println(JSON.toJSONString(getManageProcessByStaffIdResponse.getBody()));
} catch (TeaException err) {
if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
// err 中含有 code 和 message 属性,可帮助开发定位问题
System.out.println(err.code);
System.out.println(err.message);
}
} catch (Exception _err) {
TeaException err = new TeaException(_err.getMessage(), _err);
if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
// err 中含有 code 和 message 属性,可帮助开发定位问题
System.out.println(err.code);
System.out.println(err.message);
}
}
}
public void processUserVisibilitieTemplates() throws Exception {
Config config = new Config();
config.protocol = "https";
config.regionId = "central";
com.aliyun.dingtalkworkflow_1_0.Client client = new com.aliyun.dingtalkworkflow_1_0.Client(config);
com.aliyun.dingtalkworkflow_1_0.models.ListUserVisibleBpmsProcessesHeaders listUserVisibleBpmsProcessesHeaders = new com.aliyun.dingtalkworkflow_1_0.models.ListUserVisibleBpmsProcessesHeaders();
listUserVisibleBpmsProcessesHeaders.xAcsDingtalkAccessToken = "accessToken";
com.aliyun.dingtalkworkflow_1_0.models.ListUserVisibleBpmsProcessesRequest listUserVisibleBpmsProcessesRequest = new com.aliyun.dingtalkworkflow_1_0.models.ListUserVisibleBpmsProcessesRequest()
.setUserId("manager7078")
.setMaxResults(10L)
.setNextToken(0L);
try {
ListUserVisibleBpmsProcessesResponse listUserVisibleBpmsProcessesResponse = client.listUserVisibleBpmsProcessesWithOptions(listUserVisibleBpmsProcessesRequest, listUserVisibleBpmsProcessesHeaders, new com.aliyun.teautil.models.RuntimeOptions());
System.out.println(JSON.toJSONString(listUserVisibleBpmsProcessesResponse.getBody()));
} catch (TeaException err) {
if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
// err 中含有 code 和 message 属性,可帮助开发定位问题
System.out.println(err.code);
System.out.println(err.message);
}
} catch (Exception _err) {
TeaException err = new TeaException(_err.getMessage(), _err);
if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
// err 中含有 code 和 message 属性,可帮助开发定位问题
System.out.println(err.code);
System.out.println(err.message);
}
}
}
processCode
,调用新版服务端API-发起审批实例接口发起审批实例,获取审批实例instanceId
。public void ProcessInstances() throws Exception {
Config config = new Config();
config.protocol = "https";
config.regionId = "central";
com.aliyun.dingtalkworkflow_1_0.Client client = new com.aliyun.dingtalkworkflow_1_0.Client(config);
StartProcessInstanceHeaders startProcessInstanceHeaders = new StartProcessInstanceHeaders();
startProcessInstanceHeaders.xAcsDingtalkAccessToken = "accessToken";
//1.单行输入框组件
StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues1 = new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues()
.setName("客户名称")
.setValue("小钉");
//2.多行输入框组件
StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues2 = new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues()
.setName("客户描述")
.setValue("潜在优质客户");
//3.多选框组件
StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues3;
formComponentValues3 = new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues()
.setName("客户标签")
.setValue("[\"重要\",\"一般\"]")
.setComponentType("DDMultiSelectField");
//4.日期区间组件
StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues4 = new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues()
.setName("[\"客户达成意向开始时间\",\"客户达成意向结束时间\"]")
.setValue("[\"2022-08-14 15:00\",\"2022-08-15 15:00\"]");
//5.明细表格组件
StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValuesDetails formComponentValues0Details1 = new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValuesDetails()
.setName("名称")
.setValue("钉钉F2 智能视频会议一体机");
StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValuesDetails formComponentValues0Details2 = new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValuesDetails()
.setName("单价(元)")
.setValue("29999");
StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValuesDetails formComponentValues0Details3 = new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValuesDetails()
.setName("个数")
.setValue("1");
StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValuesDetails formComponentValues0Details4 = new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValuesDetails()
.setName("名称")
.setValue("钉钉F1 智能视频会议一体机");
StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValuesDetails formComponentValues0Details5 = new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValuesDetails()
.setName("单价(元)")
.setValue("4999");
StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValuesDetails formComponentValues0Details6 = new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValuesDetails()
.setName("个数")
.setValue("5");
StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues5 = new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues()
.setName("明细")
.setValue(JSON.toJSONString(Arrays.asList(Arrays.asList(formComponentValues0Details1, formComponentValues0Details2, formComponentValues0Details3), Arrays.asList(formComponentValues0Details4, formComponentValues0Details5, formComponentValues0Details6))))
.setDetails(Arrays.asList(formComponentValues0Details1, formComponentValues0Details2, formComponentValues0Details3, formComponentValues0Details4, formComponentValues0Details5, formComponentValues0Details6));
//6.联系人组件
StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues6 = new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues()
.setName("联系人")
.setValue(JSON.toJSONString(Arrays.asList("联系人userId")));
//7.部门组件
StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues7 = new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues()
.setName("联系人部门")
.setValue("部门ID");
//8.省市区组件
StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues8 = new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues()
.setName("客户地址")
.setValue(JSON.toJSONString(Arrays.asList("北京,北京市,朝阳区,东湖街道,xxxxxxxA座")));
//9.单选框组件
StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues9 = new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues()
.setName("审批需求状态")
.setValue("紧急");
//设置审批人
//会签审批
StartProcessInstanceRequest.StartProcessInstanceRequestApprovers approvers0 = new StartProcessInstanceRequest.StartProcessInstanceRequestApprovers()
.setActionType("AND")
.setUserIds(java.util.Arrays.asList(
"014******77041", "0852*******284272"
));
//或签审批
StartProcessInstanceRequest.StartProcessInstanceRequestApprovers approvers1 = new StartProcessInstanceRequest.StartProcessInstanceRequestApprovers()
.setActionType("OR")
.setUserIds(java.util.Arrays.asList(
"014******77041", "0852*******284272"
));
StartProcessInstanceRequest startProcessInstanceRequest = new StartProcessInstanceRequest()
.setOriginatorUserId("发起人userId")
.setProcessCode("PROC-ECED8693-****-****-****-A5EE2F7E9F46")
.setDeptId(1L)
.setMicroappAgentId(118*****5L)
.setApprovers(java.util.Arrays.asList(
approvers0, approvers1
))
//抄送人
.setCcList(java.util.Arrays.asList(
"抄送人userId"
))
.setCcPosition("FINISH")
.setFormComponentValues(java.util.Arrays.asList(
formComponentValues1, formComponentValues2, formComponentValues3, formComponentValues4,
formComponentValues5, formComponentValues6, formComponentValues7, formComponentValues8,
formComponentValues9
));
try {
StartProcessInstanceResponse startProcessInstanceResponse = client.startProcessInstanceWithOptions(startProcessInstanceRequest, startProcessInstanceHeaders, new RuntimeOptions());
System.out.println(JSON.toJSONString(startProcessInstanceResponse.getBody()));
} catch (TeaException err) {
if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
// err 中含有 code 和 message 属性,可帮助开发定位问题
System.out.println(err.code);
System.out.println(err.message);
}
} catch (Exception _err) {
TeaException err = new TeaException(_err.getMessage(), _err);
if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
// err 中含有 code 和 message 属性,可帮助开发定位问题
System.out.println(err.code);
System.out.println(err.message);
}
}
}
processCode
,调用新版服务端API-获取审批实例ID列表接口,获取权限范围内的相关部门审批实例ID列表。public void processInstanceIdsQuery() throws Exception {
Config config = new Config();
config.protocol = "https";
config.regionId = "central";
com.aliyun.dingtalkworkflow_1_0.Client client = new com.aliyun.dingtalkworkflow_1_0.Client(config);
com.aliyun.dingtalkworkflow_1_0.models.ListProcessInstanceIdsHeaders listProcessInstanceIdsHeaders = new com.aliyun.dingtalkworkflow_1_0.models.ListProcessInstanceIdsHeaders();
listProcessInstanceIdsHeaders.xAcsDingtalkAccessToken = "accessToken";
com.aliyun.dingtalkworkflow_1_0.models.ListProcessInstanceIdsRequest listProcessInstanceIdsRequest = new com.aliyun.dingtalkworkflow_1_0.models.ListProcessInstanceIdsRequest()
.setProcessCode("PROC-FF6Y2xxxx")
.setStartTime(1496678400000L)
.setEndTime(1496678400000L)
.setNextToken(0L)
.setMaxResults(10L)
.setUserIds(java.util.Arrays.asList(
"发起userid"
));
try {
ListProcessInstanceIdsResponse listProcessInstanceIdsResponse = client.listProcessInstanceIdsWithOptions(listProcessInstanceIdsRequest, listProcessInstanceIdsHeaders, new com.aliyun.teautil.models.RuntimeOptions());
System.out.println(JSON.toJSONString(listProcessInstanceIdsResponse.getBody()));
} catch (TeaException err) {
if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
// err 中含有 code 和 message 属性,可帮助开发定位问题
System.out.println(err.code);
System.out.println(err.message);
}
} catch (Exception _err) {
TeaException err = new TeaException(_err.getMessage(), _err);
if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
// err 中含有 code 和 message 属性,可帮助开发定位问题
System.out.println(err.code);
System.out.println(err.message);
}
}
}
public void processTodoTasksNumbers() throws Exception {
Config config = new Config();
config.protocol = "https";
config.regionId = "central";
com.aliyun.dingtalkworkflow_1_0.Client client = new com.aliyun.dingtalkworkflow_1_0.Client(config);
com.aliyun.dingtalkworkflow_1_0.models.GetUserTodoTaskSumHeaders getUserTodoTaskSumHeaders = new com.aliyun.dingtalkworkflow_1_0.models.GetUserTodoTaskSumHeaders();
getUserTodoTaskSumHeaders.xAcsDingtalkAccessToken = "accessToken";
com.aliyun.dingtalkworkflow_1_0.models.GetUserTodoTaskSumRequest getUserTodoTaskSumRequest = new com.aliyun.dingtalkworkflow_1_0.models.GetUserTodoTaskSumRequest()
.setUserId("manager123");
try {
GetUserTodoTaskSumResponse getUserTodoTaskSumResponse = client.getUserTodoTaskSumWithOptions(getUserTodoTaskSumRequest, getUserTodoTaskSumHeaders, new com.aliyun.teautil.models.RuntimeOptions());
System.out.println(JSON.toJSONString(getUserTodoTaskSumResponse.getBody()));
} catch (TeaException err) {
if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
// err 中含有 code 和 message 属性,可帮助开发定位问题
System.out.println(err.code);
System.out.println(err.message);
}
} catch (Exception _err) {
TeaException err = new TeaException(_err.getMessage(), _err);
if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
// err 中含有 code 和 message 属性,可帮助开发定位问题
System.out.println(err.code);
System.out.println(err.message);
}
}
}