开发者社区> 问答> 正文

钉钉OA创建审批TableField 类型 如何对象进行赋值

大家好,我在使用钉钉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)));

展开
收起
collery 2023-05-22 15:05:51 728 0
5 条回答
写回答
取消 提交回答
  • 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));

    2023-11-16 12:08:14
    赞同 展开评论 打赏
  • 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\"}]]");

    2023-10-06 10:58:28
    赞同 展开评论 打赏
  • @vohelon,使用这位的写法,调用新版钉钉OA审批、官方工作流、创建审批实例,给TableField 类型明细控件内的子控件对象赋值,无法成功赋值,不知道楼主最后解决了没有?@collery

    2023-09-25 10:47:38
    赞同 展开评论 打赏
  • 使用官方的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 即可
    

    希望可以帮到你。

    2023-07-07 14:43:15
    赞同 1 展开评论 打赏
  • 您好,根据您提供的钉钉审批模版,您需要在审批实例的表单中填写一个表格字段 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。

    您可以根据自己的实际需求,修改代码中的字段名和值。

    2023-05-23 08:52:43
    赞同 展开评论 打赏
来源圈子
更多
收录在圈子:
+ 订阅
问答排行榜
最热
最新

相关电子书

更多
钉钉小程序——为工作方式插上翅膀 立即下载
钉钉客户端自动化的应用 立即下载
使命必达 —— 钉钉企业级 消息服务的机遇与挑战 立即下载