【NC】表頭表體編輯前后事件


什么是表頭表體編輯事件

效果:在主子表單據節點中,分別增加表頭、表體的編輯前、編輯后事件,實現編輯前對參照進行過濾,編輯后備注一欄顯示所選參照的code字段值。

在主子表單據節點下,主表即對應表頭,子表即對應表體。

新建java類

在handler包下,新建四個java類。

代碼如下:

package nc.ui.gl.editevent.ace.handler; 
import nc.ui.pubapp.uif2app.event.IAppEventHandler; 
import nc.ui.pubapp.uif2app.event.card.CardHeadTailBeforeEditEvent; 
import nc.vo.pub.lang.UFBoolean; import nc.ui.pub.beans.UIRefPane; 
//表頭編輯前事件類
public class HeadBeforeEditHandler implements IAppEventHandler<CardHeadTailBeforeEditEvent>{ 
    @Override 
    public void handleAppEvent(CardHeadTailBeforeEditEvent e) { 
        if(e.getKey().equals("pk_single")){ 
            //pk_single為元數據字段 
            Object code = e.getBillCardPanel().getHeadItem("code").getValueObject(); 
            UIRefPane pk_single = (UIRefPane)e.getBillCardPanel().getHeadItem("pk_single").getComponent(); 
            if(null != code){ 
                pk_single.getRefModel().setWherePart("isnull(dr,0) = 0 and code = '"+code+"'"); 
            }
            else{ 
                pk_single.getRefModel().setWherePart("isnull(dr,0) = 0 and 1=2 "); 
            } 
        } 
        e.setReturnValue(UFBoolean.TRUE.booleanValue()); 
    } 
}
package nc.ui.gl.editevent.ace.handler; 
import nc.ui.pubapp.uif2app.event.IAppEventHandler; 
import nc.ui.pubapp.uif2app.event.card.CardHeadTailAfterEditEvent; 
import nc.ui.trade.business.HYPubBO_Client; 
import nc.uif.pub.exception.UifException; 
import nc.vo.gl.customeredit.Customeredit; 
//表頭編輯后事件類
public class HeadAfterEditHandler implements IAppEventHandler<CardHeadTailAfterEditEvent> {       
    @Override       
    public void handleAppEvent(CardHeadTailAfterEditEvent e) {              
        if (e.getKey().equals("pk_single")) { 
            // 檢測是否對"單表單據"(參照字段)進行了修改(pk_single為元數據字段)                    
            // 獲取所選擇的參照項              
            Object gjsingle = e.getBillCardPanel().getHeadItem("pk_single").getValueObject();                    
            if (gjsingle != null) {                           
                try {                                 
                    // 獲取VO(Customeredit為參照元數據的vo類)                                 
                    Customeredit gjsinglevo = (Customeredit) HYPubBO_Client.queryByPrimaryKey(Customeredit.class,gjsingle.toString());
                    // 更新remark字段的值為選中VO的編碼值
                    e.getBillCardPanel().getHeadItem("remark").setValue(gjsinglevo.getCode());                           
                } catch (UifException e1) {                                 
                    // TODO 自動生成的 catch 塊                                 
                    e1.printStackTrace();                           
                }                    
            }             
        }     
    } 
}
package nc.ui.gl.editevent.ace.handler; import nc.ui.gl.editevent.ref.CustomerRefModel1730; import nc.ui.pub.beans.UIRefPane; 
import nc.ui.pubapp.uif2app.event.IAppEventHandler; 
import nc.ui.pubapp.uif2app.event.card.CardBodyBeforeEditEvent; 
import nc.vo.pub.lang.UFBoolean; 
//表體編輯前事件類
public class BodyBeforeEditHandler implements IAppEventHandler<CardBodyBeforeEditEvent>{ 
    @Override
    public void handleAppEvent(CardBodyBeforeEditEvent e) { 
        if (e.getKey().equals("pk_single")){ 
            //檢測是否對參照值進行編輯(pk_single為元數據字段) 
            // 獲取表頭中過濾的參照值 
            Object gjsingle = e.getBillCardPanel().getHeadItem("pk_single").getValueObject(); 
            UIRefPane pk_single  = (UIRefPane)e.getBillCardPanel().getBodyItem("pk_single").getComponent(); 
            // 獲取參照值列表(CustomerRefModel1730為人工增加的參照java類) 
            CustomerRefModel1730 realRefModel =  (CustomerRefModel1730) pk_single.getRefModel(); 
            if(gjsingle != null){ 
                //根據表頭參照值進行過濾(sid為參照表的主鍵)
               realRefModel.setWherePart("isnull(dr,0) = 0 and sid = '"+gjsingle+"'"); 
            }else{ realRefModel.setWherePart("isnull(dr,0) = 0"); 
                 } 
        } e.setReturnValue(UFBoolean.TRUE.booleanValue()); 
    } 
}
package nc.ui.gl.editevent.ace.handler; 
import nc.ui.pubapp.uif2app.event.IAppEventHandler; 
import nc.ui.pubapp.uif2app.event.card.CardBodyAfterEditEvent; 
import nc.ui.trade.business.HYPubBO_Client; 
import nc.uif.pub.exception.UifException; 
import nc.vo.gl.customeredit.Customeredit; 
import nc.vo.logging.Debug; 
//表體編輯后事件類
public class BodyAfterEditHandler implements IAppEventHandler<CardBodyAfterEditEvent>{     
    @Override     
    public void handleAppEvent(CardBodyAfterEditEvent e) {        
        if (e.getKey().equals("pk_single")) { 
            //檢測是否對參照值進行了編輯(pk_single為元數據字段)              
            //獲取表體參照值              
            Object single = e.getBillCardPanel().getBodyItem("pk_single").getValueObject();              
            if(single != null){                     
                Customeredit gjsinglevo = null ;                           
                try {                                
                    //獲取VO                                 
                    gjsinglevo = (Customeredit) HYPubBO_Client.queryByPrimaryKey(Customeredit.class, single.toString());                                 
                    //更新備注字段(remark為元數據字段)
                    e.getBillCardPanel().getBillModel().setValueAt(gjsinglevo.getCode(), e.getRow(),"remark");                           } catch (UifException e1) {                                 
                    Debug.error(e1.getMessage(),e1);                           
                }             
            }       
        }    
    }
}

