文档介绍:该【NCV5-自定义技术红皮书(精) 】是由【秋江孤影】上传分享,文档一共【20】页,该文档可以免费在线阅读,需要了解更多关于【NCV5-自定义技术红皮书(精) 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。:.
自定义技术红皮书
NC-
用友NC-UAP
2013-04-15
目录
第一章
前言....................................................................................1第二章
自定义项引用节点展现......................................................21.
实现方式...................................................................................................22.
需要产品组配合的工作...........................................................................
预制脚本.....................................................................................................
程序中向bd_defused表中插入数据..............................................................3第
三章
自定义项引用校验..............................................................41.
V5以前版本自定义项引用的检查的注册机制及其存在的弊端.........
自定义项引用节点修改某个自定义项的引用关系的校验:...........................4
删除校验.....................................................................................................42.
V5中单据或档案自定义项使用了统计型自定义项后的检查分析.....
:.
应用场景.....................................................................................................
解决方案.....................................................................................................53.
总结:需要产品组配合的工作...............................................................
提供预制脚本..............................................................................................
删除以前版本中在bd_ref_relation表中预置的脚本......................................7第
四章
自定义项使用后的显示......................................................81.
通用情况...................................................................................................82.
特殊情况和特殊需求...............................................................................83.
工具类设计...............................................................................................84.
工具类使用说明.......................................................................................
卡片界面引用自定义项的显示:..................................................................
列表界面引用自定义项的显示....................................................................
管理界面引用自定义项的显示....................................................................105.
使用举例.................................................................................................106.
特殊情况的处理.....................................................................................
查找自定义项的引用情况...........................................................................
初始化自定义项.........................................................................................
显示引用了的自定义项...............................................................................11第五章
:.
自定义项使用后的打印....................................................121.
统计型自定义项打印涉及的修改.........................................................122.
把统计型自定义项的主键翻译成名称的方法.....................................123.
使用举例.................................................................................................124.
类图.........................................................................................................13第六章
自定义项档案的升级API.................................................141.
API介绍.................................................................................................142.
本升级方案的前提.................................................................................143.
升级方案.................................................................................................
普通情况的升级.........................................................................................
张表中保存了两种或多种数据的单据或档案的升级.................................15
..............................15
第七章
附录..................................................................................
JAVADOC.............................................................................16
第一章前言
自定义项管理包括定义自定义项、引用自定义项及自定义项档案定义。主要解
决系统业务单据中已有项目不能满足实际需要时,可以在系统中设置自定义项,并
在单据中引用。较之以前版本,,具体体
现在如下几个方面:
:.
●任何档案的自定义项都可以引用基本档案、自定义项档案。例如:存货管理
档案的自定义项1可以引用自定义项档案、也可以引用任何基本档案(包括存货管
理档案它自己)。
●档案或单据的自定义项使用后,如果使用的是统计性自定义项,则保存的都
是被引用档案的主键。例如:存货的自定义项1引用了客商管理档案,则存货的自
定义项1中保存的是客商管理档案的主键。(以前保存的可能是主键、也有可能是
名称)。
●自定义项引用节点的展现方式的改变。
我们提供了一些API或注册机制以帮助开发人员快速实现上述这些改变。本
文的目的是对这些API或者注册机制进行详细的描述,以供开发人员参考。
第二章自定义项引用节点展现
本章指的是自定项引用节点的界面展现方式的改变,着眼于实现V5的如下新
需求:
修改该档案的展现方式。完全列表的方式不便于应用,修改为左边是进行自定
义项引用的对象树(都是平级的)(如果可能按照产品模块构造树),右侧是该对
象包含的自定义项列表。[需求条目:B05090109][解决版本:V5]
为了实现自定义项引用的展现方式,并且“按照产品模块构造树”,决定在
bd_defused表中增加一个字段fun_code,其数据类型是varchar(60。用来存储某功
能节点所属模块的功能节点号。
例如:客商档案和存货档案都是数据客户话的基本档案,所以客商和存货的自
定义项引用在bd_defused表中的预制数据的fun_code的值都是“1008”(基本档案
的功能节点号是1008)
:.
凡是在安装盘中对表bd_defused进行预制数据的脚本都需要修改,添加对该
表新加字段fun_code的初始值,其值是功能节点所属模块的功能节点号。
例如:
原预制脚本:
insertintobd_defused(pk_defused,objcode,objname,defnum,freenum,pk_corp,ts,dr
values('secent00000000000001','secent','结算中心',20,0,null,'2001-09-17
13:57:39',0
修改后预制脚本(由于“结算单位”是属于“基本档案”,其功能节点号是:
1008):
insertintobd_defused(pk_defused,objcode,objname,defnum,freenum,pk_corp,
ts,dr,fun_codevalues('secent00000000000001','secent','结算中心',20,0,null,'2001-09-
1713:57:39',0,‟1008‟
现在只发现基本档案中的“项目档案”存在此种用法,如果还有其他产品组存在
此种用法,请添加新加字段的预制值。
第三章自定义项引用校验
本章讲的自定义项引用的校验主要指如下两方面:
其一,自定义项引用节点修改某个自定义项的引用关系的校验:
:.
例如:客商档案的自定义项1引用了自定义项档案“明族”,并且在某条具体的
客商档案数据中的自定项1保存了具体的某个民族(如:汉族),如果在自定项档
案中又想把客商档案的自定义1修改为自定义项档案“学历”,这就会在客商档案表
中导致错误数据,所以要做此校验。
其二,就是删除校验。
:以前版本中不管
具体档案或单据中是否真正使用了该引用的自定义项,在自定义项引用节点中都没
法修改该单据或档案的自定义项引用。
V5以前采用的是使用向表bd_ref_relation表中注册默认脚本的方式来实现
的。
例如:客商管理档案有30个自定义项(def1..def30),按照以前的做法,就
往bd_ref_relation表中注册了30条语句,认为被引用表都是bd_defdoc。
这种默认注册机制存在以下弊端:
单据或档案自定义项引用后保存名称
这种情况下,以前的版本没有做引用检查。例如:客商的自定义项1引用了自
定义项档案“民族”,某条具体客商记录中的def1保存了“汉族”这个民族自定义项
档案内容的名称,则在删除自定义项档案“民族”的档案内容“汉族”时,是检查不到
客商的自定义项1已经使用过它的,从而导致删除了不该删的数据。
单据或档案自定义项引用后保存主键
:.
沿用上面的例子:客商的自定义项1引用了自定义项档案“民族”,某条具体客
商记录中的def1保存了“汉族”这个民族自定义项档案内容的主键,则在删除自定
义项档案“民族”的档案内容“汉族”时,可以通过自定义项引用检查,得知客商的
def1已经使用了该自定义项档案内容,不能删除该自定义项档案。
由于向表bd_ref_relation表中注册的信息太多,会导致性能低下
例如:客商管理档案有30个自定义项(def1..def30),按照以前的做法,就
往bd_ref_relation表中注册了30条语句,认为被引用表都是bd_defdoc(现在这种
认为是错误的)!而在实际情况中,这30个自定义项极为少数的情况能都用上
(即使用上也不一定都是统计型的),但是在引用检查时就需要检查30次了。
如果引用的不是自定义档案,而是引用基本档案,则以前没有办法做校验例
如:如果客商档案通过自定义的方式引用的存货档案,根据以前的机制,在删除某
存货档案时,是没法去校验该存货是否被某个客商档案引用了。
基于V5自定义项档案部分的最新情况,也为了解决单据或档案的自定项使用
了统计型自定义项后引用检查存在的问题(如果引用的是基本档案,则不能检查;
检查的时候性能低下)。我们有了如下的解决方案:按需注册正确的引用脚本。
“AAAA”,让他引用“存货管理档案”
,让客商管理档案的自定义项1,引用“AAAA”,此
时在bd_ref_relation表中注册一条信息(如果修改成其他的统计型自定义项,
也要相应的修改,如果修改成非统计型自定义项档案,择需要删除
:.
“AAAA”,让他引用“民族”(自定义项档案),则
修改B在表bd_ref_relation中插入的注册信息(
如果已经被引用了的统计型自定义项也不能修改了,则不需要做此处理)
为了实现上述引用场景,我们主要需要解决获取“引用表名”、“被引用表名”、
“被引用字段名”的问题。
由于自定义项引用表中,只能知道某个选择的自定义项引用记录是属于哪个
档案的(例如客商管理档案),具体哪个档案有哪几个表并不清楚,所以我们
新加一个表:bd_defcsttblnme
:.
我们需要在安装盘中提供这个表的预制数据。需要产品组提供本表的预制脚
本。一个档案或单据,可能会牵涉到多个表,例如,供应链单据头,可能牵涉到多
个表,则需要在此表中预制多条数据。
可以通过这个自定义项引用的自定义档案所对应的bdinfo中获取。
自定义项定义处,统计型的自定义项定义,如果被引用,则不能修改(以前是
提示“请谨慎修改!”);
自定义项引用处,如果引用的是统计型自定义项定义,则判断该统计型自定义
项定义是否参照了档案,如果没有,则报错“您引用的是统计型自定义项,请先关
联档案后在引用!”(以前没有这种判断)
:.
:需要产品组配合的工作
本工作需要产品组做的事只有一件,就是提供表bd_defcsttblnme的预制脚
本。这个预制脚本的形式如下(如果checkclassname字段和fieldclassname需要预
置的话,):
Insertintobd_defcsttblnme(pk_defcsttblnme,pk_defused,tablename,
checkclassname,fieldclassname,dr,tsvalues(„BD000000000000000001‟,‟
sm000000000000000003‟,‟bd_cubasdoc‟,0,null,null‟2006-06-0813:57:39‟
由自定义项引用引起的一些在表bd_ref_relation中的预制脚本需要删除,这些
脚本可以用如下一条语句来找出:
select*frombd_ref_relationwhere(referencingtablecolumnlike'def_'or
referencingtablecolumnlike'def__'andreferencedtablename='bd_defdoc'
第四章自定义项使用后的显示
本章介绍利用单据模板开发的单据或者档案使用了自定义项后的显示问题。具
体介绍程序员经常使用的API。
对于用单据模板来开发UI界面的单据(或基本档案)使用自定义项,一般都
需要做如下几件事:
●该单据的自定义项引用是否引用了自定义项定义;
●如果引用了,根据自定义项定义的数据类型,在界面上显示不同的控件;●
不同的数据类型,分别需要进行如下的处理:
:.
✧日期:日期参照
✧备注:字符录入框(需要限定可录入长度,为100)
✧统计:参照
✧数字:数字录入框(需要判断小数位数和录入长度);
另外,在研究基本档案各个功能节点的自定义项引用情况发现有如下一些比较
特殊的情况:
单据模板上显示自定义项一般指的是在卡片界面、列表界面显示自定义项。同
时卡片和列表的表头和表体都有可能有自定义项。表头自定义项和表体自定义项都
可能来自多个自定义项引用,例如:存货管理档案的表头自定义项来自“存货管理
档案”和“存货档案”、客商管理档案的自定义项来自“客商管理档案”和“客商档案”
等。
在项目支持过程中,有客户提出这样的需求:存货基本档案的自定义项即时引
用了,也不是一定需要显示,只有集团用户登录的时候才需要显示。
针对如上特殊情况和需求,对单据模板使用自定义项的UI,设计了如下一些
工具类(类图):
:.
:
如果是卡片界面需要显示引用的自定义项,则需要在加载界面时插入如下代
码:
String[]strDefObjs=newString[]{"结算单位"};
String[]strPrefix=newString[]{"def"};
new
CardDefShowUtil((.showDefWhenRef(strDefObjs,
strPrefix,true;
如果不想引用就显示,而是根据单据模板自定义项的设置情况进行显示,可以
自己实现显示策略:实现接口IDefShowStrategyimpl(如果仅仅是根据单据模板原
:.
自定义项的显示情况来判断是否显示,可以使用该默认实现:
,得到具体实现的实例impl,然
后用如下方式调用:
new
CardDefShowUtil((,(strDefObjs,
strPrefix,true;
如果是列表界面,则用ListDefShowUtil,使用方法与1类似;
如果是管理界面,则用ManageDefShowUtil,是用方法与1类似;
:
如果用以上工具不能解决问题,可以按照如下步骤来分解处理自定义项引用后
的现实问题。
:.
例如:
IDefdefservice=((.lookup((;
[]defs=null;
try{
defs=("物料生产档案",getUnitCode(;}catch
(BusinessExceptione{
((,e;
}
例如:
getBillListPanel(.getBillListData(.updateItemByDef(defs,"def",true;
getBillCardPanel(.getBillData(.updateItemByDef(defs,"def",true;
例如:
(.setDefVisuabled(getBillListPanel(.getBillListData(,de
fs,"def",true;
(.setDefVisuabled(getBillCardPanel(.getBillData(,defs,
"def",true;
如果需要按照策略进行显示,则可以实像接口
,得到具体实现类的实例impl(如果仅仅是根据单据
:.
模板原自定义项的显示情况来判断是否显示,可以使用该默认实现:
,用如下方式调用:
((getBillListPanel(.getBillListDa
ta(,defs,"def",true;
((getBillCardPanel(.getBillData(,
defs,"def",true;
第五章自定义项使用后的打印
统计型自定义项统一存主键后,由于打印模板的自定义项是主键,所以需要通
过一定的方式把主键变成名称,以便于打印。
首先,要修改打印模板(默认自定义项是不打印的);
其次,修改数据源,如果自定义项存的是主键,把它翻译成名称。
原来的打印,一般都有一个数据源(
口),我们就叫orign_datasource,我写了一个装饰类,用来给原来的数据源添加
新功能(把统计型自定义项的主键翻译成名称的功能)。
,它也继承了
,同时它把原来的数据源(orign_datasource)通过
构造注入,从而达到增加需要的功能的要求。同时,该装饰类的构造还需要两个参
数::用来判断某个属性是否是自定义项,
,认为以def且长度小于等于5的表
达式,认为以vdef且长度小于等于6的表达式,认为以cdef且长度小于等于6的表
达式,;
:.
:用来获取统计型自定义项主
键对应的名称。