泛微 Ecology 9.0 流程引擎 表单 代码块
一、案例说明&功能概述:
功能简述:
流程表单中两个明细表,实现两个明细表联动。
明细表1:填写的开始日期和结束日期
明细表2:根据明细表1的日期区间,取区间内的日期,要求填报每日内容
应用场景:
1、申请出差,需要填写每日行程
2、制定工作计划后,需要填写每天工作日志
。。。
表单演示:
略
二、实现思路
预测实际场景预测,在填写完明细表1的时间段后,通过字段/按钮触发,获取明细表1数据,并将数据写入明细表2。
实现逻辑概述:清空明细表2全部数据(根据实际需求)--遍历明细表1的数据,获取开始日期和结束日期--遍历过程中,根据开始日期和结束日期,遍历插入数据到明细表2中。
三、代码分享
核心代码
以下代码实现上述逻辑
<script>
//清除 明细表2 数据 需要插入数据的目标表
WfForm.delDetailRow("detail_2","all");
//获取 明细表1 数据 原始数据的初始表
var rowArr = WfForm.getDetailAllRowIndexStr("detail_1").split(",");
for(var i=0; i<rowArr.length; i++){
var rowIndex = rowArr[i];
if(rowIndex !== ""){
//获取明细行 开始日期 field9292 按实际更换为明细1中开始日期的字段id
var startDateStr = WfForm.getFieldValue("field9292_"+rowIndex);
//获取明细行 结束日期 field9293 按实际更换为明细1中结束日期的字段id
var endDateStr = WfForm.getFieldValue("field9293_"+rowIndex);
//转换为日期字段
var startDate = new Date(startDateStr);
var endDate = new Date(endDateStr);
//赋值 明细表2 数据
for (var d = startDate; d <= endDate; d.setDate(d.getDate() + 1)) {
//新增明细行并赋值日期 field9294 按实际更换为明细2中日期的字段id
WfForm.addDetailRow("detail_2",{field9294:{value:d.toISOString().split('T')[0]}});
}
}
}
</script>
部署到实际环境中
方式一:通过监控其他主表字段的变化触发
<script>
//触发 监控field9291字段值的变化
WfForm.bindFieldChangeEvent("field9291", function(obj,id,value){
//清除 明细表2 数据
WfForm.delDetailRow("detail_2","all");
//获取 明细表1 数据
var rowArr = WfForm.getDetailAllRowIndexStr("detail_1").split(",");
for(var i=0; i<rowArr.length; i++){
var rowIndex = rowArr[i];
if(rowIndex !== ""){
var startDateStr = WfForm.getFieldValue("field9292_"+rowIndex);
var endDateStr = WfForm.getFieldValue("field9293_"+rowIndex);
//转换为日期字段
var startDate = new Date(startDateStr);
var endDate = new Date(endDateStr);
//赋值 明细表2 数据
for (var d = startDate; d <= endDate; d.setDate(d.getDate() + 1)) {
WfForm.addDetailRow("detail_2",{field9294:{value:d.toISOString().split('T')[0]}});
}
}
}
});
</script>
方式二:表单新增按钮,并通过点击表单按钮触发
<script>
jQuery(document).ready(function() {
// 定义按钮的HTML
var buttonHtml =
'<span style="display: inline-block; line-height: 28px; vertical-align: middle; margin-left: 10px;">' +
'<button id="btnwf" title="提交" type="button" class="ant-btn ant-btn-primary">' +
'<div class="wf-req-top-button" style="color:white">提交</div>' +
'</button>' +
'</span>';
// 将按钮插入到指定的单元格中 btnLink 为单元格自定义属性的id属性值,可自定义
jQuery("#btnLink").html(buttonHtml);
// 为按钮添加点击事件处理程序
jQuery("#btnwf").on("click", function() {
//清除 明细表2 数据
WfForm.delDetailRow("detail_2","all");
//获取 明细表1 数据
var rowArr = WfForm.getDetailAllRowIndexStr("detail_1").split(",");
for(var i=0; i<rowArr.length; i++){
var rowIndex = rowArr[i];
if(rowIndex !== ""){
var startDateStr = WfForm.getFieldValue("field9292_"+rowIndex); //获取明细行 开始日期
var endDateStr = WfForm.getFieldValue("field9293_"+rowIndex); //获取明细行 结束日期
//转换为日期字段
var startDate = new Date(startDateStr);
var endDate = new Date(endDateStr);
//赋值 明细表2 数据
for (var d = startDate; d <= endDate; d.setDate(d.getDate() + 1)) {
WfForm.addDetailRow("detail_2",{field9294:{value:d.toISOString().split('T')[0]}});
}
}
}
});
});
按钮插入位置选择:
在表单页面,确认按钮需要插入的单元格位置,将对应位置id的属性值改为"btnLink"