1. 明细表日期设置可选范围

<script>
// jQuery 文档准备好之后执行的函数
jQuery(document).ready(function() {
    // 设置已存在行的日期范围
    // 获取明细行"detail_1"的行数
    var rowCount = WfForm.getDetailRowCount("detail_1");
    // 遍历每一行
    for (var i = 0; i < rowCount; i++) {
        // 将字段名称"zdrq"转换为字段ID,附加行号
        var m_zdrq_fieldid = WfForm.convertFieldNameToId("zdrq", "detail_1") + "_" + i;
        // 对应字段控制日期范围,-3表示最早日期为当前日期前三天,undefined 表示最晚日期不限制
        WfForm.controlDateRange(m_zdrq_fieldid, -3, undefined);
    }

    // 注册添加新行的操作
    // ACTION_ADDROW + "1" 表示添加明细行1的动作
    WfForm.registerAction(WfForm.ACTION_ADDROW + "1", function(rowId) {
        // 使用setTimeout来等待新行被完全添加
        setTimeout(function() {
            // 重新获取明细行的行数
            var rowCount = WfForm.getDetailRowCount("detail_1");
            // 遍历每一行
            for (var i = 0; i < rowCount; i++) {
                // 将字段名称"zdrq"转换为字段ID,附加行号
                var m_zdrq_fieldid = WfForm.convertFieldNameToId("zdrq", "detail_1") + "_" + i;
                // 对应字段控制日期范围,-3表示最早日期为当前日期前三天,undefined 表示最晚日期不限制
                WfForm.controlDateRange(m_zdrq_fieldid, -3, undefined);
            }
        }, 0);
    });
});

</script>

2. 明细表日期根据主表日期设置可选范围

<script>
// jQuery 文档准备好之后执行的函数
jQuery(document).ready(function() {
    // 设置已存在行的日期范围
    // 获取明细行"detail_1"的行数
    var rowCount = WfForm.getDetailRowCount("detail_1");
    // 遍历每一行
    for (var i = 0; i < rowCount; i++) {
        // 将字段名称"zdrq"转换为字段ID,附加行号
        var m_zdrq_fieldid = WfForm.convertFieldNameToId("yjghrq", "detail_1") + "_" + i;
        // 获取"sqrq"字段的值
        var sqrqValue = WfForm.getFieldValue("field12154"); // 替换成实际的"sqrq"字段的ID
        // 计算最早日期
        var earliestDate = new Date(sqrqValue);
        earliestDate.setMonth(earliestDate.getMonth() + 3);
        // 获取当前日期
        var currentDate = new Date();
        // 对应字段控制日期范围,最早日期为当天,最晚日期为"sqrq"字段的后三个月
        WfForm.controlDateRange(m_zdrq_fieldid, currentDate, earliestDate);
    }
    // 注册添加新行的操作
    // ACTION_ADDROW + "1" 表示添加明细行1的动作
    WfForm.registerAction(WfForm.ACTION_ADDROW + "1", function(rowId) {
        // 使用setTimeout来等待新行被完全添加
        setTimeout(function() {
            // 重新获取明细行的行数
            var rowCount = WfForm.getDetailRowCount("detail_1");
            // 遍历每一行
            for (var i = 0; i < rowCount; i++) {
                // 将字段名称"zdrq"转换为字段ID,附加行号
                var m_zdrq_fieldid = WfForm.convertFieldNameToId("yjghrq", "detail_1") + "_" + i;
                // 获取"sqrq"字段的值
                var sqrqValue = WfForm.getFieldValue("field12154"); // 替换成实际的"sqrq"字段的ID
                // 计算最早日期
                var earliestDate = new Date(sqrqValue);
                earliestDate.setMonth(earliestDate.getMonth() + 3);
                // 获取当前日期
                var currentDate = new Date();
                // 对应字段控制日期范围,最早日期为当天,最晚日期为"sqrq"字段的后三个月
                WfForm.controlDateRange(m_zdrq_fieldid, currentDate, earliestDate);
            }
        }, 0);
    });
});
</script>

