NC57,NC63-NC二开经验总结
版主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);
NC57,NC63-NC二开经验总结的更多相关文章
- 还在写SQL做SAP二开?通过RFC调用NetWeaver,让HANA数据库操作更可靠
相比于从零开始构建全套信息化系统,基于成熟的ERP等行业软件做二次开发是更多中大型企业应对个性化软件需求的首选方案.如何在二开模块中,可靠地对成品软件的数据库进行读写操作,以满足单据自动创建.元数据自 ...
- Odoo:全球第一免费开源ERP库龄表的简单实现方法(无需二开)
问题背景 希望查看库龄超过30天的货物,该如何实现?此种简单数据查询需要二开吗? 解决方案 方法一:Stock Quant列表视图增加过滤器 <filter string="库龄超30 ...
- odoo导入功能二开
原来有的导入功能相信很多小伙伴对其功能不是很满意,不过没关系,我们可以二开啊,把它的功能改造成你想要的样子,接下来让我们看看怎么办吧 例如我想把员工导入功能中添加上用户同步注册功能 首先,我要找到原模 ...
- 分享一个非常屌的eazyui二开demo
eazyui二开Demo非常吊,里面各种非常吊的样例,最喜欢的是 多文件进度条上传,一次可多选,还有流程,还有文本编辑器 非常简洁的 不像一些官网各种复杂的东西.主要为自己保留一份, 在线demo在 ...
- 关于用友 U8-UAP二开的一些事
这是关于一个刚刚接触用友U8的二次开发的一些小心得. 首先就是用友二开的论坛,http://u8dev.yonyou.com/ 当然这个论坛做得不怎么样,提出了好几个问题,都没有回复的. 以下是关于二 ...
- S-HR二开基础
检测是否某个类部署上去了:http://10.3.0.115:6888/easportal/tools/getclassurl.jsp?className=com.kingdee.eas.hr.ser ...
- Revit二开---Schemachema扩展数据
一.什么是Schema Schema是Revit扩展数据的技术关键词,revit到这里,需要对Revit二开基础有一定了解. 二.Schema架构 建立revit扩展数据第 ...
- 金蝶k/3 cloud 生产用料清单下推生成调拨单二开记录
系统默认的生产用料清单下推生成调拨单功能,是根据调拨选单数量来的,有库存和没有库存的都混在一起,导致业务人员审核调拨单的时候需要删除没有库存的分录行,严重影响工作效率. 现通过二开程序,根据生产用料清 ...
- Redash 二开 - 后端环境搭建
Redash 二开 - 后端环境搭建 一.操作系统选择 官方文档有一句话:Windows users: while it should be possible to run Redash on a W ...
随机推荐
- XCTest各种断言
XCTFail(format…) 生成一个失败的测试: XCTAssertNil(a1, format...)为空判断,a1为空时通过,反之不通过: XCTAssertNotNil(a1, forma ...
- python基础五
列表生成式 将列表data=[1,2,3]里的元素都乘2 方法一 data=[1,2,3] for index,i in enumerate(data): data[index] *=2 print( ...
- 【MySQL】 empty table and delete table.
1.MySQL生成删除满足条件的表的sql: 1 SELECT 2 CONCAT( 3 'DROP TABLE ', 4 GROUP_CONCAT(table_name), 5 ';' 6 ) AS ...
- Python之路,Day4 - Python基础4
一.函数 (一)背景提要 现在老板让你写一个监控程序,监控服务器的系统状况,当cpu\memory\disk等指标的使用量超过阀值时即发邮件报警,你掏空了所有的知识量,写出了以下代码 1 2 3 4 ...
- Java的RMI远程方法调用实现和应用
最近在学习Dubbo,RMI是很重要的底层机制,RMI(Remote Method Invocation)远程方法调用是一种计算机之间利用远程对象互相调用实现双方通讯的一种通讯机制.使用这种机制,某一 ...
- Asp.Net MVC4 + Oracle + EasyUI 学习 第一章
Asp.Net MVC4 + Oracle + EasyUI 第一章 --操作数据和验证 本文链接:http://www.cnblogs.com/likeli/p/4234238.html 文章集合 ...
- Redis学习笔记(3) Redis基础类型及命令之二
1. 集合类型 集合类型与列表类型有很多相似之处,但二者的区别在于:前者具有唯一性,但不具有有序性:后者具有有序性,但不具有唯一性.集合类型的常用操作是向集合中加入或删除元素.判断某个元素是否存在等, ...
- Linux学习笔记(5)-hello world
经过三天的熟悉,我已经将教程中那些常用命令都使用了一遍,所以,从今天起,我已经从一直Linux菜鸟蜕变成了大雕-- Linux的命令无穷多,要想背下来那肯定是不可能的,所以我的目标便是混个手熟,那些常 ...
- Spring-配置bean的方法(工厂方法和Factorybean)【转】
通过工厂方法配置bean 通过调用静态工厂方法创建bean 通过静态工厂方法创建bean是将对象创建的过程封装到静态方法中.当客户端需要对象时,只需要简单地调用静态方法,而不关心创建对象的细节. 要声 ...
- Java动态、重写 理解
相关类: class A ...{ public String show(D obj)...{ return ("A and D"); } public String show(A ...