参照开发技术红皮书
NC-UAP 5.0
用友NC-UAP
2013-03-27
目录
第一章前言 (1)
第二章参照总体结构图 (2)
1.结构图 (2)
2.代码结构 (2)
2.1nc.ui.bd.ref (2)
2.2nc.ui.bd.ref.busi (3)
2.3nc.ui.pub.beans (3)
2.4nc.vo.bd.ref (3)
2.5nc.vo.bd.refdatatemp (3)
2.6nc.bs.bd.ref (4)
2.7nc.itf.uap.busibean (4)
第三章系统默认参照使用介绍 (5)
第四章自定义参照开发规范 (6)
1.参照界面的定义: (6)
2.参照Model的定义 (6)
2.1表型参照 (6)
2.2树型参照设置 (7)
2.3树表型参照 (8)
3.覆盖参照抽象Model中的方法的注意事项 (9)
第五章参照客户化功能的设定 (10)
1.UIRefPane中的设置: (10)
2.refModle中的设置 (10)
3.注意事项 (11)
第六章参照值返回与事件处理 (12)
第七章V5 最新变化说明 (13)
1.新增参照节点名称常量接口 (13)
2.会计期间默认参照的变化 (13)
3.控制参照某列数据的显示格式接口 (13)
第一章前言
统一提供各种基础档案的参照录入。
?提供定位,过滤,模糊查询,高级查询等功能。
?提供自定义参照定义功能。
系统提供表型、树型、树表型参照。
表型:以表格形式显示。
树型:只能是有级次关系的档案,以树型显示。
树表型:对于有分类的档案,一般也是大数据量的档案例,如存货档案。左树是分类树,右表是该分类下的数据。
第二章参照总体结构图
1. 结构图
2. 代码结构
2.1nc.ui.bd.ref
定义接口IRefModel、IrefTreeModel、IrefGridTreeModel、IrefUI、IrefUINew、IrefQueryDlg、IrefQueryDlg2
AbstractRefModel implements IRefModel
AbstractRefTreeModel――>AbstractRefModel implements IRefTreeModel
AbstractRefGridTreeModel――>AbstractRefTreeModel implements IRefGridTreeModel AccBankDefaulteRefModel――>AbstractRefModel
AreaclDefaultRefModel――>AbstractRefTreeModel
InvmandocDefaultRefModel――>AbstractRefGridTreeModel
UFRefColumnsDlg――>nc.ui.pub.beans.UIDialog
UFRefGridTreeUI――>nc.ui.pub.beans.UIDialog implements IRefUINew AbstractRefDialog—〉nc.ui.pub.beans.UIDialog implements IRefUINew UFRefGridUINew――> AbstractRefDialog
UFRefTreeUINew――> AbstractRefDialog
UFRefManage 参照控件控制参照对话框的中介类
nc.ui.bd.ref.IRefColDispConverter 参照列特殊显示格式装换接口类
IBusiType 参照业务信息定义
2.2nc.ui.bd.ref.busi
具体业务参照,也是Uap默认提供的参照
2.3nc.ui.pub.beans
RefPaneIconFactory参照ImageIcon工厂
UIRefPane 参照控件类
UIRefPaneTextField 参照控件的组成部分,文本框
2.4nc.vo.bd.ref
DocSealWherePartMng根据参照refNodeName取得参照的封存条件工具类IFilterStrategy参照过滤数据策略。参照提供设置一些主键,参照的查询结果按策略
过滤的功能
IRefAutoMatchMode参照模糊匹配模式
RefColumnDispConvertVO参照列数据特殊显示配置VO
RefcolumnVO参照栏目业务对象子对象
RefException参照异常类
RefIconConfigVO参照树显示图标配置VO
RefNodeNameConst UAP默认参照常量
RefQueryResultVO参照数据,参照栏目信息复合查询VO
RefQueryVO参照查询数据信息VO
ReftableVO 参照栏目业务对象主对象
RefVO_mlang 参照多语言自动翻译配置对象
2.5nc.vo.bd.refdatatemp
RefdatatempVO 参照临时表数据VO
2.6nc.bs.bd.ref
RefImpl 参照数据查询实现类
ReftableImpl 参照栏目数据查询实现类
2.7nc.itf.uap.busibean
IRef 参照数据查询服务接口
IRefForTempTable 参照从临时表查询接口,需要支持事务处理IReftable 参照栏目查询服务接口
第三章系统默认参照使用介绍
NC系统中存在大量的基本档案,与之对应,每种基本档案都配置了相应的参照。使用方法:
UIRefPane是一个控件
UIRefPane ref = new UIRefPane();
Ref.setRefNodeName(nc.vo.bd.ref.RefNodeNameConst.DEPTDOC);//部门档案
这样就定义好了一个部门档案参照。
系统提供的RefNodeName请参见nc.vo.bd.ref.RefNodeNameConst
第四章自定义参照开发规范
参照支持自定义参照的定义。
自定义参照可以定义参照的UI界面,也可以只定义参照的Model
1. 参照界面的定义:
参照分为表型、树型、树表型参照三种。继承了UIDialog并实现了IRefUINew接口。
程序员可自定义参照界面,最好也继承UIDialog,须实现IrefUINew接口。
2. 参照Model的定义
对应与3种类型的参照,Model也有3个抽象类:
表型:AbstrarctRefModel
树型AbstractRefTreeModel
树表型AbstractRefGridTreeModel
要自定义不同类型参照Model ,请继承相关的抽象类。并设置如下属性:
2.1表型参照
(黑体为必设项)
i..如果需要distinct短语,或其他断语:
setStrPatch("distinct");
如果需要公司主键(一定在setWherePart前执行,对于默认参照在设置pk_corp
后,还须重新设定setWherePart):
setPk_corp(公司主键) ;
setWherePort(……);
设置参照名(弹出窗口标题),可以和RefNodeName不同:
setRefTitle(参照名)
ii.设置select子句:1
//可显示字段
setFieldCode(new String[] { "bd_psndoc.psncode", "bd_psndoc.psnname","bd_deptdoc.deptname" });
//不可显示字段――如主键
setHiddenFieldCode(new String[]{"pk_corp"});
iii.中文名称――表头和栏目用
setFieldName(new String[](“人员代码”,”姓名”,”部门名称”));
iv.设置from子句:
setTableName("bd_psndoc left outer join bd_deptdoc on bd_psndoc.pk_deptdoc=bd_deptdoc.pk_deptdoc ");
v.设置where子句:
setWherePart(" bd_psndoc.pk_corp='" + getPk_corp() + "'");
注:需要根据不同的公司返回查询,参数中用getPk_corp()方法。
在原setWherPart的基础上追加where子句:
addWherePart();
注:每次都从原where中追加,不允许连续追加where子句。
vi.设置group子句:(默认为空)
setGroupPart("");
vii.设置order子句:(默认为第一列)
setOrderPart("");
viii.前几列在表中显示:(默认前2列)
setDefaultFieldCount(2);
ix.设定主键字段:主键字段必须在setHiddenFieldCode或setFieldCode已设定setPkFieldCode("bd_psndoc.pk_psndoc");
x.设定界面输入字段:(默认为第一列)
setBlurField(字段名);
xi.设定参照代码字段:(默认为第一列)
setRefCodeField(字段名);
xii.设定参照名称字段:(默认为第二列)
setRefNameField(字段名);
xiii.设置助记码字段名:
setMnecode(字段名数组)
xiv.设置组织类型和组织主键,对于主体账簿类型的档案适用如(会计科目)setPk_GlOrgBook(组织类型, 组织)
2.2树型参照设置
(同表型参照的设置,表型参照的必输部分一定要输入。树形设置group子句无效) 指定编码规则(如果为空,则按上下级关系构造树必须指定父字段,子字段):setCodingRule("222222");
指定父字段名:
setFatherField(字段名)
必输一项,否则没有分级规则。
指定子字段名:
setChildField(字段名)
指定根名(默认和参照名相同):
setRootName(根名);
2.3树表型参照
(黑体为必设项)
设置树数据
i.setClassFieldCode(字段名数组);
ii.setClassFieldName(表名)
iii.setClassWherePart(where子句)
iv.SetOrderPart(Order子句)
v.SetClassJoinField(要和表关联的字段名)
vi.SetClassDefaultFieldCount(数值)(树节点显示字段默认为2)
vii.指定定编码规则:如果为空,按上下级关系
setCodingRule("222222");
viii.指定父字段名
setFatherField(字段名)
ix.指定子字段名
setChildField(字段名)
10.指定根名
setRootName(根名);
设置表数据
(同表型参照的设置,表型参照的必输部分一定要输入。下面只列出不同的属性)
i.设定和树节点数据关联的字段
setDocJoinField(字段名)
ii.设置精确匹配:默认精确匹配(树上选择一个节点后,查询表数据是否为精确匹配。)
setExactOn(boolean)
iii.设定读表的树节点最小级次:默认1(末级节点一定会读表数据,其他情况要大于等于该值是才读数据)
setExpandLevel(int)
如果你已经定义好了UI和Model部分,恭喜你,自定义参照已基本定义完成。
使用时在进行如下设置即可:
UIRefPane ref = new UIRefPane();
Ref.setRefUI(自定义界面,一般不需定义用系统默认的);
Ref.setRefModel(自定义参照模型)
3. 覆盖参照抽象Model中的方法的注意事项
nc.ui.bd.ref.AbstractRefModel.getData()
参照默认是按照设定好的Sql语句到后台查询数据,如果想自定义取数,可以覆盖getData() 方法。返回自定义数据即可。但要注意,参照的数据默认情况下是有内存级缓存的,缓存的key为AbstractRefModel.getRefSql()的值,如果该值为null,那参照系统将不会缓存数据。如果要使用参照内存缓存,getRefSql()要有非null的值。
第五章参照客户化功能的设定
在初始化一个参照以后,即在本文三或四段落中的红色部分定义好后,无论是系统默认参照还是自定义参照,才可以定制参照的其他功能。
1. UIRefPane中的设置:
setToolTipText(String);//设置参照控件的toolTip
setMaxLength(int);//设置输入字符的最大长度,默认20;
setEditable(boolean);//设置参照是否可编辑
setEnabled(boolean);//设置参照是否可以使用
setDelStr(String);//设置参照输入框不能输入的字符串。
setColor(Color);//设置参照输入框的背景色。
setCacheEnabled(boolean);// 是否使用缓存
setMultiSelectedEnabled(boolean);//是否允许多选择
setAutoCheck(boolean);//是否自动解析输入的参照数据
setButtonFireEvent(boolean);//按钮选择数据后是否触发ValueChanged事件
setNotLeafSelectedEnabled(Boolean);//非末级节点是否可选择(对树参照有效)
setIsCustomDefined(boolean);//是否为用户自定义参照模型
setIncludeSubShow(boolean);//树型参照是否包含下级复选框是否显示
setMultiCorpRef(boolean);//树表参照是否显示公司选项(在参照中动态切换公司)setTreeGridNodeMultiSelected(boolean);//树表参照是否允许选择不同树节点下的数据。
2. refModle中的设置
setUseDataPower(boolean) ;//设置参数是否自动关联基本档案数据权限
setSealedDataShow(boolean);//设置封存数据是否显示
setRefQueryDlgClaseName(String);//设置参照查询类名称(参照的查询功能)
setLocQueryEnable(boolean);//树表参照,在启用查询功能后,是否启用定位查询功能setDynamicColClassName(String);//是否为动态列参照。
setFormulas(String[][] formulas);//设置公,用于参照内容转换;
setDispConvertor(java.util.Hashtable newDispConvertor);//用于参照内容转换的影射表setMatchField(String);//设置参照setpk时匹配的字段
getRefVO_mlang();//为多语言添加此方法, 请覆盖此方法返回要翻译字段数组。详见DefaultRefModel_multiLang
addWherePart(String);参照在运行中动态添加过滤条件,每次在原始的WherePart上添加
对参照数据按指定主键数组过滤。
参数说明:newM_filterPks 要过滤的主键数组
filterStrategy 过滤策略
IFilterStrategy.INSECTION = 0; //参照数据集与过滤数据集的交集
IFilterStrategy. REFDATACOLLECT_MINUS_INSECTION = 1; //参照数
据集减参照数据集与过滤数据集的交集AbstractRefModel.setFilterPks(https://www.doczj.com/doc/8515408269.html,ng.String[] newM_filterPks, int filterStrategy)
3. 注意事项
1.参数区分大小写。
2.设置字段列表和字段时(主键、编码、名称等),注意保持一致。(同时加别名或不加别名)。
3.设置公司主键(setPk_corp)后必须设置setWherePart语句。默认参照建议用setRefNodeName(参照名,公司主键),然后设置/追加where子句
4.where语句开头不要包含where短语。
第六章参照值返回与事件处理
在UIRefpane 中
i.照编码:getRefCode和getRefCodes
ii.参照名称:getRefName和getRefNames
iii.参照主键:getPK和getPKs
iv.参照VO:getVO和getVOs (必须实现convertToVO (Vector)方法才能获取,在参照model中实现)
v.任意列:getValue(字段名)和getValues(字段名)(字段名必须在字段列表中)
参照支持属性变化事件。
i.如果需要监听UIRefPane事件,需要实现ValueChangedListener接口,
ii.加入监听addValueChangedListener(ValueChangedEvent)
iii.值改变将触发ValueChangedEvent
第七章V5 最新变化说明
1. 新增参照节点名称常量接口
nc.vo.bd.ref.RefNodeNameConst
参照初始化举例:
UIRefPane refPane = new UIRefPane();
//公司目录参照。
refPane.setRefNodeName (ref.RefNodeNameConst .CORP)
2. 会计期间默认参照的变化
关于会计期间参照的修改。
最新的需求:2006-08-07会计期间参照由表形改为树表形。
实现:左树为默认会计期间方案下的会计年度,右表为该会计年度下的会计月份。
存在的问题:
以前,会计期间参照的使用者通过设置参照的setWherePart来改变会计期间方案,现在改为树表,使用者要通过setClassWherePart来改变会计期间方案。对于只使用默认会计期间方案的地方不用修改。
修改方法:
((AbstractRefTreeModel)UIRefPane.getRefMole()).setClassWherePart("
PK_ACCPERIODSCHEME = '"+pk_accperiodscheme+"' ")
3. 控制参照某列数据的显示格式接口
如果要控制某列每行数据的显示格式,如控制数量列的显示精度。
可以实现nc.ui.bd.ref.IRefColDispConverter接口。已实现的例子可以参考nc.ui.bd.ref.busi.AccidDefaultRefModel