3. 重写window.alert系统弹窗:文字过多自动换行,窗口右侧实现滑动精度条,倒计时弹窗确认关闭窗口

<script>
  // 重写 window.alert 函数
  window.alert = function(data, callback) {
    // 创建遮罩层元素
    var alert_bg = document.createElement('div');
    // 创建提示框容器元素
    var alert_box = document.createElement('div');
    // 创建提示框标题栏元素
    var alert_title = document.createElement('div');
    // 创建提示框文字内容元素
    var alert_text = document.createElement('div');
    // 创建确认按钮元素
    var alert_btn = document.createElement('button');
    // 创建滚动条容器元素
    var alert_scroll = document.createElement('div');
    // 创建倒计时显示元素
    var alert_countdown = document.createElement('div');
    // 创建文字节点
    var textNode = document.createTextNode(data ? data : '');
    // 创建标题节点
    var titleNode = document.createTextNode('这是一个流程提示');  // 标题文字
    // 创建按钮文字节点
    var btnText = document.createTextNode('确 定');
    // 设置倒计时时间
    var countdown = 8;
    // 设置遮罩层样式
    css(alert_bg, {
      'position': 'fixed',
      'top': '0',
      'left': '0',
      'right': '0',
      'bottom': '0',
      'background-color': 'rgba(0, 0, 0, 0.5)', // 修改背景颜色为半透明黑色
      'z-index': '999999999'
    });
    // 设置提示框容器样式
    css(alert_box, {
      'width': '570px',// 修改此处可调整提示框的宽度
      'max-width': '90%', // 修改此处可调整提示框的最大宽度
      'font-size': '16px',
      'text-align': 'center',
      'background-color': '#fff',
      'border-radius': '15px',
      'position': 'absolute',
      'top': '50%',
      'left': '50%',
      'transform': 'translate(-50%, -50%)',
      'display': 'flex',
      'flex-direction': 'column',
      'align-items': 'center',
      'justify-content': 'center'
    });
    // 设置标题栏样式
    css(alert_title, {
      'background-color':  '#81d8d0',  // 修改此处可调整标题栏的颜色
      'color': '#fff',
      'padding': '10px',
      'border-top-left-radius': '15px',
      'border-top-right-radius': '15px',
      'width': '100%',
      'box-sizing': 'border-box'
    });
    // 设置文字内容样式
    css(alert_text, {
      'padding':  '15px 15px', // 修改此处可调整文字上下左右间距
      'color': 'red',
      'border-bottom': '1px solid #ddd',
      'overflow': 'hidden',
      'max-height': '350px',// 修改此处可调整提示框的高度
      'line-height': '1.5',
      'word-wrap': 'break-word',
      'word-break': 'break-all',
      'display': '-webkit-box',
      '-webkit-box-orient': 'vertical',
      '-webkit-line-clamp': '8',
      'overflow-y': 'auto'
    });
    // 设置滚动条容器样式
    css(alert_scroll, {
      'height': '100%',
      'width': '5px',
      'position': 'absolute',
      'top': '0',
      'right': '0',
      'background': 'rgba(0, 0, 0, 0.1)'
    });
    // 设置确认按钮样式
    css(alert_btn, {
      'padding': '10px 0',
      'color': '#007aff',
      'font-weight': '600',
      'cursor': 'pointer',
      'border': 'none',
      'background': 'none',
      'font-size': '16px',
      'display': 'none'
    });
    // 设置倒计时显示样式
    css(alert_countdown, {
      'margin-top': '10px',
      'font-size': '14px',
      'color': '#888'
    });
    // 更新倒计时显示
    function updateCountdown() {
      if (countdown > 0) {
        alert_countdown.textContent = '等待 ' + countdown + ' 秒...';
        countdown--;
      } else {
        clearInterval(countdownInterval);
        css(alert_btn, {
          'display': 'block',
          'pointer-events': 'auto',
          'opacity': '1'
        });
        alert_countdown.textContent = '';
      }
    }
    // 启动倒计时
    var countdownInterval = setInterval(updateCountdown, 1000);
    // 构建提示框结构
    alert_title.appendChild(titleNode);
    alert_text.appendChild(textNode);
    alert_btn.appendChild(btnText);
    alert_box.appendChild(alert_title);  // 添加标题栏
    alert_box.appendChild(alert_text);
    alert_box.appendChild(alert_scroll);
    alert_box.appendChild(alert_btn);
    alert_box.appendChild(alert_countdown);
    alert_bg.appendChild(alert_box);
    // 将提示框添加到页面
    document.getElementsByTagName('body')[0].appendChild(alert_bg);
    // 确认按钮点击事件
    alert_btn.onclick = function() {
      alert_bg.parentNode.removeChild(alert_bg);
      clearInterval(countdownInterval);
      if (typeof callback === 'function') {
        callback();
      }
    };
  }
  // 设置元素样式的工具函数
  function css(targetObj, cssObj) {
    var str = targetObj.getAttribute("style") ? targetObj.getAttribute('style') : '';
    for (var i in cssObj) {
      str += i + ':' + cssObj[i] + ';';
    }
    targetObj.style.cssText = str;
  }
  // 调用重写的 alert 函数
  alert('元戎启行是一家L4级自动驾驶全栈解决方案提供商,专注于模型训练、高精地图测绘等,以支持量产百辆以上的车队运营。公司与国内国际厂商合作,共同设计、研发针对无人驾驶出行服务的量产车辆;打造无人专车运营服务,进行技术输出和服务。自主研发仿真模拟平台,可以对多种类型的场景进行真实的模拟和复现。')
