泛微OA-主表控制明细的字段属性

本文介绍了一种使用jQuery实现的表单字段动态控制方法。当主表特定字段值发生改变时,会根据其值的不同来调整明细行中指定字段的属性,如设置为必填或可编辑状态。同时,该方法还考虑了页面加载和增加明细行时的字段属性变更。
<script>
  
  
  //页面加载时,触发
  jQuery(document).ready(function(){
    var com11 = WfForm.getFieldValue("field19843");//取值
      if(com11==1){
      
      var rowArr = WfForm.getDetailAllRowIndexStr("detail_1").split(",");
      for(var i=0; i<rowArr.length; i++){
        var rowIndex = rowArr[i];
        if(rowIndex !== ""){
          var fieldMark = "field19845_"+rowIndex;  //遍历明细行字段
          WfForm.changeFieldAttr(fieldMark,3);    //修改属性必填
        }
      }
    }else{
      var rowArr = WfForm.getDetailAllRowIndexStr("detail_1").split(",");
      for(var i=0; i<rowArr.length; i++){
        var rowIndex = rowArr[i];
        if(rowIndex !== ""){
          var fieldMark = "field19845_"+rowIndex;  //遍历明细行字段
          WfForm.changeFieldAttr(fieldMark,2);    //修改属性编辑
        }
      }
    }
    
});
   
  
  //主表值改变时,触发
  WfForm.bindFieldChangeEvent("field19843", function(obj,id,value){

    if(value==1){
      
      var rowArr = WfForm.getDetailAllRowIndexStr("detail_1").split(",");
      for(var i=0; i<rowArr.length; i++){
        var rowIndex = rowArr[i];
        if(rowIndex !== ""){
          var fieldMark = "field19845_"+rowIndex;    //遍历明细行字段
          WfForm.changeFieldAttr(fieldMark,3);      //修改属性必填
        }
      }
    }else{
      var rowArr = WfForm.getDetailAllRowIndexStr("detail_1").split(",");
      for(var i=0; i<rowArr.length; i++){
        var rowIndex = rowArr[i];
        if(rowIndex !== ""){
          var fieldMark = "field19845_"+rowIndex;    //遍历明细行字段
          WfForm.changeFieldAttr(fieldMark,2);      //修改属性编辑
        }
      }
    }
    
  });
  
  
  //增加明细时,触发
  WfForm.registerAction(WfForm.ACTION_ADDROW+"1", function(index){
    var com11 = WfForm.getFieldValue("field19843");//取值

    if(com11==1){
      var fieldzd = "field19845_"+index;
      WfForm.changeFieldAttr(fieldzd,3);  //新增明细字段属性必填
    }else{
      var fieldzd = "field19845_"+index;
      WfForm.changeFieldAttr(fieldzd,2);  //新增明细字段属性编辑
    }
  })   
  
  
  
</script>

<think>嗯,用户的问题是关于在OA中如何通过主表更新明细字段的方法或配置。首先,我需要回忆一下之前看到的引用内容,特别是引用1、2、3中的信息。引用1提到了动态列显示的方法,比如设置class属性和通过下拉框控制。引用2和3讨论了主表明细表共享expid字段,通过序列获取并赋值。这可能涉及到主表明细表之间的关联机制。 用户可能需要具体的步骤来实现主表更新明细字段。根据引用1,动态显示明细列需要设置class属性,并利用下拉框的事件触发。这可能涉及到前端JavaScript的配置,比如下拉框的onchange事件调用函数来隐藏或显示对应的明细列。比如,当主表下拉框的值改变时,触发JavaScript函数,根据选择的值动态调整明细表的显示字段。 另外,引用2和3提到主表明细表使用相同的expid字段来保持数据一致性。这可能需要在业务层中先生成expid,然后同时赋值给主表明细表。例如,在Java业务层中,先通过数据库序列获取expid,然后分别设置到主表明细表对象中,确保它们的关联正确。 用户的问题可能涉及两个方面:一是动态显示或隐藏明细字段,二是主表数据更新时同步更新明细字段。针对第一个方面,可能需要在前端配置动态列的显示逻辑,通过事件触发和DOM操作实现。针对第二个方面,可能需要在后端业务逻辑中处理字段的赋值和同步,确保数据一致性。 此外,用户可能对具体的配置步骤或代码示例感兴趣。比如,如何在前端页面中设置class属性,如何编写JavaScript函数,以及在后端如何获取并赋值expid。需要将这些步骤详细说明,并参考引用中的案例进行解释。 最后,用户可能还想了解相关的注意事项,比如字段命名规范、事件触发的时机、数据同步的机制等。需要确保步骤清晰,并提醒用户在实际操作中的常见问题,比如确保expid的正确生成和赋值顺序,避免数据不一致的情况。</think>在OA中通过主表更新明细字段的配置方法可分为以下步骤,结合动态列控制字段赋值逻辑实现: ### 一、动态列显示配置 1. **设置明细列class属性** 在需要动态控制明细字段(如$bzxx$、$num$)上添加统一的class属性(例如$ptoc$),作为前端识别的标识。该配置在表单设计器中完成[^1]。 2. **主表下拉框事件绑定** 在主表下拉框控件中添加`onchange`事件,调用JavaScript函数动态控制明细列显示: ```javascript function toggleColumns(selectObj){ var val = selectObj.value; // 隐藏/显示class为ptoc的明细列 $('.ptoc').toggle(val === 'show_all'); } ``` ### 二、主从表字段同步 1. **序列字段赋值逻辑** 在业务层处理主从表关联字段$expid$时,需先通过数据库序列获取值: ```java // 示例Java代码 String expid = sequenceDAO.getNextValue("SEQ_EXPENSE"); mainForm.setExpid(expid); // 主表赋值 detailList.forEach(detail -> detail.setExpid(expid)); // 明细表赋值 ``` 确保主表和所有明细记录共享相同的$expid$值[^2][^3]。 2. **字段级联更新配置** 通过流程引擎的字段联动规则,设置主表字段明细字段的映射关系: ```xml <!-- 示例联动规则配置 --> <field-mapping> <source>mainForm.amount</source> <target>detailForm.total_amount</target> <trigger>ON_MODIFY</trigger> </field-mapping> ``` ### 三、验证与调试 1. 使用开发者工具的DOM检查器验证动态列class是否正确应用 2. 通过SQL日志监控$expid$字段的生成和赋值过程 3. 在测试流程中验证字段联动规则的触发时机
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值