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.14159265358979

PI()

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.待更新