</script>

4.流程移动端(H5)alert/confirm提示信息去除网址(URL)

<script type="text/javascript">
window.alert = function(name){
  var iframe = document.createElement("IFRAME");
  iframe.style.display="none";
  iframe.setAttribute("src", 'data:text/plain,');
  document.documentElement.appendChild(iframe);
  window.frames[0].window.alert(name);
  iframe.parentNode.removeChild(iframe);
 };
</script>

5.建模查询自定义按钮验证行数据

function onUrl(){
var ids = ModeList.getCheckedID();
var json = ModeList.getTableDatas();
var obj = eval( json); 
for(var i = 0;i<ids.length;i++){
    for(var j = 0;j<obj.length;j++){
      if(ids[i]  == obj[j].id){ 
           //alert(obj[j].id);
      if(obj[j].spsl>400){
            alert("第"+j+"行商品数据异常");
             }else{
               alert("第"+j+"行商品数据正常");
                }
             }       
          }   
       }
    }

6. 建模查询页面扩展批量操作新建流程带入查询列表字段数据

<script>
function GetQueryString(name)
{
     var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
     var r = window.location.href.substr(1).match(reg);
     if(r!=null)return  decodeURI(r[2]); return null;
     
}
//模块:页面扩展批量操作菜单按钮
/*
(function(){
var ids = ModeList.getCheckedID();
if(ids==""){ModeList.showMessage("至少勾选一条",2,1);return;}
var url = '/spa/workflow/static4form/index.html?_rdm=1634001315677#/main/workflow/req?iscreate=1&workflowid=2&certs='+ids;
window.open(url);
})()
*/

//获取建模查询自定义按钮传递的参数的值,并且赋值明细表字段:参数certs,bh
jQuery(document).ready(function(){
var certs =GetQueryString("certs");
var bh =GetQueryString("bh");
//alert(certs);
var certarr=certs.split(",");
//alert(certarr);
//WfForm.changeFieldValue("field9599", {value:certs});
 for(var i =0;i<certarr.length;i++){
WfForm.addDetailRow("detail_1",{field9933:{
    value:certarr[i]
}})
}
})
</script>

<style>

 select {
    line-height: 22px;
    height: 22px;
    background: none;
    border: none;
    min-width: 95%;
}

 /* 样式-下拉框长度 */
   .wea-select{
     width: 95%
   }
/*选择框宽度*/
.wea-select ,.ant-select-selection{
    width: 95%;
    border-style: none;
}

