用友 uap nc65開發編碼樹改為pk樹方法 1.目标:現有節點樹使用編碼來排序,将其改為pk樹排序。編碼樹和pk樹的差別在我的部落格中已經有講解了。 2.第一步去掉TreeCreateStrategy 去掉 hierarchicalData。 或者修改 hierarchicalData指定成主鍵樹
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiclRnblN0LclHdpZXYyd2LcBzNvwVZ2x2bzNXak9CX90TQNNkRrFlQKBTSvwFbslmZvwFMwQzLcVmepNHdu9mZvwFVywUNMZTY18CX052bm9CX9sGRNRzZq5UNFpXTmZEWjZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39TO0ITNwkTMxIjNwUDM3EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
3.根據對象轉換工廠,確定指定的主鍵和上下級主鍵都正确
如果是 md模式。如下圖,則需要保證中繼資料上,制定的接口映射,完全正确
<!-- 對象轉換器工廠,由此擷取操作對象的特征資訊 -->
<bean id="BOAdapterFactory" class="nc.vo.bd.meta.GeneralBDObjectAdapterFactory">
<property name="mode" value="MD"/>
</bean>
如果是按照VO的方式,則可以
<!-- 對象轉換器工廠,由此擷取操作對象的特征資訊 -->
<bean id="objectadapterfactory" class="nc.vo.bd.meta.UAPBDObjectAdapterFactory">
<property name="mode" value="VO" />
<property name="idFieldName" value="pk_head" />
<property name="codeFieldName" value="code" />
<property name="nameFieldName" value="name" />
<property name="pidFieldName" value="pk_father" />
<property name="orgFieldName" value="pk_org" />
<property name="groupFieldName" value="pk_group" />
<property name="multiLangAttribute">
<list>
<value>name</value>
</list>
</property>
</bean>
4.修改中繼資料 pk_father字段,以便維護,參照自身中繼資料,以可以手工調整修改父目錄
5. 修改addAction。 在新增的時候,給pk_father 指派,為目前選擇的樹項的主鍵
<!-- Action部分 *********************************************************** -->
<!--======= 動作:[newActions] [新增] =========== -->
<bean id="addAction" class="nc.ui.fdc_pr.h3030405.ace.action.MyAddAction">
<property name="model">
<ref bean="hModel" />
</property>
<property name="exceptionHandler">
<ref bean="exceptionHandler" />
</property>
<property name="billform" ref="billForm"></property>
</bean>
package nc.ui.fdc_pr.h3030405.ace.action;
import java.awt.event.ActionEvent;
import nc.ui.pubapp.uif2app.actions.AddAction;
import nc.ui.pubapp.uif2app.model.HierachicalDataAppModel;
import nc.ui.pubapp.uif2app.view.BillForm;
import nc.vo.bd.meta.IBDObject;
public class MyAddAction extends AddAction {
private BillForm billfrom;
/**
*
*/
private static final long serialVersionUID = -2583703804050441641L;
@Override
public void doAction(ActionEvent e) throws Exception {
// TODO 自動生成的方法存根
super.doAction(e);
HierachicalDataAppModel mode = (HierachicalDataAppModel) getModel();
if (mode.getSelectedData() != null) {
IBDObject obj = mode.getBusinessObjectAdapterFactory()
.createBDObject(mode.getSelectedData());
getBillfrom().getBillCardPanel().setHeadItem("pk_father",
obj.getId());
}
}
public BillForm getBillfrom() {
return billfrom;
}
public void setBillfrom(BillForm billfrom) {
this.billfrom = billfrom;
}
}