




已阅读5页,还剩62页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 67 中国联通云门户项目中国联通云门户项目 流程服务流程服务 项目开发及编码规范 中国联合网络通信集团有限公司 2019 12 21 2 67 产权说明产权说明 本文件中出现的任何文字叙述 文档格式 插图 照片 方法 过程等内容 任何个人 机构未经授 权许可 不得复制或引用本文件的任何片断 无论是通过电子形式或非电子形式 3 67 文档信息文档信息 项目名称 中国联通云门户项目 项目经理 肖永威文档版本号 v 1 1 项目阶段 设计阶段文档版本日期 2012 年 12 月 120 日 起草人 张玉明起草日期 2012 年 12 月 13 日 评审人 评审日期 评审方式 会议评审 邮件评审 版本历史版本历史 版本号版本日期作者说明 v 1 02012 12 13 张玉明创建文档 v 1 12012 12 17 张玉明 修订文档 增加 WS 配置 classpath 增加流程建模复用组件配置及使用规范 v 1 22012 12 18 张玉明增加 4 5 Identifiers 数据提取 v 1 32012 12 18 张玉明 刘彦利增加 3 3 5 方法集和命名空间 v 1 42012 12 20 张玉明增加 4 8 4 9 节 v 1 52013 01 22 张玉明增加 3 3 7 节 4 67 目目 录录 1概述 7 1 1目标 7 1 2名词解释 7 2功能设计 7 2 1页面设计 7 2 1 1页面设计一般原则 7 2 1 2XFORM开发原则 7 2 1 3菜单 7 2 1 4调试 7 2 2数据库设计 8 2 2 1原则 8 2 2 2主键 8 2 2 3关联 8 2 2 4触发器 8 2 2 5索引 9 2 3流程设计 9 2 3 1原则 9 3项目构建与编码规范 10 3 1项目开发工具一览表 10 3 2开发资源及服务器信息 11 3 2 1SVN服务器 11 3 2 2Cordys BOP4 开发服务器 12 3 3CORDYS BOP 平台 13 3 3 1测试环境租户建立规范 13 3 3 2CWS项目构建方案 13 3 3 3CWS项目项目开发注意 19 3 3 4备份策略 19 5 67 3 3 5方法集和命名空间 19 3 3 6方法 21 3 4编程公共命名 22 3 4 1类命名 22 3 5JAVASCRIPT命名 22 3 5 1类成员变量命名 22 3 5 2普通变量命名 23 3 5 3类成员方法 24 3 5 4普通方法 24 3 6JAVA命名 24 3 6 1类成员变量与普通变量 24 3 6 2类成员方法 25 3 6 3包命名 25 3 7数据库命名 25 3 7 1表和字段命名 25 3 7 2主键命名 25 3 7 3外键命名 26 3 7 4视图命名 26 3 7 5序列命名 26 3 7 6存储过程命名 26 3 7 7函数命名 27 3 7 8触发器命名 27 4技术实现 27 4 1业务逻辑实现方案选择 27 4 2页面 28 4 3BPM 32 4 3 1流程松耦合性 32 4 3 2流程事务性 33 4 3 3流程建模复用组件配置及使用规范 34 4 4消息映射 34 4 4 1消息结构 34 4 4 2消息删除 35 4 4 3本地变量 35 6 67 4 4 4子流程 36 4 4 5并行处理 36 4 4 6Web Service Method 41 4 4 7JavaScript编码 41 4 4 8JAVA编码 42 4 4 9数据库连接 47 4 4 10数据库连接 47 4 5IDENTIFIERS数据提取 47 4 6调试与测试 48 4 6 1调试 48 4 6 2Webgateway 48 4 6 3WS AppServer调试 49 4 6 4NOM内存泄漏检测与调试 49 4 7单元测试 49 4 8开发工具整合 49 4 8 1Subclipse SVN插件安装 49 4 8 2Cordys CoE 插件 58 4 8 3eclipse中安装tomcat插件 58 4 9开发过程中性能及故障处理 63 4 9 1限制流程实例中循环的最大数量 63 4 9 2MySQL主从复制Binary Log清理 64 4 9 3Eclipse Performance 64 4 9 4Cordys 自定义认证类及BCP JAR路径配置 65 7 67 1 1概述概述 指导云流程服务项目开发 提供设计 开发 编码的参考 执行规范 1 1目标 规范项目各环节实施 开发 编码规范 以及故障处理 调优问题汇总记录 此文档会在整个项 目实施过程中不断维护 保持版本更新 1 2名词解释 Cordys CWS REST BinLog 2 2功能设计功能设计 2 1页面设计 2 1 1 页面设计一般原则 2 1 2 XFORM 开发原则 2 1 3 菜单 菜单项应当赋予角色 而不是直接赋给用户 2 1 4 调试 可以使用 fiddler httpwatch firebug IE developerToolbar 来对 Http 请求及 JS 脚本进行调试 和性能调优 8 67 2 2数据库设计 2 2 1 原则 数据库设计必须符合第一范式 数据库只保留基本逻辑约束 包括以下方面 主键 主子表关联外键约束 属性表不添加外键约束 所有数据库设计的内容体现在数据模型文档中 针对特定字段的约束体现在该字段的属性和注释 中 需要特别说明的 可以在物理模型图中加 Notes 注意 由于本项目中使用的是 Cordys BOP 平台产品 在 BOP 中能够提供 API 来解决的或者可以 通过查询平台系统表提取数据的 原则上不要再增加新表来辅助设计和逻辑实现 以避免后期与应用 耦合性过高 2 2 2 主键 以单一整形或字符串类型字段做主键 2 2 3 关联 当一个表通过外键引用另一个表时 往往主表的删除意味着相关记录的删除 如果确认这里的业 务逻辑是正确的 而且没有其他的影响 可以使用 级联删除 选项来简化代码 但必须在相应的数 据库模型上有所体现 同样的 级联更新 也起到类似的作用 2 2 4 触发器 对于一些简单的 基本业务无关的数据操作 可以使用触发器来实现 比如生成序列号 但业务 相关的 复杂的逻辑 则避免在触发器中实现 2 2 5 索引 对于查询频度远高于修改的数据表 或者需要经常对查询结果排序的表 创建相应的索引 9 67 2 3流程设计 2 3 1 原则 以详细设计为准 模型设计摘要如下 1 创建流程模型时修改流程的 namespace 如下所示 2 泳道颜色使用双色交替 循环使用 cordys 提供的第 1 个颜色和第 2 个颜色 3 泳道间的间距 1px 4 泳道的长度要统一 5 decision 的描述用 是否 条件描述为 是 否 摆放位置应在连接线的起始 端 水平连线上方 垂直连线右侧 偏移位移在 5px 以内 6 当 decision 的出口在 3 条或 3 条以上 根据实际业务情况进行描述 7 活动节点间的连线 水平或垂直平行时用直线 除此之外用带直角的连线 8 group 组件上下边框应大于泳道边界 1px group 的描述有实际的业务含义 9 流程中的组件大小用 default 如果文字太多 超过 50 字时 可根据实际情况调整 10 相同组件的大小在同一流程模型中保持一致 11 流程的起始位置在上方 结束位置在下方 循环中驳回节点尽可能共用 以减少驳回节点个数 3 3项目构建与编码规范项目构建与编码规范 本项目开发基于 Cordys BOP 4 1 平台进行开发 Cordys 层使用 SOAP WS 进行服务开发 中 间层使用 RESTful 的 WS 对外暴露资源和服务 REST 风格的 WS 使用 Jboss Resteasy 作为框架的基础上进行开发 开发测试服务器使用 Apache Tomcat 7 0 JDK 统一使用 1 6 Eclipse 需要 eclipse jee juno 版 并整合 Cordys CoE 插件 作为 WS 开发 IDE 开发数据库使用 MySQL 5 5 推荐使用 5 5 19 版 生产环境使用 MySQL Master Slave 模式 前端连接使用 MySQL Proxy 模式进行 JDBC 连接 10 67 开发工程包 DEMO 中提供了 Ant 打包脚本 方便进行服务打包 第三方常用的 lib 库则都包含在 EIP DEMO 工程中 请避免使用其他版本的库 每个 EIP 服务的客户端是一个 Jar 文件 命名为 XXX impl jar 最新的客户端 jar 文件以现网运 行的版本为准 开发工程包请向开发人员索取 3 1项目开发工具一览表 平台 Cordys BOP4 1 Cu7 MySQL Server MySQL Server Community 5 5 19 Eclipse IDE eclipse javaee juno with Cordys CoE plugin Svn plugins Eclipse update site URL http subclipse tigris org update 1 8 x MySQL Tools Navicat for MySQL 10 0 11 enterprise edition Web Contanier Apache Tomcat v7 0 Web Browser Google Chrome 最新版 Mozilla Firefox IE 8 推荐使用 Chrome 浏览器进行 开发 SSH 客户端 Xmanager 3 0 SecureCRT 7 0 推荐使用 XME 3 0 可以直接使用图形界面 FTP 客户端 Xftp Filezilla XML 格式化工具 foxe XML 格式化工具 XPathVisualizer 1 3 0 文本编辑工具 Notepad 6 22 3 2开发资源及服务器信息 3 2 1 SVN 服务器 1 项目开发服务器地址 项目开发服务器地址 https 10 64 6 98 8443 svn cloudbpm 11 67 项目开发人员帐号 联系配置管理员获取 开发服务器管理员帐号 远程桌面 adminstrator 密码 联系相关人员 IP 10 64 6 98 SVN 客户端需使用 TortoiseSVN 1 7 2 公司 公司 SVN 服务器 服务器 项目根路径 http 10 64 8 160 svn 20121123 YMHLCFW 注意 本节以下所述 SVN 地址均相对此项目 SVN 根路径 开发工程开发工程 SVN 地址 地址 Cordys 中 CWS 创建项目工程时绑定的 SVN 地址 00Developing 02code cloudbpm trunk projects bpm cordys cws all Cordys 中 CWS 中创建的 Java 代码在 Eclipse 中编辑时 需下载 Eclipse 工程 下载地 址 00Developing 02code cloudbpm trunk project bpm cws java 项目基础类库开发的 Eclipse 工程 SVN 地址 00Developing 02code cloudbpm trunk project bpm common 项目 REST 服务开发的 Eclipse 工程 SVN 地址 00Developing 02code cloudbpm trunk project bpm rest 项目 java 版本 SDK 开发的 Eclipse 工程 SVN 地址 00Developing 02code cloudbpm trunk project bpm sdk java 12 67 项目 php 版本 SDK 开发的工程 SVN 地址 00Developing 02code cloudbpm trunk project bpm sdk php 类库类库 Jar 包发布地址包发布地址 项目基础类库编译后 jar 包发布的 SVN 地址 00Developing 02code cloudbpm trunk projects bpm cordys cws all rest ws Java Java Archives bpm lib 第三方厂商 HP 提供的类库发布的 SVN 地址 00Developing 02code cloudbpm trunk projects bpm cordys cws all rest ws Java Java Archives hp eip lib 开发工具下载地址开发工具下载地址 00Developing 02code cloudbpm trunk tools 版本标签创建地址版本标签创建地址 00Developing 02code cloudbpm tags 注意 各模块在模块目录下创建版本标签 个人目录地址 个人目录地址 00Developing 04personal 每人的文件夹下有三个文件夹 根据每天的任务 将相应的成果放到这三个文件夹里 每天都得将当天成果放入文件夹中提交 并在 svn 备注中写明当天提交的是什么 多少个功能点 3 2 2 Cordys BOP4 开发服务器 CordysBOP4 服务器访问地址 http 10 64 8 149 cordys 位置 黑龙江集成公司 按开发人员建立租户 在各自的租户下进行开发 开放服务 SSH FTP MySQL 数据库 数据库 数据库名 eipdb 数据库地址 10 64 8 149 端口 3306 用户名 eip app1 密码 True 13 67 Tomcat Server 地址 10 64 8 149 端口 8080 管理用户 admin admin webappRoot usr local tomcat 7 0 33 webapps FTP 用户用户 ftp 10 64 8 149 用户 ftpuser 密码 ftpTrue Cordys Bop 集团服务器 集团服务器 访问地址 http 10 0 3 157 cordys 位置 集团 按开发人员建立租户 在各自的租户下进行开发 3 3Cordys BOP 平台 3 3 1 测试环境租户建立规范 EIP 云门户端是按省分分配的应用 ID EIP 云门户中的 EIP 应用 ID EIP 租户 ID 与 Cordys 流程平台中的 CARS 租户 的对 应规则为 EIP 应用 ID EIP 租户 ID CARS 租户 ID 由于 Cordys 中租户为 LDAP 的 DN 格式 所以 CARS 租户 ID 对应的 CARS 租户 DN 为 cn zhangym195 cn organizational users o CARS 租户 ID cn cordys cn defaultInst o 例如 EIP 中的某 XX 系统的应用 ID 为 na999 某 YY 的租户 ID 为 hl328 其对应的 Cordys 中 的租户 ID 为 hl328 na999 对应的 Cordys 中的租户 DN 为 cn zhangym195 cn organizational users o hl328 na999 cn cordys cn defaultInst o 14 67 3 3 2 CWS 项目构建方案 集成平台的各个基础通用组件分别建立独立的 workspace 主要包括 统一用户管理 附件和报表 日志模块 工作台其他应用功能在一个 workspace 中分别建立独立的 project Is the reversed domain name really required to be used as part of the qualified name It is strongly recommended because this prevents name collisions with content from another software vendor Product uniqueness within your domain is at your own responsibility In case you are the one and only consumer of the developed application you could consider to skip the reversed domain name part of the folder structure and hence from the qualified name Disadvantage is that you could get name collisions in future svn 目录结构如下 i tags branches 和 trunck 是 SVN 标准结构 trunck 下面 workspaces 是工作空间窗口 bpmservices 为本项目工作空间 rest ws 是 REST 服务开发的项目 还可以按以后规划 建立其他项目 ii 以上 SVN 内容在导出到 CWS 后 目录结构如下 iii 其他开发人员可以按此格式在 CWS 中建立项目 使用 3 2 1 节 svn 服务器 中 Cordys 中 CWS 创建项目工程时绑定的 SVN 地址 提供的地址对项目进行检出 然 后再本地开发 iv 15 67 其中 rest ws 为工作空间中的项目名称 一般一个服务分类独立一个项目 Business Process Model 为流程模型 business process models 和 case management models 目录 此目录下面一般以流程级联目录进行命名 此目录不会部署到流程模型的名称路 径中 采用 16 67 17 67 Set Start Point of Qualified Name 将此目录下级目录作为命名起始位置 DB Metadata 为数据库元数据目录 Java 目录下面包含 Java archives 和 Java sources 目录 Application packages can contain Java Archives JARs for short that include Java classes developed as part of the application or JARs from external providers so called third party JARS In the former case you need to define a Java Archive Definition detailed instructions on this can be found in this webinar In the latter case there are two options 18 67 the required JAR is available itself and can therefore be delivered as part of the developed application the required JAR is delivered by another application In the last case you must include a file path dependency Note that in this scenario the developed application can be deployed without the required Java Archive being available on the production environment Roles 为角色目录 Rules 为规则目录 User Interfaces 为用户界面文件目录 包括 user interfaces 和 external user interfaces Web content 目录为 HTM L 页面文件 Javascript 文件 CSS 样式表 图片 图标等目录 文件 这个目录要求定义一个 Web Library Definition 此目录中的文件将部署到 Cordys Web Server 目录 XML Store content 所有有效的 XML 结构能够发布到 CordysXML Store 中 典型地 它将用 于不会存储在数据库或在文件系统中的属性和设置文件 这个目录要求定义一个 XML Store Definition 以使部署文档到 Cordys XML Store All documents having a valid XML structure can be published to the Cordys XML Store Typically it will be used to store properties and settings that will not be stored in a database or on the file system Not all documents with extension xml need to be published to the Cordys XML Store For example message bundles end at xml but needs to be part of some Java archive You need to define a XML Store Definition to deploy documents to the Cordys XML Store More explanation and detailed instructions you can find at this webinar Web Services 开发的 Web 服务目录 Web WsAppServer Packages 目录为根据 DB Metadata 生成成的 package 目录 XMLSchema Definitions 为 XMLSchema 目录 3 3 3 CWS 项目项目开发注意 如果项目按每租户每开发人员模式进行 BOP4 项目开发的话 提醒各位基于 SVN 的 CWS 开 发人员 在修改代码前 一定要先检出代码 修改后再 提交到 SVN 19 67 如果想将项目保存到 自己的 服务器 Workspace 下面 使用 3 3 4 备份策略 3 3 5 方法集和命名空间 3 3 5 1WS 命名空间说明 JAVA 代码命名定义格式 http 公司域名 项目编号 模块名 公司域名 项目编号 bpm 模块名 见下表 模块名模块名编号编号对应操作接口对应操作接口描述描述 流程执行流程执行ProcessExecute 1 发起流程 2 列举出所有流程执行类的操作 待办处理待办处理PendingOperate 1 任务认领 2 工作移交 3 委派 列表出所有统一待办待阅 应 用待办待阅及 Cordys 平台任 务相关的处理操作 流程定义流程定义ProcessDefine 1 查看流程 2 获取流程环节 3 获取流程执行人 4 列举出涉及流程定义类的操作 如获取当前用户下所有流程名 称 获取当前流程环节 获取 当前环节的后续环节等等 流程管理流程管理ProcessMgmt 1 获取流程实例 2 查看流程历史 流程管理相关的所有操作 组织管理组织管理OrgMgmt1 用户查询涉及与 4A 相关的组织用户同 20 67 2 用户同步步及用户 角色 等组织信息 查询操作 通过封装 4A 提供 的 REST 服务接口 开发同步 WS 来实现 应用开户应用开户AppRegister 1 建立租户 2 建立系统资源 建 立 SG SC CLASSP ATH 3 分配数据库资源 4 分配用户 5 涉及应用开户 流程模型流程模型BpmModel 1 车辆 Vehicle 2 会议 Meeting 3 档案 Archive 命名示例 如 流程执行 模块下面的启动流程操作命名空间如下 http bpm ProcessExecute JAVA 包命名方式 com cuc bpm processexecute 3 3 5 2流程模型命名空间说明 流程模型 NS 定义格式 http 公司域名 项目编号 BpmModel APPID 公司域名 项目编号 bpm APPID 应用开发时 EIP 中申请的 APPID 21 67 3 3 5 3JAR 包命名规范 1 JAVA 包命名包命名 bpm 模块名 版本号 jar 2 提供给第三方提供给第三方 REST 接口接口 SDK 命名命名 bpm 模块名 interface 版本号 jar 3 3 5 4REST 接口 URI 命名说明 http EIP 部署服务主机 端口 bpm rest 模块名 服务操作 参数 1 参数 2 示例 http 10 0 0 99 8080 bpm rest ProcessExecute workflowBackOne appId appToken controlUserId processInstanceId track id 3 3 6 方法 命名方式为 Get BUSINESS ENTITIY Object 返回 0 1 个 tuple Get BUSINESS ENTITIY Objects 返回 0 n 个 tuple Get BUSINESS ENTITIY Object ObjectsBy PARAM1 and PARARM2 固定参数查询 Get BUSINESS ENTITIY ObjectsByDF 动态查询 Get BUSINESS ENTITIY Object ObjectsBy PARAM1 and PARARM2 and DF 固定参数 DF 查询 参数较多时 可考虑在 object 后以功能进行命名 如 GetChangeObjectsByDF GetAnnualPlanObjectsByPlanID and PlanType GetAnnualPlanObjectsFilter method 的命名基本上遵循两点 1 系统默认生成的规则 Object 表示返回单个 tuple Objects 表示返回多个 tuple 2 自定义规则 By 后面是条件 DF 表示动态查询 这里 PARAM 之间之所以用下划线连接 是因为数据库字段有时候可能全部大写 无法断词 22 67 3 3 7 JAVA 类注释 1 1 方法注释 方法注释 项目中的方法注释按以下模板生成 生成成后效果 如图所示 配置方法 在 Eclipse 中按以下方式打开菜单 windows preferences 找到 Java Code Template 23 67 右侧 Configute generated code and comments 区中点击 Metods 然后 Edit 此模板 将下面内容 Method Name enclosing method Description todo author user tags return type throws 表 Eclipse 的模板配置 粘贴后 如图示 24 67 保存即可 生成的模板注释后如下所示 Method Name startProcess Description 根据传递的流程特定消息来启动流程并返回流程实例ID author yuming param type 类型 definition param receiver 流程图名称 全路径 param messages 流程流转消息 XML Node param source 可选参数 return String Instance Id throws IllegalArgumentException 参数错误 throws SOAPException 执行异常 流程启动失败 2 3 4编程公共命名 进行面向对象的设计 考察方法本身是否为类的职责 25 67 3 4 1 类命名 WS AppServer 依据后台数据库表对象或 Object 自动生成的 Class 以系统默认命名为准 其他 自定义类命名方式为 名词 名词中各个单词的第一个字母大写 如 OaObject 或 动词 名词 动词第一个字母小写 名词中各个单词的第一个字母大写 getOaObject 3 5Javascript 命名 3 5 1 类成员变量命名 命名方式为 名词 名词 如 password userName 首字母小写 如包含多个名词后面名词首字母大写 成员变量都应当被封装 不能被外部直接访 问 采用 前缀 同时提供 getter setter 方法 3 5 2 普通变量命名 非对象类型变量命名方式为 TYPE 名词 名词 如 sType iIndex giIndex 26 67 TYPE 为变量类型 虽然 Javascript 没有类型的概念 但是从代码可读性和校验方便性考虑还 是应当添加 包括以下取值 i int gi gloable int variable s String 对象类型变量命名方式为 名词 名词 OBJECT TYPE 如 employeeNode orderArray OBJECT TYPE 为对象类型 包括以下取值 Node Array 其它 所有无类型前缀的变量都是 对象 而后缀表示它是哪种 对象 有多个名词时采用 Camel 格式 也即各名词首字母大写 3 5 3 类成员方法 命名方式为 function 动词 名词 名词 参数列表也即普通变量列表 如 function getUser sCode 需要考虑是否对外部公开 公开则无 前缀 不公开则有 前缀 实例方法通过 prototype 定义 静态方法直接定义 如 Date prototype toCordysString function Date fromCordysString function sDateTime 27 67 3 5 4 普通方法 与类成员方法的唯一区别是不需要考虑外部可见性 3 6Java 命名 3 6 1 类成员变量与普通变量 命名方式为 名词 名词 如 PassWord UserName 首字母小写 如包含多个名词后面名词首字母大写 成员变量都应当被封装 不能被外部直接访 问 采用 private 修饰符 同时提供 getter setter 方法 3 6 2 类成员方法 命名方式为 可见性 返回类型 动词 名词 名词 参数列表也即普通变量列表 动词第一个字母小写 名词中各个单词的第一个字母大写 如 private String generateReport int employeeIndex 3 6 3 包命名 命名方式为 com unicom MODULE 如 com unicom bpmsi 注意保持 WS AppServer Repository 中的 package 和 java 中的一致 28 67 3 7数据库命名 3 7 13 7 1 表和字段命名 对于 Oracle 表名全部大写 根据应用的不同用下划线分隔 如 OA HR 如果表明超长 测应用名称缩写 比如 REPAIRREPORT 缩写为 RR 3 7 23 7 2 主键命名 命名方式为 PK 表名 如 PK EMPLOYEE 全部大写 3 7 33 7 3 外键命名 命名方式为 FK 表名 被引用表名 如 FK EMPLOYEE DETAIL EMPLOYEE 全部大写 3 7 43 7 4 视图命名 命名方式为 VW 表名 表名 如 OA VW EMPLOYEE USER INFO 全部大写 29 67 3 7 53 7 5 序列命名 命名方式为 SEQ 表名 如 OA SEQ EMPLOYEE 全部大写 3 7 63 7 6 存储过程命名 命名方式为 S 动词 名词 如 OA S UPDATE EMPLOYEE 全部大写 3 7 73 7 7 函数命名 命名方式为 F 动词 名词 如 OA F CALCULATE USER NUMBER 全部大写 3 7 83 7 8 触发器命名 命名方式为 DT 动词 名词 如 OA DT GENERATE USER ID 全部大写 30 67 4 4技术实现技术实现 4 1业务逻辑实现方案选择 本项目中的业务逻辑可以通过以下几种方式实现 Javascript in XForm WS AppServer BPM SQL in WS AppServer Web Service method SAP Connector Scheduler 和 Store Procedure 一般的指导原则是 考虑企业内部原有和目标业务流程规范性 业务流程操作习惯和项目执行力度 是否采用 BPM 进行技术实现取决于是否可以或需要增加业务的可见性 尽量使用 BPM 进行较高层次的业务建模 而使用 WS AppServer 构建细粒度的功能或事务逻辑 如果性能是业务逻辑的瓶颈 应尽量采用 WS AppServer 实现 尽量简化客户端 Javascript in Xform 的实现代码 而选择后面的几种方式把实现封装在 SOAP method 中 其实就是统一的后台调用接口 尽量少使用 Store Procedure 因为它特定数据库的依赖性太强 而且无法实现标准的 tuple old new 接口 无论是不太涉及业务对象 简单轻量级的业务逻辑 比如拼接日期 格式化字符串或者进行数 学运算等 还是较为复杂的业务逻辑 比如需要从数据库中获得相关业务对象信息进行比较复杂的组 装 应使用 WS AppServer 对于和 SAP 系统的集成 使用 SAP Connector 根据逻辑的复杂性和要实现的目标不同 分情况处理 1 如果某项功能仅实现单个业务实体的增删改查 包括以一张表为主体 但涉及多表的关联查询 同时该实体的变化又不至于扩散 扩散的例子 删除订单还要同时修改对应计划的状态 那么就 可以由 SQL in WS AppServer Method 实现 2 如果某项功能需要复杂的逻辑处理 这些处理可以由系统完成 或者对业务实体的增删改影响 到了其他的实体 变化扩散 由 WS AppServer 实现 3 如果某项功能需要多个不同用户的合作才能完成 且某些角色的所要完成的业务工作是多样的 那么可以由 BPM 实现 4 如果逻辑取决于用户的交互 还是前端判断比较合理 例如根据用户对控件 A 的选择结果确 定控件 B 显示的内容 5 对于本项目需要较高性能要求的情况 采用详细设计中基于 WS AppServer 的复合框架 进行 请求封装 31 67 4 2页面 页面实现有以下指导原则 页面脚本做结构化处理 考虑调试情况和异常处理 示例如下 var gDebug false 调试标志 var gDebugBPM false 调试 BPM 标志 var gParam 全局传入参数 var gType 是否新建报销单全局标识 默认新建 var gOpen false 重入标志 var OPERATION NEW 0 新建 var OPERATION DRAFT 1 草稿 var OPERATION PROCESS 2 流程中 表单初始化 function Form InitDone eventObject try 重入检验 if gOpen 已打开 CordysRoot application showError 请首先关闭已打开页面 系统错误 null errorHandler return else gOpen true initGlobal initForm catch e CordysRoot application showError 页面初始化发生错误 请重新尝试或联系系统管理员 n e message 系统错误 null errorHandler function errorHandler closeApplication 初始化全局变量 function initGlobal 获得传入参数 gParam application event data 流程中 if isFromBPM gType OPERATION PROCESS if gDebugBPM gID id getValue else 修改已有 32 67 if gParam 新建 else gType OPERATION NEW function isFromBPM if parent if gDebugBPM return true return false 设置表单默认值和可用性 function initForm initDefault hideHiddenFields if XXXModel soapFaultOccurred CordysRoot application showError 读取 XXX 信息失败 系统错误 null closeApplication return 隐藏所有不可见字段 function hideHiddenFields grpHidden hide 设置默认值 function initDefault 点击提交 function tbbCommit Click eventObject commit 提交处理 function commit if gType OPERATION DRAFT gType OPERATION NEW 草稿 application confirm 是否提交并启动流程 false confirmCommitHandler else 流程中 application confirm 是否提交并继续执行流程 false confirmCommitHandler 提交处理 function confirmCommitHandler confirmReturnValue 确定 if confirmReturnValue 1 var result validateForm 33 67 if result return if gType OPERATION DRAFT gType OPERATION NEW 草稿 var bStarted startProcess if bStarted return false continueProcess else 流程 continueProcess else 否 0 取消 return closeApplication 表单校验 function validateForm return true 启动流程 function startProcess XXXModel reset if XXXModel soapFaultOccurred CordysRoot application showError 流程启动失败 系统错误 gbxBasic closeApplication return false return true 继续执行流程 function continueProcess if mitForm mitForm CordysRoot application notify 已成功提交 系统信息 null closeApplication else CordysRoot application notify 已成功提交并启动流程 系统信息 null closeApplication 点击取消 function tbbCancel Click eventObject application confirm 是否关闭当前页面 false closeApplication true 系统确认 关闭当前页面 function closeApplication confirmReturnValue if confirmReturnValue 1 confirmReturnValue null 确定 application container close 34 67 对应模型的异常处理 function XXXModel OnSOAPFault eventObject eventObject showError false 对于各页面通用的函数 放置在独立的 js 文件中并链接到 XForm 中 检查 XForm 中的各个 Model 如果不必要应去掉其 automatic 属性以增强性能 各个 XForm 特别是非 Zoom 页面的实现考虑页面重入的问题 如通过菜单多次点击 并进行 相应处理 也即在 FormInitDone 事件中判断当前页面是否已被打开过 如下所示 var gIsOpen false function Form InitDone eventObject if gIsOpen 已打开过 不做任何操作返回 应根据实际情况做相应调整 return gIsOpen true 如果数据库表设计时 需要在前端展现的业务对象相关表中只存储了标识编码信息 而未冗余 存储描述信息 则应通过适当的 WS AppServer 方法将记录一次取出展现在前端 而不应对描 述信息增加 Model 二次取出 以减少 round trip 提高性能 虽然集中化的服务器端校验是实现表单字段有效性校验的理想方式 但是出于性能的考虑 一 般情况下有效性校验应当在客户端进行 而对于以下几种情况 可以考虑在服务器端进行校验 o保存操作 此时一般允许充足的时间进行服务器端校验 同时校验逻辑可能比较复杂 o出于较高安全性的考虑 在服务器端实现相同的校验逻辑 使用 FreeFormData 或 Non Transactional Model 统一封装 XForm 的输入输出 4 3BPM 4 3 1 流程松耦合性 流程设计时应当尽量避免所有流程环节紧密耦合 而应当通过本地消息变量的方式尽量保证流程 的松耦合性 以便于未来可能的业务变更 示例如下 35 67 图 17 流程模型松耦合 可以看到 通过使用流程特定消息 Process Specific Message MessageOP 虽然流程模型 发生了变更 对 MessageOP 节点内属性 EmployeeID 赋值进行了调整 红色区域 但在 Notification 环节 及其它任何可能环节 中的引用都可以保持不变 bpm MessageOP bpm EmployeID text 这可以有效降低活动间的耦合度 4 3 2 流程事务性 对于短生命周期 Short Lived Process 的流程 在主流程中将各子流程组为同一事务 即可保 证各子流程内部的各个自动环节在同一事务中 如下图所示 36 67 图 18 流程事务性 注意 在一个 Transaction Context 中使用针对不同数据源的多个
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中医推拿期末试题及答案
- 云南省陇川县民族中学2025届数学高二下期末综合测试试题含解析
- 浙江省亳州市2024-2025学年物理高二下期末学业质量监测试题含解析
- 云南省泸水市第一中学2024-2025学年物理高二下期末检测模拟试题含解析
- 中卫市第一中学2025年物理高二下期末预测试题含解析
- 盐城市阜宁县高一上学期期中考试化学试题
- 特色饮品店品牌授权与接手合同范本
- 彩票店合作伙伴雇佣与市场拓展合同
- 交通运输基础设施建设采购战略合同
- 公寓式酒店管理租赁合同协议
- 家具供货结算协议书
- 2025年公证员资格考试全国范围真题及答案
- 游客自愿离团协议书
- 2024-2025学年沪教版(五四学制)七年级英语下学期考点突破:书面表达15篇(含答案)
- 小区中控室面试题及答案
- 选择性必修1 《当代国际政治与经济》(主观题答题模版)
- 量子光子ics在生物医学中的应用-全面剖析
- 2025年度手术室感染控制工作计划
- 国开《离散数学》大作业及答案
- 离婚协议书 标准版电子版(2025年版)
- 城市地理学知到智慧树章节测试课后答案2024年秋华中师范大学
评论
0/150
提交评论