/*浏览框去边框,调整宽度*/
.wea-associative-search {
    border-style: none;
    min-width: 95% !important;
}
/* e9样式结束*/

/*通用圆角样式*/
.ysyj{
  height:15px;
  width:100%;
  background:#ffffff!important;
  border: 1px solid #ffffff!important;
  border-top-right-radius:9px;
}
.zxyj{
  height:15px;
  width:100%;
  background:#ffffff!important;
  border: 1px solid #ffffff!important;
  border-bottom-left-radius:9px;
}
.yxyj{
  height:15px;
  width:100%;
  background:#ffffff!important;
  border: 1px solid #ffffff!important;
  border-bottom-right-radius:9px;
}
.zsyj{
  height:15px;
  width:100%;
  background:#ffffff!important;
  border: 1px solid #ffffff!important;
  border-top-left-radius:9px;
}

/* 修复 input 框 Chrome 自动填充屎黄色背景 */
    input:-webkit-autofill,.excelMainTable input:-webkit-autofill:hover,.excelMainTable input:-webkit-autofill:focus,.excelMainTable input:-webkit-autofill:active {
        -webkit-transition-delay: 99999s;
        -webkit-transition: color 99999s ease-out, background-color 99999s ease-out;
    }

</style>
<style>

 select {
    line-height: 22px;
    height: 22px;
    background: none;
    border: none;
    min-width: 95%;
}





 /* 样式-下拉框长度 */
   .wea-select{
     width: 95%
   }
/*选择框宽度*/
.wea-select ,.ant-select-selection{
    width: 95%;
    border-style: none;
}

/*浏览框去边框,调整宽度*/
.wea-associative-search {
    border-style: none;
    min-width: 95% !important;
}
/* e9样式结束*/

/*通用圆角样式*/
.ysyj{
  height:15px;
  width:100%;
  background:#ffffff!important;
  border: 1px solid #ffffff!important;
  border-top-right-radius:9px;
}
.zxyj{
  height:15px;
  width:100%;
  background:#ffffff!important;
  border: 1px solid #ffffff!important;
  border-bottom-left-radius:9px;
}
.yxyj{
  height:15px;
  width:100%;
  background:#ffffff!important;
  border: 1px solid #ffffff!important;
  border-bottom-right-radius:9px;
}
.zsyj{
  height:15px;
  width:100%;
  background:#ffffff!important;
  border: 1px solid #ffffff!important;
  border-top-left-radius:9px;
}


/*单行文本去背景*/
input.InputStyle,
input.Inputstyle,
input.inputStyle,
input.inputstyle,
.excelMainTable input[type="text"],
.excelMainTable input[type="password"],
.e8_innerShowContent,
.excelMainTable textarea,
.sbHolder {
    /*border: 1px solid #F2F2F2 !important;*/
    border: none;
    background: none;
}

/* 修复 input 框 Chrome 自动填充屎黄色背景 */
    input:-webkit-autofill,.excelMainTable input:-webkit-autofill:hover,.excelMainTable input:-webkit-autofill:focus,.excelMainTable input:-webkit-autofill:active {
        -webkit-transition-delay: 99999s;
        -webkit-transition: color 99999s ease-out, background-color 99999s ease-out;
    }

</style>

7.任意页面获取登录用户信息

<%@ page language="java" contentType="application/json" pageEncoding="UTF-8"%>
<%@ page import="net.sf.json.*"%>
<%@ page import="java.util.*" %>
<%@ page import="weaver.general.*" %>
<%@ page import="weaver.hrm.HrmUserVarify"%>
<%@ page import="weaver.hrm.User"%>



<jsp:useBean id="rs" class="weaver.conn.RecordSet" scope="page" />
<%
response.setContentType("application/json;charset=UTF-8");
BaseBean log = new BaseBean();
User user = HrmUserVarify.getUser(request, response);
if (user == null) {
    response.sendRedirect("/login/Login.jsp");
    return;
}
String userloginid=user.getLoginid();
String userlastname=user.getLastname();
int userid=user.getUID();
out.println("登录名:"+userloginid);
out.println("用户名:"+userloginid);
out.println("用户ID:"+userid);

