用友NC二次开发一些经验以及处理的问题
来源:互联网 发布:知乎图标矢量图 编辑:程序博客网 时间:2024/04/28 09:28
1. 参照开发
系统参照的用法
UIRefPane ref = new UIRefPane();
Ref.setRefNodeName(nc.vo.bd.ref.RefNodeNameConst.DEPTDOC);
nc.ui.bd.ref.IBusiType这个类里定义了参照对应的具体类
自定义参照
自己定义的参照类一般都继承自nc.ui.bd.ref.AbstractRefModel这个抽象类
下面列举一些常用的方法:
public String[] getFieldCode() // 返回参照字段对应的表字段编码
public String[] getFieldName() //返回参照字段对应的显示名称
public String getPkFieldCode() //返回主键字段编码
public String getRefTitle() //返回参照名称
public String getTableName() //返回查询的表名称,可以是表连接语句
public String[] getHiddenFieldCode() //返回参照的隐藏字段
public int getDefaultFieldCount() //返回参照的默认字段数量
public String getWherePart() //返回查询条件
如果需要实现一些特殊的参照,比如树结构的参照,则应该继承AbstractRefTreeModel类
2. ClientUI类常用方法
protected ManageEventHandler createEventHandler() //返回UI的事件处理类
protected AbstractManageController createController() //返回UI画面的控制类
protected BusinessDelegator createBusinessDelegator() //返回UI的业务处理类
protected void initSelfData() //初始化UI界面,比如设置精度
protected void initEventListener() //初始化单据监听,比如:BillCardBeforeEditListener
public abstract void setDefaultData() throws Exception //设置界面默认数据
3. 多表的树结构(比如说,显示部门下的人员)
NC的树结构一般都是单表,那么parentid在数据表里也是对应的主键值。那么多表的时候只需在返回数据vo的时候, 手动把父节点的数据添加进去就可以了。
比如说:部门和人员的树结构
在自己定义的TreeData中的getTreeVO方法中:
Java代码 复制代码 收藏代码
1.public SuperVO[] getTreeVO() {
2. PsndocVO[] result = null;
3. DeptdocVO[] deptdocvos = null;
4. try {
5. BusinessDelegator business = new BusinessDelegator();
6. String sql = " isnull(dr,0)=0";
7.
8. result = (PsndocVO[]) business
9. .queryByCondition(PsndocVO.class, sql);
10. deptdocvos = (DeptdocVO[]) business
11. .queryByCondition(DeptdocVO.class, null);
12.
13. } catch (Exception e) {
14. e.printStackTrace();
15. }
16. PsndocVO[] results = new PsndocVO[result.length + deptdocvos.length ];
17. for (int i = 0; i < deptdocvos.length; i++) {
18. PsndocVO vo = new PsndocVO();
19. vo.setPk_psndoc(deptdocvos[i].getPk_deptdoc());
20. vo.setPsncode("");
21. vo.setPsnname(deptdocvos[i].getDeptname());
22. results[i] = vo;
23. }
24. for (int i = 0; i < result.length; i++) {
25. results[deptdocvos.length + i] = result[i];
26. }
27. return results;
28. }
完整的TreeData代码:
Java代码 复制代码 收藏代码
1.public class TreeData implements IVOTreeDataByID {
2.
3. public String getIDFieldName() {
4. return "pk_psndoc";
5. }
6. public String getParentIDFieldName() {
7.
8. return "pk_deptdoc";
9. }
10.
11. public String getShowFieldName() {
12.
13. return "psncode,psnname";
14. }
15.
16. public SuperVO[] getTreeVO() {
17. PsndocVO[] result = null;
18. DeptdocVO[] deptdocvos = null;
19. try {
20. BusinessDelegator business = new BusinessDelegator();
21. String sql = " isnull(dr,0)=0";
22.
23. result = (PsndocVO[]) business
24. .queryByCondition(PsndocVO.class, sql);
25. deptdocvos = (DeptdocVO[]) business
26. .queryByCondition(DeptdocVO.class, null);
27.
28. } catch (Exception e) {
29. e.printStackTrace();
30. }
31. PsndocVO[] results = new PsndocVO[result.length + deptdocvos.length ];
32. for (int i = 0; i < deptdocvos.length; i++) {
33. PsndocVO vo = new PsndocVO();
34. vo.setPk_psndoc(deptdocvos[i].getPk_deptdoc());
35. vo.setPsncode("");
36. vo.setPsnname(deptdocvos[i].getDeptname());
37. results[i] = vo;
38. }
39. for (int i = 0; i < result.length; i++) {
40. results[deptdocvos.length + i] = result[i];
41. }
42. return results;
43. }
44.
45.}
如果涉及到表增加,则只需按照添加部门那样增加一个for循环即可。同时把第一个循环中的parentid改为新增的表id。 在这里parentid指的是pk_deptdoc
4. 从后台去掉自定义项引用
NC提供自定义项的引用,也就是备用字段的使用,但是引用完了以后不能修改,如果不想使用了又不能删除。只能从后 台解除引用。
bd_defdef 自定义项定义表,先从这个表中找到定义的自定义项记录pk_defdef
select pk_defdef from bd_defdef where defname='';
这里的名字即单据上显示的名称
然后从bd_defquote引用表中去掉pk_defdef内容而pk_defused表示表中字段
select bd_defquote.rowid,bd_defquote.* from bd_defquote where pk_defdef='';
注意在解除引用后,需要将被引用字段值置空,因为重新引用自定义项时,如果字段值不为空将引用失败,原因是自定义 项引用时默认会检查字段值是否为空。
5. 显示自定义项
Java代码 复制代码 收藏代码
1.private void dealDefShow(){
2. String [] strDefObjs=new String[] {"ARAP单据头"};
3. String [] strPrefix=new String[] {"zyx"};
4. try {
5. new ManageDefShowUtil(this.getBillCardPanel(), this.getBillListPanel()).showDefWhenRef(strDefObjs,strPrefix, true);
6. } catch (Exception e) {
7. Logger.error(e.getMessage(), e);
8. }
9. }
6. 后台获得登录日期
Java代码 复制代码 收藏代码
1.String date = InvocationInfoProxy.getInstance().getDate();
2.UFDate loginDate = new UFDate(Long.parseLong(date));
7. NC主画面的头部信息位置。
1. 注销、快速切换、日志、帮助按钮的代码在 nc.ui.sm.desktop.SysFuncBtnPanel
2. 未读消息、代办事务、预警消息的代码在 nc.ui.sm.desktop.MsgCenterInfoPnl
3. 公司+用户+日期的代码在 nc.ui.sm.desktop.DesktopTopBar
4. 快捷码的代码在 nc.ui.sm.desktop.QuickCodePanel
5. 配置文件在nchome\modules\uap\META-INF\clientplugins\uap.plugin
8. 参照相关的类
参照事件类:nc.ui.bd.ref.RefModelHandlerForClient
主要方法:getRefTableVO(String pk_corp)
参照显示的列标题:nc.vo.bd.ref.RefcolumnVO
获得名称方法:getFieldshowname()
系统参照查询:nc.bs.bd.ref.ReftableImpl
方法:findByNode(String refNodeName, String pk_corp)
9. 查询模板设置默认值的系统变量。
#Sys_Account#,
#Sys_Year#,
#Sys_Month#,
#Sys_Date#,
#Sys_Operator#,
#Sys_department#,
#Sys_CurrCorp#
- 用友NC二次开发一些经验以及处理的问题
- 用友NC二次开发问题汇总【转】
- [转] 用友NC二次开发问题汇总【转】
- 用友的一些问题
- 承接用友NC ERP与外系统接口以及二次开发外包
- nc二次开发问题集锦
- NC二次开发问题集锦
- 用友NC查询引擎另类处理
- nc二次开发问题集锦(zt)
- 用友nc
- 产品问题处理的一些经验
- 用友U8与NC的区别?
- 用友NC开发本地启动客户端时界面空白问题的解决
- 用友二次开发
- nc二次开发问题集(zt)
- python的一些问题以及处理思路
- 关于二次开发用友项目的一点体会
- 视频处理的一些经验
- 关于:socket阻塞、非阻塞,同步、异步、I/O模型
- 0-1背包问题:
- Spring配置文件总结
- Python语言解决用户评论标签匹配
- C++中的map
- 用友NC二次开发一些经验以及处理的问题
- GDI+ 填充背景时,很多时候不起作用,GDI、GDI+配合运用
- Java按照List内存储的对象的某个字段进行排序
- JAVA存取PG大对象类型OID数据
- 关于nosql数据库的一些研究
- 全局变量不能放在头文件当中
- [跟我学正则表达式] 5. 重复匹配
- C#利用ODP.net连接Oracle数据库的操作方法
- Linux 内核 spin_lock 和spin_unlock