NC水平产品二次扩展开发指导文档.docx_第1页
NC水平产品二次扩展开发指导文档.docx_第2页
NC水平产品二次扩展开发指导文档.docx_第3页
NC水平产品二次扩展开发指导文档.docx_第4页
NC水平产品二次扩展开发指导文档.docx_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

扩展开发实现、开发模型整体介绍开发模型NC产业生态链上图中,产业链的核心是产品,产品的核心是平台,以及基于产品衍生的各种服务。水平产品依赖UAP平台;行业产品依赖水平产品;而定制产品或方案通常是基于行业产品对特定企业进行个性化的定制开发。NC产业生态链的包括各级产品研发机构、各种类型的合作伙伴、总部职能部门以及各客户经营机构(包括分公司)。分层开发用户化定制经常出现于增强或修改商业逻辑。分层结构隔离了系统中各层开发所作的修改。升级能较容易地进行,与已修改对象的潜在冲突能被识别并能被有效解决,因此,分层的研发体系能够有效减少客户拥有的总成本。而且产品升级后,用户、伙伴等开发的功能仍可以使用。产品层包含与技术伙伴的集成。最高层是User层,最低层是Business Domain层,上层的应用将覆盖下层。每一层有对应的补丁层,补丁层处理补丁、小的更新、服务集合(SP),以及一些处理紧急问题的修正文件,逻辑上说,补丁层直接在对应的开发层之上。具体每个项目/产品的层次可以是上面的层次的子集。处于以上7层之下的是基础设施层,本层是软件产品的基础层。这一层不包括商业逻辑内容,只提供产品研发的技术支撑。包括中间件、基础技术类库、流程引擎、元数据服务、多客户端开发框架等基础技术支撑。还提供了模型设计器、报表设计器、代码自动生成、代码检查工具、测试工具等开发、构造工具等辅助工具协助将进行软件研发以提高研发效率和质量保证。UAP技术层为产品研发提供了扩展机制,产品应用研发可以在UAP技术平台的基础上建立符合其应用特点的应用产品。这一层是NC研发的公共基础,是保证产业链正常运转的基础。其中预置了为支持不同产品、领域、行业产品的相应的研发规则,并提供了平台和规则的扩展机制以满足不同层次的扩展需要。领域产品级:各领域模块、组件的资产,如FI、SCM、MM 、HR等行业产品级:如建筑与房地产行业、制造业、流通服务业、金融业等本地化级:不同本地化产品的资产,如中国、欧洲、日本、香港、东南亚等业务伙伴级(认证):志远OA、英孚思为等ISV级(非认证):独立的软件开发商(客户化开发)客户级:通常指集团总部的统一定制的资产用户级:一个NC安装内的定制资产,通常在客户级要求下进行本子集团的扩展等以上七个层次构成了研发产业链,每一层可以使用低层次提供的服务,如果有特殊需要可以在本层丰富,并且可以提供给上一层使用。产业链将研发进行了分层,为了能够达到各层开发可以融合的目的,通过预制规则和支持产业链目录结构实现。研发规则为实现产业链各层工作产品能够协同工作,以及区域研发中心和总部研发中心能够协同开发,避免冲突和不兼容问题,必须制定统一的研发规则。无论从UAP技术平台到用户开发,总部研发到区域研发中心,必须遵守统一的研发规则。UAP技术平台中已经预制了全产品必须遵守的领域产品规则、行业产品规则,并且各个层次的平台上还制定了相应的扩展和补充规则,共同构成了研发的规则体系。向后兼容性为了能够支持产业链开发成果,要求在一个大的版本中,各层必须保证提供的扩展能力向后兼容。保证在其上开发的成果不会因为本层的升级受影响而无法正常使用。产品组装规划产品中组件通过应用组装形成相应的功能,能够独立增加模块、菜单和按钮。UI通过组装形成,通过个性化框架支持个性化。组件依赖规则产品研发按照业务组件组织,各业务组件之间只依赖于服务,不允许依赖其他组件的实现,保证组件的松散耦合,支持可替换性。各层定制融合规则 各层定制内容支持上层优先于下层的原则进行融合,保证高层次的开发内容优先于低层次的开发内容,支持分层开发、管理。产品模块编码规则产品模块编码规则1、由26个大写字母+10个数字组成2、编码规则为2-2,二级模块之上必须有一级模块3、任何新增一级模块需要研发管理部授权4、行业模块编码前两位为H0-HZ或Y0-YZ5、对每一段编码的H0-HZ或Y0-YZ部分表示为二次开发/行业专用,标准产品不能占用产品菜单节点号编码规则产品菜单节点号编码规则1、由26个大写字母+10个数字组成2、编码规则为2-2-2-2-23、节点最长编码为10位4、节点号必须根据规则组成结构树5、行业产品的节点编码前两位为H0-HZ或Y0-YZ6、对每一段编码的H0-HZ或Y0-YZ部分表示为二次开发/行业专用,标准产品不能占用产品功能号编码规则产品功能号编码规则1、由26个大写字母+10个数字组成2、编码规则为4-1-5,前四位由产品功能规划时该功能的所属模块编码决定3、功能号最长编码为10位,子功能号总长40位.4、功能号第5位为标志位;0表示日常业务处理,1表示统计分析5、功能编码后5位为无意义编码,但以H和Y开头为行业特性使用,以Z开头为二次开发使用6、每个功能都必须归属一个二级模块,通过功能和二级模块的关系表确定7、每个功能下允许带子功能,子功能编码规则为功能编码+30位字符,总长不超过408、功能号在NC产品生命周期中保持唯一且不变,功能调用传递必须携带功能号多语言资源规则NC多语言资源文件规则如下所示:NC多语言资源文件规则1、只有一个公共资源文件,这个资源文件是公共的。2、按每个具体功能的功能点号组织资源文件3、定制的新资源必须用新资源文件4、每个模块的资源文件互不调用,是私有的。5、查找路线:客户-二次开发-行业- NCC + 公共6、资源id规则: 最长15位, 分类(1位)+功能点+编码在一个Res的分类(功能点)下,包含多个NCC的资源文件;同时根据需要可建立几类资源文件: 行业资源文件。支持两级行业。不同的行业可以有自己的行业多语资源文件。行业编号包括“一级行业编号”和“二级行业编号”。一级行业资源文件命名规范:Industry+ “_”+ “HY” +一级行业编号+”.Res”。二级行业资源文件命名规范:Industry+ “_”+ “HY” +二级行业编号+”.Res”。例如:假定一级行业“建筑与房地产”的编号为”6”,二级行业“建筑”的编号为”61”,则一级行业在本功能点下的资源文件的命名为:Industry_HY6.Res,二级行业在本功能点下的资源文件的命名为:Industry_HY61.Res。如果找不到” Industry_HY61.Res”, 就认为该二级行业在行业维度没有进行多语资源定制。如果找不到” Industry_HY6.Res”, 就认为该一级行业在行业维度没有进行多语资源定制。 二次开发伙伴的资源文件。支持二次开发伙伴按行业进行多语资源的定制。资源文件命名规范:Partner+ “_”+ “HY” +行业编号+”.Res”。如果Partner资源文件没有“HY” +行业编号+”.Res”这样的信息, 则认为该资源文件是针对NCC层的多语定制。 客户定制的资源文件。资源文件命名规范:Customer+ “_”+ “HY” +行业编号+”.Res”。如果Customer资源文件没有 “HY” +行业编号+”.Res”这样的信息, 则认为该资源文件是针对NCC的资源ID的多语定制。说明:1)所有文件中的资源ID是一样的。搜索时,先判断是否有行业信息,有行业信息时按照搜索次序从“_HY”+“行业编号”结尾的资源文件查找资源,如果没有找到“_HY”+“行业编号”的文件,再搜索非行业的多语资源。2)客户层、二次开发层和行业层均可能包括行业扩展。每个层次的搜索次序都遵循:先加载二级行业资源,再加载一级行业资源。3)各个层次的资源开发者,需要检查及维护本层及上层(自上而下:NCC行业二次开发客户)的一致性。4)行业信息可以从Context中获取。预制数据规则NC开发预置数据PK规则1、NC系统中PK由20位字符组成,如 0001N5100000000000012、头四位为集团编码,第5第6为为系统配置时设定的系统区别码3、运行态的系统区别码由实施进行配置,为(09,AW)(09,AZ)4、平台和领域开发态的系统区别码为(Z)(09,AZ),按部门分开,具体见下面的分配表5、行业产品的系统区别码为(Y)(09,AZ)6、客开使用的系统区别码为XX7、系统区别码只用于新产生的PK,对于已经存在的主键不做修改要求元数据建模规则元数据建模规则:1、元数据区分了水平、行业、本地化、伙伴、客户等层次2、开发者需要根据对应的研发层次进行建模或定制3、使用时元数据服务自动提供叠加的元数据4、产生的代码遵循分层的代码规则程序编码规则程序编码规则:1、遵循编码规则,如:包名/名空间命名规范2、遵循产品目录规划,并自动获得类按优先级加载支持3、多语资源与配置文件,遵循分层与分离的规划要求产业链目录结构为了支持分层开发,避免各研发层次的资源冲突,NC将不同研发层次的研发资产存放在不同的目录下,并且提供了自动按照优先级进行加载的支持,实现不同研发层次按照分层开发规则加载达到投影叠加的效果。图 01产品目录结构Lib:领域产品的开发内容存放在lib目录下,如果存在补丁,则存放在相应的Classes目录下;hyExt:行业开发及本地化的内容放在hyExt目录下,hyExt包括标准目录结构:Lib;Classes;Client。Classes下放置行业对领域的补丁;本地化开发的内容如果是对行业或领域的补丁,也放置在Classes下,如果存在对应的class,则直接覆盖,形成本地化版本的产品。extension:关于开发伙伴/客户的扩展放在extension目录下,hyExt包括标准目录结构:Lib;Classes;Client。开发伙伴对领域行业本地化的补丁直接放在Classes下;如果客户也有补丁,则也放在Classes下,直接进行覆盖。加载按照extension-hyExt-lib顺序加载,上层的资源优先使用实现各层次提交的资源共存互不覆盖,并融合使用的目的。可以实现下一层的升级不会影响其上开发成果的目的。开发过程NC采用模型驱动开发模式。其开发过程如下图所示。开发工作的起点是模型分析与设计,在NC集成开发环境中提供了模型设计器可以进行实体建模、操作和服务建模。模型设计器还可以根据发布的实体和操作模型生成代码和代码框架。根据生成的代码/代码框架编写业务逻辑实现相应的实体组件和服务/操作组件。通过模型DSL文件可以生成对应的数据库设计文件(PDM),通过数据库设计工具进行数据库设计形成数据库组件,并发布形成数据库建库脚本。同时,通过发布的模型信息可以进行流程设计,在流程中添加流程处理的业务逻辑形成流程组件;根据发布的模型信息可以进行表单设计、并且使用UI设计器完成页面设计并组装成UI组件。根据发布的模型可以进行报表模型设计,构建报表语义模型,再根据语义模型进行报表UI设计形成报表组件。通过构造将以上个步骤形成的开发组件构造成产品安装盘发布到测试环境进行测试后最终发布到客户环境。集成开发环境初始化NC提供了集成开发环境Uap-studio,支持从分析设计到发布测试全过程的开发支持。使用Uap-studio进行开发工作之前,首先需要对开发环境进行配置。其中开发者的设置必须提供,开发工具将通过开发者归属的研发组织确定研发资产的所属研发层次。图 01研发机构、研发者信息图 02设置研发者信息概念介绍 业务组件:业务组件是一系列不可分割的业务活动,是构建产品的组装单元。每个业务组件都有他的业务目的,也就是它需要实现的业务功能。业务组件一般包括对外提供的业务服务,为完成一项业务职责进行的由一系列业务操作组成的业务活动,业务数据以及业务处理策略组成。业务组件分为基础组件、业务管理组件和业务分析组件。 开发组件:开发组件是业务组件的组成部分,一般来说业务组件由一组不同类型的开发组件组成。开发组件包括UI组件、业务服务组件、业务活动组件、业务实体组件等 活动:为完成某项业务职责的一组相关业务操作的集合。业务活动的执行结果使业务对象具有业务上的一致性状态,符合一致性状态要求的数据是可以访问的。 扩展:利用产业链支持的开发技术,为已经存在组件开发一个分离的新组件,原组件并没有修改。通过标识出扩展新组件的所有者和分类,能够减少其因升级或打补丁带来的丢失风险。 修改/替换:需要修改已有的组件的代码,以满足客户的业务需求。修改模式要求必须完全了解已有组件的各个方面,包括数据结构,业务逻辑、事件、控制流程等各个方面,否则将导致出现非预期的结果。如果一定需要修改模式,需要注意保存现有文件。 适配:开发业务应用的适配器。产业链研发体系极力推荐使用扩展模式,尽量不使用修改模式。后者的风险及不确定性通常会比前者大很多。一、扩展开发元数据实体扩展开发使用UAP-STUDIO版本为6.3.1.31. 设置研发机构认证伙伴编码要为数字或者小写字母,否则后续会出问题重新修改伙伴编码为qq2. 设置开发者3. UAP开发配置4. 研发层次配置修改文件UAP-STUDIOUAPierpbinindustry_config.xml,将研发层次设为qq(认证伙伴编码)。此处设置不正确,会导致后续生成建库脚本、生成Java源代码报错。如果是行业开发设置为行业编码(0领域级、1行业级、2本地化级、3行业、4客户)如果是伙伴开发设置为认证伙伴编码5. 将UAP-STUDIO切换到MDP透视图,右键点击对应元数据开发目录,在弹出菜单中选择“增量开发实体组件”6. 在弹出界面中,点击“源元文件”按钮,弹出源文件选择框,选择元文件(mm_dmo.bmf)7. 点击确定后,会在对应目录中生成一个增量开发的元数据文件mm_dmo_4qq.bmf8. 扩展属性的名称必须以元数据名称的扩展后缀(_4qq)为后缀,扩展表也要以此为后缀子表扩展属性9. 增加扩展子表,类名称、名称、实体表名都要添加后缀”_4qq”此处主子组合关系在主实体中的属性有一个标识是错的,需要手工修改isSource=false,否则会导致发布元数据丢失子实体,在修改单据模板时看不到子实体。 10. 发布元数据下面这个提示点确定11. 生成建库脚本勾选只生成扩展表生成脚本如下:1、主表扩展create table mm_dmo_sc_4qq (vscvendor_4qq VARCHAR(20) default NULL,nscprice_4qq DECIMAL(28,8) NULL,pk_dmo CHAR(20) NOT NULL,CONSTRAINT PK_MM_DMO_SC_4QQ PRIMARY KEY (pk_dmo),ts char(19) NULL, dr smallint default 0 );2、工序计划扩展create table mm_dmo_psc_4qq (vpscdept_4qq VARCHAR(20) default NULL,vpscpsn_4qq VARCHAR(20) default NULL,pk_procedure CHAR(20) NOT NULL,CONSTRAINT PK_MM_DMO_PSC_4QQ PRIMARY KEY (pk_procedure),ts char(19) NULL, dr smallint default 0 );3、新增的子实体建库脚本create table mm_dmo_psfee_4qq (pk_pscfee CHAR(20) NOT NULL,dfeedate CHAR(19) NULL,nfeemny DECIMAL(28,8) NULL,nfeenote VARCHAR(200) NULL,pk_dmo CHAR(20) NOT NULL,CONSTRAINT PK_M_DMO_PSFEE_4QQ PRIMARY KEY (pk_pscfee),ts char(19) NULL, dr smallint default 0 )12. 运行建库脚本,创建数据库表13. 为扩展子实体生成VO代码选择生成目录生成代码成功代码如下14. 生成的代码缺少主表对应属性pk_dmo,手工添加15. 增加了扩展子表,手工修改聚合VO,修改BillMeta1、如果标准产品中是一主一子的标准单据,并且AggVO中是标准的,则不需要修改聚合VO2、如果标准产品中的实体已经是一主多子的情况,则需要手工修改对应的AggVO16. 设置单据模板复制一个原来的单据模板修改模板表头、表体属性扩展委外费用页签保存模板17. 默认模板初始化先移除原有单据默认模板新增一个单据模板,选定我们刚刚新增的单据模板修改默认模板成功18. 将对应的默认模板设置,增补到集团表pub_systemplate现在可以看到新增补到集团的默认模板了,第一行就是了删除原有的那条对应的默认单据模板数据第6行现在打开散生产订单节点,可以看到修改后的单据界面了19. 大功告成数据表数据20. 扩展后的属性和元数据是可以参加单据转换的二、新增服务1、定义服务接口 public interface IBomVerMatchSrvForHsy /* * v63合生元升级使用 2014年2月12日14:04:06 lijbe * * param params * return * throws BusinessException */ Map queryDefaultBomByMaterial4Hsy(BomVersion4HsyParamVO params) throws BusinessException;2、接口实现代码编写 public class BomVerMatchSrvForHsyImpl implements IBomVerMatchSrvForHsy Overridepublic Map queryDefaultBomByMaterial4Hsy(BomVersion4HsyParamVO params) throws BusinessException try / 合生元查询默认的BOM v63合生元升级处理 2014年2月12日13:58:42 lijbe BomBiz4HsyBP queryBP = new BomBiz4HsyBP(); return queryBP.queryBomVOByMaterial4hsy(params); catch (Exception e) ExceptionUtils.marsh(e); return null; 3、编写服务配置文件(bomqueryhsy.upm) nc.pubitf.bd.bom.vermatch.IBomVerMatchSrvForHsync.pubimpl.bd.bom.vermatch.BomVerMatchSrvForHsyImpl 4、将新服务打补丁到服务器a) 接口文件Copy到 modulesuapbdextensionclasses或者 modulesuapbdextensionlibb) 服务实现文件Copy到 modulesuapbdMETA-INFextensionclasses或者 modulesuapbdMETA-INFextensionlibc) 服务配置文件Copy到 modulesuapbdMETA-INFd) 确认服务器配置文件如果binbuildwas.xml、buildnc.xml或者buildwls.xml中的配置节中没有包含以下子元素,手工添加。 e) 打开sysConfig,将EJB进行全部部署。 三、服务修改与替换1、编写一个原有服务接口的新的实现类(定义包装方面) import nc.bs.framework.aop.Aspect;import nc.bs.framework.aop.AspectType;import nc.bs.framework.aop.Decorated;Aspect(aspectType = AspectType.decorator)public class NewPubBomServiceForVMImpl implements IPubBomServiceForVM private IPubBomServiceForVM imi = null;Decorated public void decotate(IPubBomServiceForVM imi) this.imi = imi; Overridepublic Map queryDefaultAggBomByMaterial(BomVersionParamVO params) throws BusinessException /本服务不调整,直接调用原始服务return this.imi.queryDefaultAggBomByMaterial(params); Override public Map queryDefaultAggBom(BomVersionParamVO params) throws BusinessException /本服务不调整,直接调用原始服务 return this.imi.queryDefaultAggBom(params); Overridepublic Map queryDefaultBomByMaterial(BomVersionParamVO params) throws BusinessException /此服务进行调整/前置代码System.out.println(before test();/没有此语句可以实现替换Map result = this.imi.queryDefaultBomByMaterial(params);/后置代码System.out.println(after test();return result; 2、将代码Copy到 modulesuapbdExtensionclasses或 modulesuapbdExtensionlib3、制作一个aop配置文件,放置到 modulesuapbdMETA-INF配置文件内容如下 4、重起中间件,方面拦截才能生效。 四、UI界面增加替换按钮1、增加扩展配置文件 UIFII通过配置文件进行UI组装,对UI进行扩展需要增加配置文件(参见UIFII开发文档)。通过对目标节点增加参数的方式将配置文件作用到目标节点。该参数名称必须以“PluginBeanConfigFilePath”为前缀,参数值为配置文件路径,配置格式如BeanConfigFilePath的参数值。其中记录扩展配置xml文件相对某个module的路径。2、扩展按钮属性说明属性名称意义取值范围Action新增或替换的Action在删除操作时可以不设置targetAction新增时的指明位置Action或被替换被删除的Action必须设置extType扩展类型INSERT_EXTTYPEREPLACE_EXTTYPEDELETE_EXTTYPEactionContainer目标Action所在动作容器必须设置uistate所在编辑态还是非编辑态NOTEDIT_STATEEDIT_STATEposition新增时指明与目标Action的相对位置BEFORE_POSITIONAFTER_POSITION3、配置文件内容格式如下红框部分是按钮容器,对应的是扩展功能节点的卡片按钮组容器,或者是列表按钮组容器。4、按钮代码文件类5、示例UI界面列表卡片五、修改业务规则1、将原规则文件直接进行逻辑修改 nc.bs.mmpac.pmo.pac0002.rule.fill.PMOFillMaterialR

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论