%>

8.dosql()特殊处理流程字段数组ID

<script>
    WfForm.bindFieldChangeEvent("field5818", function(obj,id,value){  //多选字段变化
        var arr = WfForm.getFieldValue("field5818").split(',');//转换成数组
        var strArr = arr.join("','");//数组元素转字符串
        WfForm.changeFieldValue("field5819", {value:strArr});//赋值给辅助文本字段
    });  
</script>

–sql查询条件:where 字段 in (‘m a i n . 字 段 1 main.字段1main.字段1’) 字段1:field5819

9.流程action方法汇总

package weaver.interfaces.workflow.action.javacode;
//导入包
import java.util.*;
import net.sf.json.*;
import weaver.general.*;
import weaver.soa.workflow.*;
import weaver.soa.workflow.request.*;
import weaver.conn.RecordSet;
import weaver.conn.RecordSet.*;
import weaver.hrm.*;
import weaver.interfaces.workflow.action.Action;


//在线自定义action接口
public class Action20220706020703 extends BaseBean implements Action{
          //流程自定义接口代码示例
    public String execute(RequestInfo request) {
    //日志
   writeLog("in my online edited action");
     //获取表名称,流程id
        String requestId = request.getRequestid();//请求ID
        String requestlevel = request.getRequestlevel();//请求紧急程度
        String workflowid = request.getWorkflowid();//流程ID
        String tablename = request.getRequestManager().getBillTableName();//表单名称
        int billid = request.getRequestManager().getBillid();//表单数据ID
        String requestname = request.getRequestManager().getRequestname();//请求标题
        String remark = request.getRequestManager().getRemark();//当前用户提交时的签字意见
        int formid = request.getRequestManager().getFormid();//表单ID
        int isbill = request.getRequestManager().getIsbill();//是否是自定义表单
    
       //取主表数据
        Map<String, String> mainTableDataMap = new HashMap<String, String>();
        Property[] properties = request.getMainTableInfo().getProperty();// 获取表单主字段信息
        for (int i = 0; i < properties.length; i++) {
            String fieldname = properties[i].getName().toLowerCase();// 主字段名称,字段名转换为小写
            String fieldval = Util.null2String(properties[i].getValue());// 主字段对应的值
            mainTableDataMap.put(fieldname, fieldval);// 存为数组
            System.out.println(fieldname + " " + fieldval);
        }
        //取明细数据
        DetailTable[] detailtable = request.getDetailTableInfo().getDetailTable();// 获取所有明细表
        if (detailtable.length > 0) {
            for (int i = 0; i < detailtable.length; i++) {
                DetailTable dt = detailtable[i];// 指定明细表
                Row[] s = dt.getRow();// 当前明细表的所有数据,按行存储
                for (int j = 0; j < s.length; j++) {
                    Row r = s[j];// 指定行
                    Cell c[] = r.getCell();// 每行数据再按列存储
                    for (int k = 0; k < c.length; k++) {
                        Cell c1 = c[k];// 指定列
                        String name = c1.getName();// 明细字段名称
                        String value = c1.getValue();// 明细字段的值
                        System.out.println(name + " " + value);
                    }
                }
            }
        }
/*
    //方法1:修改表单字段值
    Property[] mainProps = request.getMainTableInfo().getProperty();
        // 要修改的主表字段
        String mainField = "field101"; 
        // 该主表字段修改后的值
        String mainFieldValue = "value101"; 
        for(int i=0; i< mainProps.length; i++){
            if(mainProps[i].getName().equals(mainField)){ //主表中存在此字段
                prop = mainProps[i];
                prop.setValue(mainFieldValue);
                request.getMainTableInfo().setProperty(i,prop);
            }
        }
        // 调用 BaseBean 的写日志方法
        // 会将日志写入泛微 E8 根目录的 /log/ecology 文件中
        this.writeLog("已完成修改,仅用于 Java 缓存读取,不可用于全流程");
        // 返回 SUCCESS 则依次进入: 当前环节的其他【节点后操作】、系统的出口条件判断、下一环节的【节点前操作】
        // 返回 FAILURE_AND_PASS 则会停留在当前环节的界面,提交不成功
        return Action.SUCCESS;
  */
    /*
     //方法2:修改表单字段值
     Property[] mainProps = request.getMainTableInfo().getProperty();
        // 要修改的主表名称
        String mainTableName = request.getRequestManager().getBillTableName();
        // 要修改的对应记录行号
        String requestId = request.getRequestid();
        // 要修改的主表字段
        String mainField = "field101"; 
        // 该主表字段修改后的值
        String mainFieldValue = "value102"; 
        RecordSet rs = new RecordSet(); //直接更新数据库内容,控制流程走向
        String sql = "update "+ mainTableName +" set "+mainField+"= '"+mainFieldValue+"' where requestid ="+requestId;
        rs.execute(sql);
        // 调用 BaseBean 的写日志方法
        // 会将日志写入泛微 E8 根目录的 /log/ecology 文件中
        this.writeLog("已完成修改,可用于全流程");
        // 返回 SUCCESS 则依次进入: 当前环节的其他【节点后操作】、系统的出口条件判断、下一环节的【节点前操作】
        // 返回 FAILURE_AND_PASS 则会停留在当前环节的界面,提交不成功
        return Action.SUCCESS; 
  */
    
       RecordSet rs = new RecordSet();
          rs.execute("select * from "+tablename+" where requestid =  "+requestId);
             rs.next();
    //获取表字段值
            String mainid = rs.getString("id");                             
             String wenben = rs.getString("wenben");    
    
//查询字段值,存为json数组   
List<Map<String, String>> list = new ArrayList<Map<String, String>>();
String cxsql = "select id,workflowname from workflow_base ";
rs.executeSql(cxsql);
while(rs.next()){
    Map<String, String> result = new HashMap<String, String>();
    result.put("id",rs.getString("id"));
    result.put("workflowname",rs.getString("workflowname"));
    list.add(result);
}
JSONArray jo = JSONArray.fromObject(list);
  
    
    //禁止提交
    if(1==1){
      request.getRequestManager().setMessageid("90001");
            request.getRequestManager().setMessagecontent("系统异常终止流程提交!"+"\n"+"流程ID:"+requestId+"\n"+"主表数据:"+mainTableDataMap+"\n"+"数据库查询JSON:"+jo);
      return Action.FAILURE_AND_CONTINUE;
    }else{
     //允许提交
        return Action.SUCCESS;   
    }
    }
}

