首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

用友NC二次开发一些经验以及处理的有关问题

2012-10-29 
用友NC二次开发一些经验以及处理的问题1. 参照开发?? ? ? ?系统参照的用法? ? ? ?UIRefPane? ref new UI

用友NC二次开发一些经验以及处理的问题



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方法中:

?

public SuperVO[] getTreeVO() {PsndocVO[] result = null;DeptdocVO[] deptdocvos = null;try {BusinessDelegator business = new BusinessDelegator();String sql = " isnull(dr,0)=0";result = (PsndocVO[]) business.queryByCondition(PsndocVO.class, sql);deptdocvos = (DeptdocVO[]) business.queryByCondition(DeptdocVO.class, null);} catch (Exception e) {e.printStackTrace();}PsndocVO[] results = new PsndocVO[result.length + deptdocvos.length ];for (int i = 0; i < deptdocvos.length; i++) {PsndocVO vo = new PsndocVO();vo.setPk_psndoc(deptdocvos[i].getPk_deptdoc());vo.setPsncode("");vo.setPsnname(deptdocvos[i].getDeptname());results[i] = vo;}for (int i = 0; i < result.length;  i++) {results[deptdocvos.length + i] = result[i];}return results;}

?

?完整的TreeData代码:

?

public class TreeData implements IVOTreeDataByID {public String getIDFieldName() {return "pk_psndoc";}public String getParentIDFieldName() {return "pk_deptdoc";}public String getShowFieldName() {return "psncode,psnname";}public SuperVO[] getTreeVO() {PsndocVO[] result = null;DeptdocVO[] deptdocvos = null;try {BusinessDelegator business = new BusinessDelegator();String sql = " isnull(dr,0)=0";result = (PsndocVO[]) business.queryByCondition(PsndocVO.class, sql);deptdocvos = (DeptdocVO[]) business.queryByCondition(DeptdocVO.class, null);} catch (Exception e) {e.printStackTrace();}PsndocVO[] results = new PsndocVO[result.length + deptdocvos.length ];for (int i = 0; i < deptdocvos.length; i++) {PsndocVO vo = new PsndocVO();vo.setPk_psndoc(deptdocvos[i].getPk_deptdoc());vo.setPsncode("");vo.setPsnname(deptdocvos[i].getDeptname());results[i] = vo;}for (int i = 0; i < result.length;  i++) {results[deptdocvos.length + i] = result[i];}return results;}}

?

? ?如果涉及到表增加,则只需按照添加部门那样增加一个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. 显示自定义项

?

?

private void dealDefShow(){String [] strDefObjs=new String[] {"ARAP单据头"};    String [] strPrefix=new String[] {"zyx"};    try {new ManageDefShowUtil(this.getBillCardPanel(), this.getBillListPanel()).showDefWhenRef(strDefObjs,strPrefix, true);} catch (Exception e) {Logger.error(e.getMessage(), e);}}
?

?

?

6. ?后台获得登录日期

?

String date = InvocationInfoProxy.getInstance().getDate();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#

?

?

?

?

?

?

热点排行