序号生成器开发指南.doc
上传人:sy****28 上传时间:2024-09-12 格式:DOC 页数:7 大小:102KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

序号生成器开发指南.doc

序号生成器开发指南.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

序号生成器开发指南第页共NUMPAGES7页序号生成器开发指南版本变动说明Portal版本号发布时间发布人简介4.2.72010-9-24HYPERLINK"mailto:nicolzhu@gmail.com"朱叶峰简化为2种实现:SQL和VTL2010-3-27HYPERLINK"mailto:nicolzhu@gmail.com"朱叶峰在原生成器规则(sql)上支持更多格式,如python,beanshell,var格式摘要本文用于描述序号生成器的定制。序号生成器支持2种格式:SQL和VTL。场景描述普通的单据编号一般包含前缀,含日期信息(日,月,年的组合)的流水号,例如:INV2009123100001,这种通过sql,vm都能快速构造以单据属性作为编号一部分的情况下,可以通过VTL来构造,例如商品编号定义为包含品牌,大类,流水信息,可以通过$obj.get(‘DIM1_ID;CODE’)-$obj.get(‘DIM2_ID;CODE’)-@serial(5),输出为:K-DF-00013系统识别当前格式是SQL的依据是:当前格式中含有“$nextval”字符串。否则都将作为VTL格式来处理。配置说明SQL用于构造包含固定字符、日期信息、流水号这样3种简单信息的编号。在数据库中通过get_sequenceno函数也同样可以获取(注:其他方式在数据库的存储过程里都无法调用)。原理生成一条SQL语句,以vformat的内容作为select的结果,形式如:SelectvformatfromdualVformat中可以包含$nextval变量,此变量即为流水号。当前流水号规则支持按,年月日等多种方式循环的流水。如果需要控制位长则通过vformat包含sqlfunction的方式实现。可用变量$nextval按日期等信息构造的循环流水号,流水的规则通过循环方式定义格式举例‘ARM’||to_char(sysdate,'YYMMDD')||trim(to_char($nextval,'0999'))编号样式:ARM1004010003VTL编号包含记录相关属性内容,以及流水,随机等函数。例如,商品编号需要包含商品对应的类型信息的情况下,就需要通过VM方式来定义。另外,如果需要在编号规则中含有分支判断语句的情况下,也需要通过VM方式来实现。原理VTL是HYPERLINK"http://velocity.apache.org"VelocityTemplateLanguage的缩写,即HYPERLINK"http://velocity.apache.org"Velocity模板语言。HYPERLINK"http://velocity.apache.org"Velocity是由Apache组织维护的开源的java模板引擎。它允许开发人员引用JAVA代码预定义的方法,从而充分利用NDS本身开发好的类库,元数据等。VTL语法说明:HYPERLINK"http://velocity.apache.org/engine/devel/getting-started.html"http://velocity.apache.org/engine/devel/getting-started.html我们用Velocity语法来构造序号模板,主要用于与nds交互的类为nds.control.util.ShtNoVariables,在模板中通过obj来引用。关于ShtNoVariables提供的方法见后文详述。实现的过程是:单据编号生成时,可以在内存中获取当前输入的其他列的值。故首先使用当前记录的id作为编号内容参与当前记录的INSERT,UPDATE语句(称为伪编号)。在记录保存完毕(AC/AM过程执行完毕)后,根据保存内容进行编号更新(称为实际编号),为独立的UPDATE语句。在格式中,通过obj.val(ColumnLink)的方式获取当前记录的指定的字段的值,ColumnLink必须是以当前表字段起始,通过外键关联关系指向的其他关联表的字段,例如:M_DIM1_ID;CODE表示获取当前表的M_DIM1_ID字段对应的M_DIM1表上的CODE字段内容,首字段无需写当前表的名称。关联级数不限。在格式中支持常用的函数,如obj.nextval表示按指定循环方式定义的数字,详细见下文描述。这里有个特殊的定义:@serial(length)用于表示前序相同的编号下的流水。截取@serial出现前的格式定义语句,替换为实际内容作为分类内容,寻找当前表相同分类下的最大序列值。参数length,表示补0位数,例如:@ser