10.建模查询字段显示转换

<div style="background:pink;
                   background-repeat:repeat;
                   background-position:center center;
                   background-image:url(images/l.jpg);
                   background-position:center top;
                   background-attachment:fixed;
                   color:#00FF00;
                   font-size:20px;
                   background-repeat;
                   text-align:center;
                   text-decoration:none;
                   text-overflow:ellipsis;
                   white-space:normal;
                   border-radius;"
>$sqrq$
</div>

11.显示模板函数公式

函数含义示例
ABS求数值绝对值ABS(数值)
AVERAGE返回一组数值中的平均值AVERAGE(数值1,数值2…)
COS返回给定角度的余弦值COS(数值)
EXP返回e的n次冥。常数e等于2.71828182845904,是自然对数的底EXP(数值)
INT返回舍入实数后的整数值INT(数值)
LN返回基底为自然数e的一个数的对数LN(正实数)
LOG10返回以10为底的对数LOG10(正实数)
MAX返回一组值中的最大值MAX(数值1,数值2…)
MIN返回一组值中的最小值MIN(数值1,数值2…)
MOD返回两数相除的余数MOD(被除数,除数)
PI返回数字3.14159265358979PI()
ROUND四舍五入ROUND(数值,小数位数)
SIN返回给定角度的正弦值SIN(数值)
SQRT返回数值正平方根SQRT(正实数)
SUM求和,返回参数列表中所有数值之和SUM(数值1,数值2…)
SUM_USERVAL对单元区域中用户自定义数值相同的单元进行求和SUM_USERVAL(单元区域,用户自定义数值)
SUM_USERVAL_DOWN从上到下对单元区域中的单元用户自定义数值相同的单元进行求和,用户自定义数值不相同后不再计算SUM_USERVAL_DOWN(单元区域,用户自定义数值)
SUM_USERVAL_UP从下到上对单元区域中的单元用户自定义数值相同的单元进行求和,用户自定义数值不相同后不再计算SUM_USERVAL_UP(单元区域,用户自定义数值)
SUMD对单元区域中没有公式的单元进行求和SUMD(单元区域1,单元区域2…)
SUMF对单元区域中有公式的单元进行求和SUMF(单元区域1,单元区域2…)
TAN返回给定角度的正切值TAN(数值)
TRUNC将数字截止定位小数的整数TRUNC(数值,小数位)

