概述
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. 配置文件在nchomemodulesuapMETA-INFclientpluginsuap.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_Month#,
#Sys_Date#,
#Sys_Operator#,
#Sys_department#,
#Sys_CurrCorp#
最后
以上就是有魅力台灯为你收集整理的用友NC二次开发一些经验以及处理的问题的全部内容,希望文章能够帮你解决用友NC二次开发一些经验以及处理的问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复