版主2010級市場營銷專業本科生
2013年8月入達內培訓Java相關技術
12月入職,做用友NC的二次開發工作
2015年4月離職,4中下旬入職一家互聯網金融企業
下面是做NC二開期間積累的一些常用的技術點,供NC實習生參考,不謝!
原 docx 文件下載 http://files.cnblogs.com/files/liaolongjun/ExNC.zip
下面是從word文檔里拷貝進來的,圖片全都沒有了。需要的可以直接下載上面鏈接的文檔。
NC二開經驗總結
公式相關
1.顯示公式沒執行
列表界面顯示,卡片界面不顯示:
Handler的onBoCard執行:getBillCardPanel().execHeadLoadFormulas();
Controller的isLoadCardFormula返回true
另外,字段錄入長度不夠時,列表顯示,卡片不顯示
2.帶出數據執行公式
表頭顯示公式,執行getBillCardPanel().execHeadLoadFormulas();
表體顯示公式,執行getBillCardPanel().getBillModel().execLoadFormula();
補充:上面是最簡單的方法,其它自己測試。比如,指定表體行執行公式:
// 下面的方法必須設置編輯公式 –- 用for循環效果等於上面的方法
getBillCardPanel().execBodyFormula(i, "pk_supdoc");
UI
1.列表界面設置可多選
public ClientUI(){
super();
getBillListPanel().setMultiSelect(true);
}
2.查詢條件
UIDialog dlg = getQueryUI();
if(dlg.showModal() != 1) return;
INormalQuery query = (INormalQuery)dlg;
String sql = query.getWhereSql();
3.隱藏表體字段
BillData bs = getBillCardPanel().getBillData();
BillItem[] items = bs.getBillModel().getBodyItems();
for (int i = 0; i < items.length; i++) {
items[i].setShow(false);
}
getBillCardPanel().setBillData(bs); // 必須有這一行
4.隱藏表頭字段
方法一:
billCardPanel.getHeadItem("hzdy42").getComponent().setVisible(false);
billCardPanel.getHeadItem("hzdy42").getCaptionLabel().setText("");
方法二:
billCardPanel.hideHeadItem(new String[]{"hzdy38","hzdy39","hzdy40","hzdy41","hzdy42"});
5.將AggVO顯示到單據界面上
billCardPanel.setBillValueVO(aggvo);
系統變量相關
1.單據號
前置任務:配置單據號規則
創建單據號:new HYPubBO().getBillNo(單據類型, 組織, null, null);
或者:getVbillCode(單據類型,組織);
new BillcodeGenerater ().getBillCode (單據類型, 組織,null,null);
2.主鍵
KeyGenerator.getInstance().getKey(20);
3.獲取nchome路徑
RuntimeEnv.getInstance().getNCHome();
4.系統變量
InvocationInfoProxy
WorkbenchEnvironment
ClientEnvironment
5.設置客戶端背景色
F:\NC63\AceHome\ierp\sf\themeconf.xml
模塊相關
1.添加模塊
META-INF里面必須有module.xml,Sysconfig下才能找到該模塊
2.單據類型沒有定義所屬模塊
產生這個異常的原因是:單據類型沒在添加在項目模塊里,而是在自己的模塊里,在單據類型表里:bd_billtype,把單據的systemcode改為項目模塊即可
單據動作相關
1.動作注冊
從pub_billaction表里復制其它單據的動作,修改單據類型、ID即可
2.動作代碼路徑
modules -> 單據類型所在模塊 -> META-INF -> var -> source
3.按鈕顯示
只顯示isEnabled()==true的按鈕:
int[] btnAry = ((LController) getUIManageController()).getCardButtonAry();
for (int i = 0; i < btnAry.length; i++) { getBillUI().getButtonManager().getButton(btnAry[i]).setVisible(getBillUI().getButtonManager().getButton(btnAry[i]).isEnabled());
}
單據模版相關
1.下拉字段
數據庫里保存的是 0、1、2、3.。。。所以vo里對應Integer
getBillCardWrapper().initHeadComboBox("vname", new String[]{"A","B","C"}, true);
2.日期型字段
單據模板是日期型時,vo要為UFDate
3.日期型默認取值
4.查詢所有的默認查詢條件
5.調用模板
數據庫操作相關
1. HYPubBO_Client
findColValue方法只能查詢字符型字段(因為這個方法內嵌了String強轉)
2.JdbcSession
JdbcSession session = null;
session = PersistenceManager.getInstance().getJdbcSession();
session = JdbcSessionUtil.createJdbcSession();
密碼相關
1.root密碼修改
補丁相關
1.如何打補丁
在modules里找到相應的模塊,將public、private、client下的代碼導出的jar包放到模塊的lib文件夾下,開發工具重新加載下即可(怎么重新加載?--重啟,再重啟,直到開發工具能加載到剛導入的jar包里的類)
運行相關
1.啟動中間件報錯
2.startup.bat啟動服務卡着不動
元數據相關
1.單據日期
配置文件相關
1.配置文件變量名寫錯
節點相關
1.打開其它節點
直接點開指定的節點,沒有數據:SFClientUtil.openFrame("ZZ0102"); // 下面的還沒測試
參照相關
1.表頭參照多選取值
((UIRefPane) billCardPanel.getHeadItem("hzdy41").getComponent()).getRefModel().getPkValues();
2.動態指定參照類
((UIRefPane)(getBillCardPanelWrapper().getBillCardPanel().getHeadItem("字段").getComponent())).setRefModel(參照類.class);
3.設置參照是否支持多選
((UIRefPane) editor.getBillCardPanel().getHeadItem("vpsn").getComponent()).setMultiSelectedEnabled(true);
4. 設置參照只顯示一級
5.參照字段實現手輸
6.如何知道一個字段的參照類型:
Object obj = ((UIRefPane)getBillCardPanel().getHeadItem("").getComponent()).getRefModel();
Syttem.out.println(obj);
下拉相關
1. 下拉去掉空白選項
預警
1.配置
其它
1.命名規則
2.表空間的概念
3.獲取用戶有權限的組織
實用方法
1.獲取表體所有頁簽名
getBillCardPanel().getBillData().getBodyTableCodes();
2.獲取表體指定行的vo
getBillModel("頁簽名").getBodyValueRowVO(rownum, className);
3.單據狀態欄打印消息
ShowStatusBarMsgUtil.showStatusBarMsg
4.獲取ts
CurTime.getCurrentTimeStampString();
5.創建主鍵
new SequenceGenerator().generate(pk_corp,num);
6. 保留小數點后2位,並“四舍五入”
new UFDouble().setScale(2, UFDouble.ROUND_HALF_UP);