UAP6.3 安装盘配置与升级 关键技术说明

sy3349 2021-09-08 10:33:46

 

 

 

 

 

 

 

 

 

 

UAP6.3

安装盘配置与升级

关键技术说明

 

 

 

 

 

 

 

 

 

 

目录

1. 前言

2. 安装盘结构及配置文件说明

2.1. 安装盘结构

2.2. 产品结构

2.3. 模块结构

2.4. 配置文件说明

3. 安装升级方案说明

3.1. 安装流程

3.2. 安装检查及代码调整

4. 附录:au.xml文件示例

 

此文档为安装盘结构说明,对升级产品功能中涉及到的表结构升级、业务数据升级调用原理做介绍。通过本文档可以明白产品安装盘配置文件内容及格式,在产品使用升级功能时根据安装盘配置逐个调用脚本、类完成代码、数据库表结构、业务数据升级功能。

安装盘结构及配置文件说明

UAP安装盘分为新安装盘和补丁盘两种,新装盘会在uaphome下生成ncscript文件夹,而补丁盘则会在uaphome下生成update文件夹,新盘和补丁盘结构大同小异,下面就介绍下安装盘的结构。

安装盘结构

安装盘包含一个到多个产品,安装盘的目录结构如下图所示:

图1-1

安装盘下面可以放一个到多个产品,表现形式上为一个目录。目录的名称必须为产品的模块标识名称,如客户化为uap。

品结构

一个产品包含一个到多个模块。产品的目录结构为下图所示:

图1-2

对于一个产品来说,其配置文件(setup.ini)中的内容为:

code=10                       产品编码

name=客户化                   产品名称

version=5.0                     产品版本号

disk.type=new             是否是全新安装,new为全新安装,patch为补丁安装

previous.generation.code=10    自身依赖的前一个版本号

required.related.module=        依赖的其他产品

块结构

模块下面包含着该模块相关的多个jar包。

运行安装程序,将解压模块下的所有jar包到指定的安装根目录下,形成UAP的目录结构(如下图所示)。所以在压缩jar包时需要安装该目录结构进行压缩。

图1-3

配置文件说明

上文中,每个产品和每个模块的目录下都必须存在一个对于该产品或者模块的描述文件,即setup.ini文件。当进入UAP的安装界面后,会看见产品安装树,此树中信息就是从setup.ini中读取的。树的结构是根据产品文档结构构成的,同一节点下的子结点按照setup.ini中的编码属性进行排序。

图1-4

在产品下的setup.ini中只需要配置编码、名称、版本等属性,不需要配置脚本存放目录等信息,而模块下的setup.ini需要配置相关信息,配置文件setup.ini中配置着该模块的属性请参见下表:

配置项

含义

必选

使用范围

备注

code

模块编码

安装盘和补丁盘

 

name

模块名称

安装盘和补丁盘

 

desc

描述

安装盘和补丁盘

一般对于补丁盘,应该使用该项来描述其功能

module.stamp

模块标签

安装盘和补丁盘

该项是描述模块名称的,例如:uap,arap,安装程序通过该名称来加载升级类,如果没有配置,安装盘取其父目录名称,补丁盘取其父父目录名称

version

版本号

安装盘和补丁盘

 

disk.type

盘类型

安装盘和补丁盘

安装盘取值为new , 补丁盘取值为 patch

need.update.db

是否需要升级数据库

安装盘和补丁盘

默认值为false,该标志仅仅是在安装结束时提示用户哪些盘或补丁需要对数据进行升级。特别对那些需要升级数据库的补丁,比较有用。

need_deploy_ejb

是否需要重新部署ejb

安装盘和补丁盘

表示是否需要重新部署ejb

delete.loginjar

是否删除NC_Login_v50.jar

客户化的安装盘和补丁盘

该配置仅对客户化的安装盘有效

previous.generation.code

表明该模块以前的编码值

安装盘

该值的配置可以影响安装盘安装时模块是否是新安装还是升级安装

must.selected

模块是否必须安装

安装盘

当安装对应产品是,该模块为必选

preversion

模块自身依赖的以前的版本号

安装盘

表示该模块依赖自己的前一个版本号

required.related.module

依赖的其他的安装盘

安装盘和补丁盘

该项的配置内容必须是其他的安装盘,表明需要先安装了这些盘才能在安装本盘。格式为

