版主2010級市場營銷專業本科生
2013年8月入達內培訓java相關技術
12月入職,做用友NC的二次開發工作
2015年4月離職,4中下旬入職一家互聯網金融企業
下面是做NC二開期間積累的一些常用的技術點,供NC實習生參考,不謝!
原 docx 文件下載 http://files.VEVb.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");
UI1.列表界面設置可多選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.JdbcsessionJdbcSession 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.獲取表體指定行的vogetBillModel("頁簽名").getBodyValueRowVO(rownum, className);
3.單據狀態欄打印消息ShowStatusBarMsgUtil.showStatusBarMsg
4.獲取tsCurTime.getCurrentTimeStampString();
5.創建主鍵new SequenceGenerator().generate(pk_corp,num);
6. 保留小數點后2位,并“四舍五入”new UFDouble().setScale(2, UFDouble.ROUND_HALF_UP);
新聞熱點
疑難解答