你的位置:首页 > Java教程

[Java教程]NC57,NC63


版主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.

模块相关


1.添加模块


META-INF里面必须有module.

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);