12.根据明细表1中的字段rkck(字段类型为浏览按钮)的值来设置明细表1字段cfdd(字段类型为文本)的必填属性。当rkck值为2时,cfdd必填,否则不改变属性。

我的需求是:根据明细表1中的字段rkck(字段类型为浏览按钮)的值来设置明细表1字段cfdd(字段类型为文本)的必填属性。当rkck值为2时,cfdd必填,否则不改变属性。字段信息 字段ID : field12115 数据库字段名称 : rkck 字段信息 字段ID : field12116 数据库字段名称 : cfdd

ChatGPT

根据你的需求,你想根据明细表1中的字段 rkck 的值来设置明细表1中的字段 cfdd 的必填属性。根据提供的文档,我将为你详细解释如何实现这一功能。

步骤概述

  1. 绑定明细字段值变化触发事件​:使用 bindDetailFieldChangeEvent 方法监控 rkck 字段的值变化。
  2. 根据条件改变字段属性​:在值变化的回调函数中,根据 rkck 的值决定是否将 cfdd 字段设置为必填。

具体实现

首先,根据你提供的字段信息,假设 rkck 的字段ID 为 field12115cfdd 的字段ID 为 field12116

1. 绑定字段值变化触发事件

使用 bindDetailFieldChangeEvent 方法,监听 rkck 字段值的变化:

jQuery(document).ready(function(){
    WfForm.bindDetailFieldChangeEvent("field12115", function(fieldId, rowIndex, value){
        // 监听 rkck 字段值变化
        if (value === '2') {
            // 当 rkck 的值为 '2' 时,设置 cfdd 字段为必填
            WfForm.changeFieldAttr("field12116_" + rowIndex, 3); // 3 表示必填
        } else {
            // 当 rkck 的值不为 '2' 时,设置 cfdd 字段为可编辑(或其他状态)
            WfForm.changeFieldAttr("field12116_" + rowIndex, 2); // 2 表示可编辑
        }
    });
});

2. 解释代码

  • WfForm.bindDetailFieldChangeEvent("field12115", function(fieldId, rowIndex, value){ ... });:绑定了 rkck 字段的值变化事件。当 rkck 字段的值发生变化时,回调函数中的 value 参数将获取到 rkck 字段当前的值。
  • WfForm.changeFieldAttr("field12116_" + rowIndex, 3);:根据 rkck 字段的值设置 cfdd 字段的属性。在这里,如果 rkck 的值为 '2',则将 cfdd 字段设置为必填 (3 表示必填状态),否则可以根据需求设置为可编辑或其他状态。

注意事项

  • 请确保在页面加载完成后再执行绑定事件的代码,即 jQuery(document).ready(function(){ ... });
  • 参数 rowIndex 表示明细行的序号,用于标识明细表中的每一行,确保在设置字段属性时使用正确的行号。

通过这样的实现,当明细表1中的 rkck 字段的值发生变化时,系统将自动根据条件设置 cfdd 字段的必填属性,实现了根据字段值动态改变字段显示属性的功能。

13.待更新

Last modification:July 19, 2024
如果觉得我的文章对你有用,请随意赞赏