[code,name,version1, version2,...]&[code,name,version1,version2,...]

注意该项配置不能和其他的盘的配置成环。

required.related.patch

依赖的其他补丁盘

安装盘和补丁盘

该项的配置内容必须是其他的补丁盘。格式为

[code,name,version1, version2,...]&[code,name,version1,version2,...]

required.sametime.install

表示同时安装的补丁

补丁盘

该项表示必须同时安装的补丁,每个补丁都需要将其他的补丁在此进行描述。

product.package

模块的代码包名称

安装盘和补丁盘

 

help.package

帮助文件的目录名

安装盘和补丁盘

 

db.create.script

数据库建库脚本包

安装盘和补丁盘

 

bill.templet.script

单据模板脚本的目录名

安装盘和补丁盘

 

query.templet.script

查询模板脚本的目录名

安装盘和补丁盘

 

report.templet.script

报表模板脚本的目录名

安装盘和补丁盘

 

print.templet.script

打印模板脚本的目录名

安装盘和补丁盘

 

sys.templet.script

默认模板脚本的目录名

安装盘和补丁盘

 

bill.type.script

单据类型脚本的目录名

安装盘和补丁盘

 

busi.type.script

业务类型脚本的目录名

安装盘和补丁盘

 

system.type.script

系统类型脚本的目录名

安装盘和补丁盘

 

subj.class.script

科目分类脚本的目录名

安装盘和补丁盘

 

voucher.templet.script

凭证模板脚本的目录名

安装盘和补丁盘

 

project.templet.script

项目模板脚本的目录名

安装盘和补丁盘

 

business.script

产品组内脚本的目录名

安装盘和补丁盘

 

menu.script

菜单脚本的目录名

安装盘和补丁盘

 

ml.script

多语言脚本的目录名

安装盘和补丁盘

 

ddc.initdata

数据字典初始化数据目录名

安装盘和补丁盘

 

hasdynamictempletdata

是否有动态模版数据

安装盘和补丁盘

 

containproductcode

包含的产品编码

安装盘和补丁盘

 

dataupdateclass

数据升级程序的类名

安装盘和补丁盘

在升级安装时执行,需实现接口nc.bs. sm.accountmanage.IUpdateAccount,

adjust.class

新安装时执行的调整类

安装盘

nc.bs.sm.accountmanage.INewInstallAdjust接口,在安装盘新安装时执行

resourceupdateclass

安装盘解压代码时执行的升级类

 

安装盘和补丁盘

nc.newinstall.update.IUpdateResource接口,在解压安装盘时执行

 

dbml.script

数据多语脚本目录名

安装盘和补丁盘

 

另:详细也可参考ConfigKey接口里的说明。

安装升级方案说明

安装流程

UAP产品安装分为以下几个步骤:

  1. 运行客户化安装盘的安装程序,把代码及数据库脚本安装到指定目录作为系统运行环境。
  2. 以超级管理员的身份进入系统管理界面,创建业务中心(5系帐套的概念),运行数据库安装脚本及初始化数据。
  3. 保存客户化版本信息和账套信息。

第一步安装代码实质就是代码解压过程,此过程无特殊之处,下文将对创建和升级业务中心,即数据库安装升级进行详细描述。

图2-1

新增(升级)业务中心时,会读取NCScript(update)中脚本,构造产品树,如下所示:

图2-2

蓝色圆点的是新安装盘,而半圆为补丁盘,安装程序会比较setup.ini中version的属性值和数据库中sm_product_version中记录的版本新旧,如果setup.ini中版本较新则该模块可以升级。

升级时会按照树结构以及setup.ini中的依赖关系来决定脚本的执行顺序。会先执行在树上靠前的模块脚本,如果该模块对其他模块有依赖,先执行被依赖的模块。

在安装盘里,初始化脚本都是insert语句,这样在执行升级操作的时候就会产生唯一键冲突的情况,UAP对此种情况有如下几种策略:

  1. 将insert语句转化为update语句,对数据进行更新;
  2. 将insert语句装化为update语句,只对部分字段更新;
  3. 忽略该语句,该表的预置数据将不会被执行;
  4. 抛出违反唯一性约束异常。

语句使用何种策略由业务人员根据业务需要制定,如果没有指定,默认按照抛异常的策略执行,策略注册到.\ierp\install\sqlTransConf目录下,该目录下直接放xml文件,不要再放文件夹,格式参考(示例文件)。

