版主2010级市场营销专业本科生
2013年8月入达内培训Java相关技术
12月入职,做用友NC的二次开发工作
2015年4月离职,4中下旬入职一家互联网金融企业
下面是做NC二开期间积累的一些常用的技术点,供NC实习生参考,不谢!
原 docx 文件下载 http://files.cnblogs.com/files/liaolongjun/ExNC.zip
下面是从word文档里拷贝进来的,图片全都没有了。需要的可以直接下载上面链接的文档。
列表界面显示,卡片界面不显示:
Handler的onBoCard执行:getBillCardPanel().execHeadLoadFormulas();
Controller的isLoadCardFormula返回true
另外,字段录入长度不够时,列表显示,卡片不显示
表头显示公式,执行getBillCardPanel().execHeadLoadFormulas();
表体显示公式,执行getBillCardPanel().getBillModel().execLoadFormula();
补充:上面是最简单的方法,其它自己测试。比如,指定表体行执行公式:
// 下面的方法必须设置编辑公式 –- 用for循环效果等于上面的方法
getBillCardPanel().execBodyFormula(i, "pk_supdoc");
public ClientUI(){
super();
getBillListPanel().setMultiSelect(true);
}
UIDialog dlg = getQueryUI();
if(dlg.showModal() != 1) return;
INormalQuery query = (INormalQuery)dlg;
String sql = query.getWhereSql();
BillData bs = getBillCardPanel().getBillData();
BillItem[] items = bs.getBillModel().getBodyItems();
for (int i = 0; i < items.length; i++) {
items[i].setShow(false);
}
getBillCardPanel().setBillData(bs); // 必须有这一行
方法一:
billCardPanel.getHeadItem("hzdy42").getComponent().setVisible(false);
billCardPanel.getHeadItem("hzdy42").getCaptionLabel().setText("");
方法二:
billCardPanel.hideHeadItem(new String[]{"hzdy38","hzdy39","hzdy40","hzdy41","hzdy42"});
billCardPanel.setBillValueVO(aggvo);
前置任务:配置单据号规则
创建单据号:new HYPubBO().getBillNo(单据类型, 组织, null, null);
或者:getVbillCode(单据类型,组织);
new BillcodeGenerater ().getBillCode (单据类型, 组织,null,null);
KeyGenerator.getInstance().getKey(20);
RuntimeEnv.getInstance().getNCHome();
InvocationInfoProxy
WorkbenchEnvironment
ClientEnvironment
F:\NC63\AceHome\ierp\sf\themeconf.xml
META-INF里面必须有module.xml,Sysconfig下才能找到该模块
产生这个异常的原因是:单据类型没在添加在项目模块里,而是在自己的模块里,在单据类型表里:bd_billtype,把单据的systemcode改为项目模块即可
从pub_billaction表里复制其它单据的动作,修改单据类型、ID即可
modules -> 单据类型所在模块 -> META-INF -> var -> source
只显示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());
}
数据库里保存的是 0、1、2、3.。。。所以vo里对应Integer
getBillCardWrapper().initHeadComboBox("vname", new String[]{"A","B","C"}, true);
单据模板是日期型时,vo要为UFDate
findColValue方法只能查询字符型字段(因为这个方法内嵌了String强转)
JdbcSession session = null;
session = PersistenceManager.getInstance().getJdbcSession();
session = JdbcSessionUtil.createJdbcSession();
在modules里找到相应的模块,将public、private、client下的代码导出的jar包放到模块的lib文件夹下,开发工具重新加载下即可(怎么重新加载?--重启,再重启,直到开发工具能加载到刚导入的jar包里的类)
直接点开指定的节点,没有数据:SFClientUtil.openFrame("ZZ0102"); // 下面的还没测试
((UIRefPane) billCardPanel.getHeadItem("hzdy41").getComponent()).getRefModel().getPkValues();
((UIRefPane)(getBillCardPanelWrapper().getBillCardPanel().getHeadItem("字段").getComponent())).setRefModel(参照类.class);
((UIRefPane) editor.getBillCardPanel().getHeadItem("vpsn").getComponent()).setMultiSelectedEnabled(true);
Object obj = ((UIRefPane)getBillCardPanel().getHeadItem("").getComponent()).getRefModel();
Syttem.out.println(obj);
getBillCardPanel().getBillData().getBodyTableCodes();
getBillModel("页签名").getBodyValueRowVO(rownum, className);
ShowStatusBarMsgUtil.showStatusBarMsg
CurTime.getCurrentTimeStampString();
new SequenceGenerator().generate(pk_corp,num);
new UFDouble().setScale(2, UFDouble.ROUND_HALF_UP);