大家好,我在使用钉钉OA创建审批实例遇到一个问题。我的钉钉审批模版大概长这样。
{
"children": [
{
"componentName": "NumberField",
"props": {
"bizAlias": "",
"id": "NumberField_1QDTZPLPNITC0",
"label": "经济舱会员奖励金额",
"required": true
}
},
{
"componentName": "NumberField",
"props": {
"bizAlias": "",
"id": "NumberField_X7F3661MPOW0",
"label": "标准舱会员奖励金额",
"required": true
}
},
{
"componentName": "NumberField",
"props": {
"bizAlias": "",
"id": "NumberField_20OG5RA3XRB40",
"label": "商务舱会员奖励金额",
"required": true
}
},
{
"componentName": "NumberField",
"props": {
"bizAlias": "",
"id": "NumberField_I02DFJQ1SGW0",
"label": "头等舱会员奖励金额",
"required": true
}
}
],
"componentName": "TableField",
"props": {
"actionName": "",
"bizAlias": "",
"holidayOptions": [],
"id": "TableField_21YNBCSVQJZ40",
"label": "会员奖励规则(固定金额)",
"push": {},
"staffStatusEnabled": false
}
}
我对应的java 代码如何写。 下面这种写法是无效的。。 不确定为啥
RuleVipContentDTO vipContent = proRuleDTO.getVipContent();
StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValuesDetails startProcessInstanceRequestFormComponentValuesDetails =
new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValuesDetails();
List<StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValuesDetailsDetails> detailsDetails
= new ArrayList<>();
detailsDetails.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValuesDetailsDetails()
.setName("经济舱会员奖励金额").setValue(vipContent.getLevel1()).setId("NumberField_1QDTZPLPNITC0"));
detailsDetails.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValuesDetailsDetails()
.setName("标准舱会员奖励金额").setValue(vipContent.getLevel2()).setId("NumberField_X7F3661MPOW0"));
detailsDetails.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValuesDetailsDetails()
.setName("商务舱会员奖励金额").setValue(vipContent.getLevel3()).setId("NumberField_20OG5RA3XRB40"));
detailsDetails.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValuesDetailsDetails()
.setName("头等舱会员奖励金额").setValue(vipContent.getSuperLevel()).setId("NumberField_I02DFJQ1SGW0"));
StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValuesDetails details1 = new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValuesDetails();
details1.setDetails(Lists.newArrayList(detailsDetails));
list.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues()
.setComponentType("TableField")
.setId("TableField_21YNBCSVQJZ40")
.setName("会员奖励规则(固定金额)")
// .setValue("")
.setDetails(Lists.newArrayList(details1)));
使用官方的SDK(python)也无法赋值。最终以下代码编写后,赋值成功
details_details_0 = [{"name":"金额01","value":"100"},{"name":"金额02","value":"200"}]
details = [details_details_0]
details_value = json.dumps(details)
# 将 details_value 直接赋值给TableField的value 即可
希望可以帮到你。
List> details = new ArrayList<>();
details.add(Arrays.asList(details1, details2, details3, details4, details5, details6));
details.add(Arrays.asList(details7, details8, details9, details10, details11, details12));
com.aliyun.dingtalkworkflow_1_0.models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues2 = new com.aliyun.dingtalkworkflow_1_0.models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues()
.setName("采购明细")
.setValue(JSONArray.toJSONString(details));
https://open.dingtalk.com/document/isvapp/initiate-approval-new
经【钉钉开发者社区(互助群)】的解答,得知这个文档中有输入样例,即json对象的二维数组格式的数据:
[[{"name":"字段名1","value":"数值1"},{"name":"字段名2","value":"数值2"}]]
给value赋值应该再转换成json字符串格式:
.setValue("[[{\"name\":\"字段名1\",\"value\":\"数值1\"},{\"name\":\"字段名2\",\"value\":\"数值2\"}]]");
@vohelon,使用这位的写法,调用新版钉钉OA审批、官方工作流、创建审批实例,给TableField 类型明细控件内的子控件对象赋值,无法成功赋值,不知道楼主最后解决了没有?@collery
您好,根据您提供的钉钉审批模版,您需要在审批实例的表单中填写一个表格字段 TableField
,其中包括四个 NumberField
子字段,分别为经济舱会员奖励金额、标准舱会员奖励金额、商务舱会员奖励金额和头等舱会员奖励金额。您可以按照以下代码样例进行编写:
List<StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValuesDetailsDetails> detailsDetails
= new ArrayList<>();
detailsDetails.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValuesDetailsDetails()
.setName("经济舱会员奖励金额").setValue("100").setId("NumberField_1QDTZPLPNITC0"));
detailsDetails.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValuesDetailsDetails()
.setName("标准舱会员奖励金额").setValue("200").setId("NumberField_X7F3661MPOW0"));
detailsDetails.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValuesDetailsDetails()
.setName("商务舱会员奖励金额").setValue("300").setId("NumberField_20OG5RA3XRB40"));
detailsDetails.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValuesDetailsDetails()
.setName("头等舱会员奖励金额").setValue("400").setId("NumberField_I02DFJQ1SGW0"));
List<StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValuesDetails> details = new ArrayList<>();
details.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValuesDetails()
.setDetails(detailsDetails));
List<StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues> values = new ArrayList<>();
values.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues()
.setId("TableField_21YNBCSVQJZ40")
.setComponentType("TableField")
.setName("会员奖励规则(固定金额)")
.setDetails(details));
上述代码中,我们首先创建了一个 detailsDetails
列表,其中包含了四个子字段(经济舱会员奖励金额、标准舱会员奖励金额、商务舱会员奖励金额和头等舱会员奖励金额)。然后,我们将这个 detailsDetails
列表作为子组件存入了 details
列表中。
最后,我们将 details
列表作为参数传入 StartProcessInstanceRequestFormComponentValues
对象,并分别设置了组件类型、组件 ID 和名称。其中,setId
方法的参数即为您在钉钉审批模版中定义的 TableField
的 ID。
您可以根据自己的实际需求,修改代码中的字段名和值。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。