sqlTransConf.xml文件中,table标签表示对一个表策略的描述,name属性为表名称,pk为主键字段,operate表示策略,值如下:

  1. 若无值使用策略1;
  2. 若无值且存在ignorefield标签,则使用策略2,ignorefield中name属性表示不会被更新的字段名;
  3. 值为ignore表示使用策略3;
  4. 值为notranslate表示使用策略4。

sqlTransConf.xml示例文件如下所示:

<? xml version="1.0" encoding="gb2312"?>

<sqltransconf>

<table>

<table name="ntb_sp_datatype" pk="pk_obj"  />

<table name="md_module" pk="id"  >

      <ignorefield  name="versiontype" />

</table>

<table name="bd_defquote" pk="pk_defquote"  operate="ignore" />

<table name="hr_defdoc" pk="pk_hr_defdoc"  operate="notranslate" />

</tables>

</sqltransconf>

安装检查及代码调整

在很多时候,需要在安装升级过程中,只是执行脚本并不能完全解决问题,需要进行一些安装检查和代码调整,在UAP中对以下几种情况做了相应处理:

  1. 新盘升级时检查

当系统升级时,需要检查某些单据的状态等需要符合要求,否则可能会造成错误数据,升级程序提供了这个时机。请实现nc.bs.sm.accountmanage.IUAPUpdateCheck接口,升级程序会在升级UAP前调用该接口,来校验是否可以进行升级。该接口实现类注册到.\ierp\acccheck下,文件示例:

<?xml version="1.0" encoding="UTF-8"?>

<root>

<acccheckconf>

<productcode>3607</productcode >  

<module>cmp</module>  

<classes>

<name>nc.bs.cmp.updatedata.CmpUpdateCheck</name>

</classes>

</acccheckconf>

</root>

  1. 新装时代码调整

请实现nc.bs.sm.accountmanage.INewInstallAdjust接口,将实现类注册到setup.ini的adjust.class属性值(setup.ini文件说明)。该接口提供void adjust(String newVersion)方法,会在本模块安装过程都结束后调用该方法。

  1. 升级时代码调整

请实现nc.bs.sm.accountmanage.IUpdateAccount接口,该接口提供了3个方法,可以在不同时机进行代码调整。

  1. doBeforeUpdateDB(String oldVersion , String newVersion)在数据库表结构升级之前调用;
  2. oBeforeUpdateData(String oldVersion, String newVersion)在数据库表结构升级之后,数据初始化之前调用;
  3. doAfterUpdateData(String oldVersion, String newVersion)在做升级的最后阶段调用。

该接口的实现类可以注册到两个地方:

  1. 注册到setup.ini的dataupdateclass属性值(setup.ini文件说明),若如此,那么该实现类只会在升级本模块时调用;
  2. 注册到.\ierp\install\au.xml中,若如此,那么在升级每一个模块的时候都会调用。(au.xml说明见附录)。

附录:au.xml文件示例

.\ierp\install\au.xml文件示例如下:

<?xml version="1.0" encoding="gb2312"?>

<!--UAP数据库升级时默认执行的代码升级类注册

下列脚本注册一个升级代码

    <classUpdateReg>

      <index>0</index>

      <module>module</module>

      <className>className</className>

      <conds>nn, nu</conds>

    </classUpdateReg>

    

其中<index>0</index>          表明多个注册类执行的顺序

<module>module</module>      表明注册的代码类所存在的模块,如uap等,程序根据他来加载代码类

<className>className</className>  表明代码类的名称

<conds>nn, nu</conds>      表明注册的代码类执行的条件,多个条件用逗号分隔

代码执行的条件由系统指定,合法的条件如下:

nn  表示新盘新安装时执行该代码调整

nu  表示新盘升级安装时执行该代码调整类

pu  表示补丁盘升级安装时执行该代码调整类

all 表示任何条件都需要执行该代码调整类

-->

<classUpdateRegs>

  <regs>

    <classUpdateReg>

      <index>0</index>

      <module>uap</module>

      <className>nc.impl.uap.template.install.TemplateUpdate</className>

      <conds>nu</conds>

    </classUpdateReg>

  </regs>

</classUpdateRegs>

...全文
1744 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
jack990585 2021-10-04
  • 打赏
  • 举报
回复

朋友你厉害

11,850

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 非技术版
社区管理员
  • 非技术版社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