每当我们需要开发单据的时候,通常会面临一个问题,自动带值的实现,很多人会选择在单据模板中配置编辑公式,这样对于一个字段当然是可以的,但是如果需要带出多个字段,建议用代码实现:
一、在xml中配置编辑事件
<!-- 表体编辑后事件nc.ui.pubapp.uif2app.event.card.CardBodyAfterEditEvent -->
<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.aum.asset_lose_apply.ace.handler.CardBodyAfterEditHandler" />
</property>
</bean>
<!-- 表头表尾编辑前事件nc.ui.pubapp.uif2app.event.card.CardBodyAfterEditEvent -->
<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.aum.asset_lose_apply.ace.handler.CardHeadTailBeforeEditHandler" />
</property>
</bean>
二、编写自动带值的类
package nc.ui.aum.asset_lose_apply.ace.handler;
import java.util.Map;
import nc.bs.framework.common.NCLocator;
import nc.itf.uap.IUAPQueryBS;
import nc.jdbc.framework.processor.MapProcessor;
import nc.ui.pubapp.uif2app.event.IAppEventHandler;
import nc.ui.pubapp.uif2app.event.card.CardBodyAfterEditEvent;
import nc.vo.pub.BusinessException;
public class CardBodyAfterEditHandler
implements
IAppEventHandler<nc.ui.pubapp.uif2app.event.card.CardBodyAfterEditEvent> {
@Override
public void handleAppEvent(CardBodyAfterEditEvent e) {
IUAPQueryBS bs = NCLocator.getInstance().lookup(IUAPQueryBS.class);
if ("pk_equip".equals(e.getKey())
&& "id_assetlosebvos".equals(e.getTableCode())) {
String pk_equip = (String) e.getValue();
String sql = "select pk_equip,equip_name,spec,model,pk_priority,pk_usedunit,pk_usedunit_v,pk_usedept,pk_user,pk_location,origin_value from pam_equip where pk_equip = '"+pk_equip+"' and nvl(dr,0)=0 ";
try {
Map<String, String> map = (Map<String, String>) bs.executeQuery(sql, new MapProcessor());
if (map == null)
return;
e.getBillCardPanel().setBodyValueAt(map.get("equip_name"),
e.getRow(), "equip_name");
e.getBillCardPanel().setBodyValueAt(map.get("spec"),
e.getRow(), "spec");
e.getBillCardPanel().setBodyValueAt(map.get("model"),
e.getRow(), "model");
e.getBillCardPanel().setBodyValueAt(map.get("pk_priority"),
e.getRow(), "pk_priority");
e.getBillCardPanel().setBodyValueAt(map.get("pk_usedunit"),
e.getRow(), "pk_usedunit");
e.getBillCardPanel().setBodyValueAt(map.get("pk_usedunit_v"),
e.getRow(), "pk_usedunit_v");
e.getBillCardPanel().setBodyValueAt(map.get("pk_usedept"),
e.getRow(), "pk_usedept");
e.getBillCardPanel().setBodyValueAt(map.get("pk_user"),
e.getRow(), "pk_user");
e.getBillCardPanel().setBodyValueAt(map.get("pk_location"),
e.getRow(), "pk_location");
e.getBillCardPanel().setBodyValueAt(map.get("origin_value"),
e.getRow(), "origin_value");
} catch (BusinessException e1) {
//ExceptionUtils.wrappBusinessException("查询设备信息异常:"+ e1.getMessage());
}
}
}
}
如此就可以实现自动带值的功能了。