泛微OA_E9之明细表选择框,选项带出主表审批人


1、需求描述

1.1 需求

明细表中的“选择框A”字段,当选项包含“选项4”或“选项5”时,审批人为A,否则为B。

1.2 描述

在泛微OA流程引擎中,主表字段是唯一可以做为节点操作者条件。如果将明细表选择框A字段值等同于主表选择框D字段值时,主表选择框D字段获取到的值,只有明细第一行的选择框A字段值,第二行、第三行等多行的选择框A字段值就获取不了。

示例1:当明细行只有一行时

在这里插入图片描述

示例2:当明细行有多行时

在这里插入图片描述

2、思路

在上一篇文章《泛微OA_E9之明细表当前行check框选中,其余明细行check框置灰,并将当前明细行中某字段赋值到主表字段》中提到过,明细表是不确定因素,但这次的需求不是取唯一值,而是取所有值。

第一步,获取明细行所有行标示,遍历明细行选择框A字段,将选择框A字段所有值组成新的数组;

第二步,一次的流程提交,不会所有选项都选择,所以要将未选择的选项值进行删除;

第三步,判断新数组中,如果包含有“选项4”或“选项5”的值时,审批人为A,否则为B。

3、效果

效果1:明细表中的“选择框A”字段,当选项包含“选项4”或“选项5”时,审批人为A

在这里插入图片描述

效果2: 明细表中的“选择框A”字段,当选项不包含“选项4”或“选项5”时,审批人为B

在这里插入图片描述


4、步骤

4.1 本次使用E9流程表单前端接口API介绍

具体《E9流程表单前端接口API》详情,请参考泛微官方文献,本篇只介绍需要用到的API。

4.1.1 明细字段值变化触发事件

绑定后对新添加的明细行字段以及加载的已有行明细字段,值变更触发所绑定的事件

bindDetailFieldChangeEvent: function(fieldMarkStr,funobj)

参数说明

参数参数类型必须说明
fieldMarkStrString绑定的明细字段标示,不能有下划线标示,可多个拼接逗号隔开,例如:field110,field111
funobjFunction字段值变更触发自定义函数,函数默认传递以下三个参数,参数1:字段标示(field27583),参数2:行标示,参数3:修改后的值

样例:

jQuery(document).ready(function(){
    WfForm.bindDetailFieldChangeEvent("field27583,field27584",function(id,rowIndex,value){
        console.log("WfForm.bindDetailFieldChangeEvent--",id,rowIndex,value);
    });
});

4.1.2 获取明细行所有行标示

getDetailAllRowIndexStr: function(detailMark)

参数说明

参数参数类型必须说明
detailMarkString明细表标示,明细1就是detail_1,以此递增类推

样例:

console.log(WfForm.getDetailAllRowIndexStr("detail_2"));    //输出1,3...等等

特别注意:

//遍历明细行的写法

var rowArr = WfForm.getDetailAllRowIndexStr("detail_1").split(",");
for(var i=0; i<rowArr.length; i++){
    var rowIndex = rowArr[i];
    if(rowIndex !== ""){
        var fieldMark = "field111_"+rowIndex;    //遍历明细行字段
    }
}

4.1.3 获取单个字段值

getFieldValue: function(fieldMark)

参数说明

参数参数类型必须说明
fieldMarkString字段标示,格式 field${字段ID}

样例:

var fieldvalue = WfForm.getFieldValue("field110");

4.1.4 系统样式的Confirm确认框

此方法修改的字段如果涉及到触发联动、单元格格式化等,修改完值会自动触发联动/格式化

改值的格式在添加明细行初始化、批量修改字段等场景类同

changeFieldValue: function(fieldMark, valueInfo)

参数说明

参数参数类型必须说明
fieldMarkString字段标示,格式field${字段ID}_${明细行号}
valueInfoJSON字段值信息,非浏览按钮字段格式为{value:”修改的值”};specialobj为浏览按钮信息,数组格式;showhtml属性只在单行文本类型且只读情况下生效;

样例:

//修改文本框、多行文本、选择框等字段类型
WfForm.changeFieldValue("field123", {value:"1.234"});

//修改浏览框字段的值,必须有specialobj数组结构对象
WfForm.changeFieldValue("field11_2", {
    value: "2,3",
    specialobj:[
        {id:"2",name:"张三"},
        {id:"3",name:"李四"}
    ]
});
     
//修改check框字段(0不勾选、1勾选)
WfForm.changeFieldValue("field123", {value:"1"});
  
//针对单行文本框字段类型,只读情况,支持显示值跟入库值不一致
WfForm.changeFieldValue("field123", {
    value: "入库真实值",
    specialobj: {
        showhtml: "界面显示值"
    }
});

4.2 上代码

 WfForm.bindDetailFieldChangeEvent("field35287",function(id,rowIndex,value){
 	var rowArr = WfForm.getDetailAllRowIndexStr("detail_1").split(",");//获取明细行所有行标示
    for(var i=0; i<rowArr.length; i++){
		var rowIndex = rowArr[i];
        if(rowIndex !== ""){
        	var fieldMark = "field35287_" + rowIndex;//遍历明细行字段
        	var fieldvalue = WfForm.getFieldValue(fieldMark);//获取“选择框A”选择项值
          	if(fieldvalue == "0"){
            	var arrField0 = 0;
          	}else if(fieldvalue == "1"){
            	var arrField1 = 1;
          	}else if(fieldvalue == "2"){
            	var arrField2 = 2;
          	}else if(fieldvalue == "3"){
            	var arrField3 = 3;
          	}else if(fieldvalue == "4"){
            	var arrField4 = 4;
          	}else{
            	//当明细表“选择框A”字段还没有选择时,等于空值
          	};        
		};
    };
    //组成已选择项的值
    var arrField = arrField0 + ',' + arrField1 + ',' + arrField2 + ','  + arrField3 + ','  + arrField4;
    //将组成已选择项的值重新组成数组
    var newArrField = arrField.split(",");
    //去重未选择项的多个undefined值
    function reMoval(newArrField){
		return [...new Set(newArrField)];
    };
    var mxTypeArr  = reMoval(newArrField);
    //删除undefined值
    mxTypeArr.forEach(function(item, index, arr){
        if(item === "undefined"){
        	arr.splice(index, 1);
      	};
    });
    //判断
    mxTypeArr.forEach(function(item, index, arr){
        if(item === "3" || item === "4"){
        	WfForm.changeFieldValue("field34396", {//当明细表“选择框A”字段值含有“选项4”或“选项5”时,主表“审批人”字段值为A
          		value: "15518",//审批人A的ID
          		specialobj:[
              		{id:"15518",name:"A"}
          		]
        	});
      	}else{
        	WfForm.changeFieldValue("field34396", {//当明细表“选择框A”字段值为其他时,主表“审批人”字段值为B
          		value: "22552",//审批人B的ID
          		specialobj:[
              		{id:"22552",name:"B"}
          		]
        	});
      	};
    });
})

5、总结

明细表是真的不好取值,这个方法实现的比较繁琐,暂时想不到更简便的方法。

过路大神请赐教,再会!

  • 8
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DarsonYao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值