什么是表頭表體編輯事件
效果:在主子表單據節點中,分別增加表頭、表體的編輯前、編輯后事件,實現編輯前對參照進行過濾,編輯后備注一欄顯示所選參照的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的值,說明表頭編輯前過濾成功(不過濾前應該顯示所有參照)。選擇該條參照后,備注一欄也同步顯示其編碼,說明表頭編輯后事件觸發。
接下來添加表體,點擊“增行”,點擊“單表檔案”,發現參照只有表頭所選的那條參照,確認后,備注同步顯示編碼值。