修改xml文件

將4個類注入到xml文件,注意加到事件監聽列表(list)下。

xml如下:

<!-- 表頭-編輯前 --> 
<bean class="nc.ui.pubapp.uif2app.event.EventHandlerGroup">                    
    <property name="event" value="nc.ui.pubapp.uif2app.event.card.CardHeadTailBeforeEditEvent" />                     <property name="handler">                         
    <bean class="nc.ui.gl.editevent.ace.handler.HeadBeforeEditHandler" />                     
    </property>                
</bean>                
<!-- 表頭-編輯后 --> 
<bean class="nc.ui.pubapp.uif2app.event.EventHandlerGroup">                    
    <property name="event" value="nc.ui.pubapp.uif2app.event.card.CardHeadTailAfterEditEvent" />                     <property name="handler">                        
    <bean class="nc.ui.gl.editevent.ace.handler.HeadAfterEditHandler" >                         
    </bean>                    
    </property>                
</bean>                                  
<!-- 表體字段編輯前事件 -->                 
<bean class="nc.ui.pubapp.uif2app.event.EventHandlerGroup">                    
    <property name="event" value="nc.ui.pubapp.uif2app.event.card.CardBodyBeforeEditEvent" />                     <property name="handler">                         
    <bean class="nc.ui.gl.editevent.ace.handler.BodyBeforeEditHandler" />                     
    </property>                
</bean>                  
<!-- 表體字段編輯后事件 -->                 
<bean class="nc.ui.pubapp.uif2app.event.EventHandlerGroup">                    
    <property name="event" value="nc.ui.pubapp.uif2app.event.card.CardBodyAfterEditEvent" />                     <property name="handler">                        
    <bean class="nc.ui.gl.editevent.ace.handler.BodyAfterEditHandler" />                     
    </property>                
</bean>

效果展示

打開主子表單據節點,新增一條記錄。在“code”框中輸入002,然后再點擊“單表檔案“處的放大鏡,發現參照列表只顯示編碼為002的值,說明表頭編輯前過濾成功(不過濾前應該顯示所有參照)。選擇該條參照后,備注一欄也同步顯示其編碼,說明表頭編輯后事件觸發。

接下來添加表體,點擊“增行”,點擊“單表檔案”,發現參照只有表頭所選的那條參照,確認后,備注同步顯示編碼值。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM