一、选择树卡加载右侧数据
xml中添加配置(不是优的配置,但确实能解决问题)
<bean id="typeAndDocMediator" class="nc.ui.hrpe.jxdy.JxdytreeMediator">
<property name="typeAppModel" ref="hModel" />
<property name="billForm" ref="billForm" />
<property name="dataManager" ref="hModelModelDataManager" />
</bean>
package nc.ui.hrpe.jxdy;
import nc.ui.hr.uif2.mediator.TypeAndDocMediator;
import nc.ui.hr.uif2.model.ITypeSupportModelDataManager;
import nc.ui.hrpe.jxdy.ace.serviceproxy.JxdyModelDataManager;
import nc.ui.pub.bill.BillCardPanel;
import nc.ui.pubapp.uif2app.event.OrgChangedEvent;
import nc.ui.pubapp.uif2app.view.BillForm;
import nc.ui.uif2.AppEvent;
import nc.ui.uif2.model.AppEventConst;
import nc.vo.hrpe.jxdy.JxdyVO;
import nc.vo.pub.lang.UFBoolean;
import nc.vo.pub.lang.UFDate;
public class JxdytreeMediator extends TypeAndDocMediator {
private BillForm billForm;
private JxdyModelDataManager dataManager;
@Override
public void handleEvent(AppEvent event) {
// 列表初始化
if (AppEventConst.SELECTION_CHANGED.equals(event.getType())) {
JxdyVO vo = (JxdyVO) getTypeAppModel().getSelectedData();
if (vo != null) {
String pk_org = vo.getPk_org();//组织
String code = vo.getCode();//绩效单元编码
String name = vo.getName();//绩效单元名称
String pid = vo.getPid();//上级绩效单元
String pk_group = vo.getPk_group();//集团
String pk_jxdyxx = vo.getPk_jxdyxx();//绩效单元主键
String creator = vo.getCreator();//创建人
UFBoolean iscancel = vo.getIscancel();//是否取消
String leader = vo.getLeader();//负责人
String modifier = vo.getModifier();//最后修改人
UFDate canceldate = vo.getCanceldate();//撤销日期
Integer enablestate = vo.getEnablestate();//启用状态
//getTypeAppModel().getContext().setPk_org(pk_org);
BillCardPanel panel = this.getBillForm().getBillCardPanel();
panel.setHeadItem("pk_jxdyxx",pk_jxdyxx);
panel.setHeadItem("code", code);
panel.setHeadItem("name", name);
panel.setHeadItem("pid", pid);
panel.setHeadItem("leader", leader);
panel.setHeadItem("iscancel", iscancel);
panel.setHeadItem("canceldate",canceldate);
panel.setHeadItem("creator", creator);
panel.setHeadItem("enablestate", enablestate);
panel.setHeadItem("pk_org", pk_org);
panel.setHeadItem("pk_group", pk_group);
}
}
// 选择发生变化
else if (AppEventConst.MODEL_INITIALIZED.equals(event.getType())) {
}else if("nc.ui.pubapp.uif2app.event.OrgChangedEvent".equals(event.getType())){
getTypeAppModel().getContext().setPk_org(((OrgChangedEvent) event).getNewPkOrg());
this.getDataManager().initModel();
}
}
public BillForm getBillForm() {
return billForm;
}
public void setBillForm(BillForm billForm) {
this.billForm = billForm;
}
public JxdyModelDataManager getDataManager() {
return dataManager;
}
public void setDataManager(JxdyModelDataManager dataManager) {
this.dataManager = dataManager;
}
}
二、根据组织显示左侧树卡加载数据
据说UAP-STUDIO6.5根据向导生成的树卡单据,但经过好多遍的发布单据,没成功一次。
在生成的xml文件中组织change监听事件注入model,如下红色配置。
<!-- 事件监听newadd -->
<bean id="hModelEventMediator" class="nc.ui.pubapp.uif2app.model.AppEventHandlerMediator">
<property name="model" ref="hModel" />
<property name="handlerGroup">
<list>
<!-- nc.ui.pubapp.uif2app.event.OrgChangedEvent -->
<bean class="nc.ui.pubapp.uif2app.event.EventHandlerGroup">
<property name="event" value="nc.ui.pubapp.uif2app.event.OrgChangedEvent" />
<property name="handler">
<bean class="nc.ui.hrpe.jxdy.ace.handler.AceOrgChangeHandler" >
<property name="billForm" ref="billForm" />
<property name="model" ref="hModel"></property>
</bean>
</property>
</bean>
<!-- nc.ui.pubapp.uif2app.event.billform.AddEvent -->
<bean class="nc.ui.pubapp.uif2app.event.EventHandlerGroup">
<property name="event" value="nc.ui.pubapp.uif2app.event.billform.AddEvent" />
<property name="handler">
<bean class="nc.ui.hrpe.jxdy.ace.handler.AceAddHandler" />
</property>
</bean>
</list>
</property>
</bean>
<property name="model" ref="hModel"></property>
</bean>
</property>
</bean>
<!-- nc.ui.pubapp.uif2app.event.billform.AddEvent -->
<bean class="nc.ui.pubapp.uif2app.event.EventHandlerGroup">
<property name="event" value="nc.ui.pubapp.uif2app.event.billform.AddEvent" />
<property name="handler">
<bean class="nc.ui.hrpe.jxdy.ace.handler.AceAddHandler" />
</property>
</bean>
</list>
</property>
</bean>
nc.ui.hrpe.jxdy.ace.handler.AceOrgChangeHandler类handleAppEvent方法中添加如下代码:
String pk_org = e.getNewPkOrg();
/**
* 下面进行根据组织过滤树卡数据
*/
IUAPQueryBS query = NCLocator.getInstance().lookup(IUAPQueryBS.class);
List<JxdyVO> jxdyVOList = null;
try {
//查询需要加载的数据VO集合
jxdyVOList = (List<JxdyVO>)query.retrieveByClause(JxdyVO.class, "dr=0 and pk_org='"+pk_org+"'");
Object[] objs = jxdyVOList.toArray();
this.getModel().initModel(objs);//加载树卡数据
} catch (BusinessException e1) {
e1.printStackTrace();
}
经过测试,功能实现。
看到有朋友回复问左树和右边界面数据联动问题,下面是代码示例:
1、xml增加配
<!--
a)层次模型和管理模型之间的协调者,以Mediator结尾,不区分大小写;
b)该类对两个模型进行监听,负责相互事件的中转;
c)属性可以扩展;
-->
<bean id="CorpMediator" class="nc.ui.tmpub.corpentrustunit.treemanage.CorpMediator">
<property name="treeModel" ref="HAppModel"></property>
<property name="bmModel" ref="bmModel"></property><!--name="model" 此处一定要修改为bmModel dingxm -->
<property name="manageModelDataManager" ref="ManageModelDataManager"></property>
</bean>
2、代码
package nc.ui.tmpub.corpentrustunit.treemanage;
import nc.ui.uif2.AppEvent;
import nc.ui.uif2.AppEventListener;
import nc.ui.uif2.UIState;
import nc.ui.uif2.model.AppEventConst;
import nc.ui.uif2.model.BillManageModel;
import nc.ui.uif2.model.HierachicalDataAppModel;
import nc.vo.org.CorpVO;
public class CorpMediator implements AppEventListener {
private HierachicalDataAppModel treeModel;
//private BillManageModel manageAppModel;
private BillManageModel bmModel;
private CorpentrustunitModelDataManager manageModelDataManager;
public static String TREE_STATUS_CHANGED = "TREE_STATUS_CHANGED";
public static int TREE_DISABLE = 1;
public static int TREE_ENABLE = 0;
/*public BillManageModel getManageAppModel() {
return manageAppModel;
}*/
public BillManageModel getBmModel() {
return bmModel;
}
public HierachicalDataAppModel getTreeModel() {
return treeModel;
}
public CorpentrustunitModelDataManager getManageModelDataManager() {
return manageModelDataManager;
}
public void setTreeModel(HierachicalDataAppModel treeModel) {
this.treeModel = treeModel;
treeModel.addAppEventListener(this);
}
/* public void setManageAppModel(BillManageModel manageAppModel) {
this.manageAppModel = manageAppModel;
this.manageAppModel.addAppEventListener(this);
}*/
public void setBmModel(BillManageModel bmModel) {
this.bmModel = bmModel;
this.bmModel.addAppEventListener(this);
}
public void setManageModelDataManager(
CorpentrustunitModelDataManager manageModelDataManager) {
this.manageModelDataManager = manageModelDataManager;
}
public CorpMediator() {
super();
}
@Override
public void handleEvent(AppEvent event) {
if(event.getSource() == getBmModel()){//数据初始化判断
Object[] treedatas = getTreeModel().getAllDatas();
if (AppEventConst.MODEL_INITIALIZED.equals(event.getType())
&& (null == treedatas || treedatas.length <= 0)) {//只有树数据为空,即未构造时执行,否则死循环
try {
Object[] data = getTreeModel().getService().queryByDataVisibilitySetting(
getBmModel().getContext());
getTreeModel().initModel(data);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}else
if (event.getSource() == getTreeModel()) {
/**
* robin
* 树选择改变事件
*/
if (AppEventConst.SELECTION_CHANGED.equals(event.getType())) {
CorpVO classVO = (CorpVO) getTreeModel()
.getSelectedData();
String classID = classVO == null ? "" : classVO.getPrimaryKey();
/**
* robin
* 这里构建根据树节点相关参数查询管理单据主键的过滤条件
*/
String sql = " pk_org = '"+classID+"' ";
/**
* robin end
*/
getManageModelDataManager().initModelBySqlWhere(sql);
}
} else {
if (AppEventConst.UISTATE_CHANGED.equals(event.getType())) {
if (getManageModelDataManager().getModel().getUiState() == UIState.EDIT) {
getTreeModel().fireEvent(
new AppEvent(TREE_STATUS_CHANGED, getTreeModel(),
TREE_DISABLE));
} else {
getTreeModel().fireEvent(
new AppEvent(TREE_STATUS_CHANGED, getTreeModel(),
TREE_ENABLE));
}
}
}
/**新增带出树主键**robin**2013-01-15**START**/
/**
* 处理方式比较拙劣,待寻求新方法
*/
if(event instanceof nc.ui.pubapp.uif2app.event.billform.AddEvent){
Object obj = getTreeModel().getSelectedNode().getUserObject();
if(null != obj && obj instanceof CorpVO){
String treepk = ((CorpVO)obj).getPrimaryKey();
String pk_org = ((CorpVO)obj).getPk_corp();
nc.ui.pubapp.bill.BillCardPanel cp = (nc.ui.pubapp.bill.BillCardPanel)(
(nc.ui.pubapp.uif2app.event.billform.AddEvent)
event).getBillForm().getBillCardPanel();
cp.setHeadItem("pk_org", pk_org);
}
}
}
}