资源描述
H:\精品资料\建筑精品网原稿ok(删除公文)\建筑精品网5未上传百度
中国联通云门户项目
流程服务
项目开发及编码规范
中国联合网络通信集团有限公司
2024-10-08
产权说明
本文件中出现的任何文字叙述、 文档格式、 插图、 照片、 方法、 过程等内容, 任何个人、 机构未经授权许可, 不得复制或引用本文件的任何片断, 无论是经过电子形式或非电子形式。
文档信息
项目名称:
中国联通云门户项目
项目经理:
肖永威
文档版本号:
v 1.1
项目阶段:
设计阶段
文档版本日期:
12月120日
起草人:
张玉明
起草日期:
12月13日
评审人:
评审日期:
评审方式:
会议评审【】、 邮件评审【】
版本历史
版本号
版本日期
作者
说明
v 1.0
-12-13
张玉明
创立文档
v 1.1
-12-17
张玉明
修订文档,
增加WS配置classpath
增加流程建模复用组件配置及使用规范
v 1.2
-12-18
张玉明
增加4.5 Identifiers数据提取
v 1.3
-12-18
张玉明、 刘彦利
增加 3.3.5 方法集和命名空间
v 1.4
-12-20
张玉明
增加 4.8 4.9节
v 1.5
-01-22
张玉明
增加 3.3.7节
目 录
1 概述 7
1.1 目标 7
1.2 名词解释 7
2 功能设计 7
2.1 页面设计 7
2.1.1 页面设计一般原则 7
2.1.2 XFORM开发原则 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.1 SVN服务器 11
3.2.2 Cordys BOP4 开发服务器 12
3.3 Cordys BOP平台 13
3.3.1 测试环境租户建立规范 13
3.3.2 CWS项目构建方案 13
3.3.3 CWS项目项目开发注意 19
3.3.4 备份策略 19
3.3.5 方法集和命名空间 19
3.3.6 方法 21
3.4 编程公共命名 22
3.4.1 类命名 22
3.5 Javascript命名 22
3.5.1 类成员变量命名 22
3.5.2 普通变量命名 23
3.5.3 类成员方法 24
3.5.4 普通方法 24
3.6 Java命名 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.3 BPM 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
4.4.4 子流程 36
4.4.5 并行处理 36
4.4.6 Web Service / Method 41
4.4.7 JavaScript编码 41
4.4.8 JAVA编码 42
4.4.9 数据库连接 47
4.4.10 数据库连接 47
4.5 Identifiers数据提取 47
4.6 调试与测试 48
4.6.1 调试 48
4.6.2 Webgateway 48
4.6.3 WS-AppServer调试 49
4.6.4 NOM内存泄漏检测与调试 49
4.7 单元测试 49
4.8 开发工具整合 49
4.8.1 Subclipse SVN插件安装 49
4.8.2 Cordys CoE 插件 58
4.8.3 eclipse中安装tomcat插件 58
4.9 开发过程中性能及故障处理 63
4.9.1 限制流程实例中循环的最大数量 63
4.9.2 MySQL主从复制Binary Log清理 64
4.9.3 Eclipse Performance 64
4.9.4 Cordys 自定义认证类及BCP JAR路径配置 65
1 概述
指导云流程服务项目开发, 提供设计、 开发、 编码的参考、 执行规范。
1.1 目标
规范项目各环节实施、 开发、 编码规范, 以及故障处理、 调优问题汇总记录。此文档会在整个项目实施过程中不断维护, 保持版本更新。
1.2 名词解释
Cordys
CWS
REST
BinLog
2 功能设计
2.1 页面设计
2.1.1 页面设计一般原则
2.1.2 XFORM开发原则
2.1.3 菜单
菜单项应当赋予角色, 而不是直接赋给用户
2.1.4 调试
能够使用fiddler、 httpwatch、 firebug、 IE developerToolbar来对Http请求及JS脚本进行调试和性能调优。
2.2 数据库设计
2.2.1 原则
数据库设计必须符合第一范式。
数据库只保留基本逻辑约束, 包括以下方面:
l 主键
l 主子表关联外键约束
属性表不添加外键约束。
所有数据库设计的内容体现在数据模型文档中, 针对特定字段的约束体现在该字段的属性和注释中, 需要特别说明的, 能够在物理模型图中加Notes。
注意: 由于本项目中使用的是Cordys BOP平台产品, 在BOP中能够提供API来解决的或者能够经过查询平台系统表提取数据的, 原则上不要再增加新表来辅助设计和逻辑实现, 以避免后期与应用耦合性过高。
2.2.2 主键
以单一整形或字符串类型字段做主键。
2.2.3 关联
当一个表经过外键引用另一个表时, 往往主表的删除意味着相关记录的删除, 如果确认这里的业务逻辑是正确的, 而且没有其它的影响, 能够使用”级联删除”选项来简化代码, 但必须在相应的数据库模型上有所体现。
同样的, ”级联更新”也起到类似的作用。
2.2.4 触发器
对于一些简单的, 基本业务无关的数据操作, 能够使用触发器来实现: 比如生成序列号。但业务相关的, 复杂的逻辑, 则避免在触发器中实现。
2.2.5 索引
对于查询频度远高于修改的数据表, 或者需要经常对查询结果排序的表, 创立相应的索引。
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 项目构建与编码规范
本项目开发基于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连接。
开发工程包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:
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、 项目开发服务器地址:
:8443/svn/cloudbpm
项目开发人员帐号, 联系配置管理员获取。
开发服务器管理员帐号:
远程桌面: adminstrator 密码: 联系相关人员
IP: 10.64.6.98
SVN客户端需使用TortoiseSVN 1.7.*
2、 公司SVN服务器:
项目根路径:
注意: 本节以下所述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
² 项目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:
服务器访问地址
位置: 黑龙江集成公司
按开发人员建立租户, 在各自的租户下进行开发
开放服务: SSH FTP
MySQL数据库:
数据库名: eipdb
数据库地址: 10.64.8.149
端口: 3306
用户名: eip_app1
密码: True
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集团服务器:
访问地址
位置: 集团
按开发人员建立租户, 在各自的租户下进行开发
3.3 Cordys 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=
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.
其中:
l rest-ws为工作空间中的项目名称, 一般一个服务分类独立一个项目
Business Process Model为流程模型( business process models 和 case management models) 目录, 此目录下面一般以流程级联目录进行命名, 此目录不会部署到流程模型的名称路径中。
采用
Set Start Point of Qualified Name, 将此目录下级目录作为命名起始位置。
l DB Metadata为数据库元数据目录
l 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:
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.
l Roles为角色目录
l Rules为规则目录
l User Interfaces为用户界面文件目录, 包括user interfaces 和 external user interfaces
l Web content目录为HTM( L) 页面文件、 Javascript文件、 CSS样式表、 图片、 图标等目录文件。
这个目录要求定义一个Web Library Definition。此目录中的文件将部署到Cordys Web Server目录。
l 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.
l Web Services 开发的Web 服务目录
l Web WsAppServer Packages 目录为根据DB Metadata生成成的package目录
l XMLSchema Definitions为XMLSchema目录
3.3.3 CWS项目项目开发注意
如果项目按每租户每开发人员模式进行BOP4项目开发的话, 提醒各位基于SVN的CWS开发人员, 在修改代码前 一定要先检出代码 , 修改后再 提交到SVN
如果想将项目保存到 自己的 服务器 Workspace下面 使用
3.3.4 备份策略
3.3.5 方法集和命名空间
3.3.5.1 WS命名空间说明
JAVA代码命名定义格式:
http:// {公司域名} / {项目编号} / {模块名}
公司域名: .cn
项目编号: bpm
模块名: 见下表
模块名
编号
对应操作接口
描述
流程执行
ProcessExecute
1. 发起流程
2.
列举出所有流程执行类的操作
待办处理
PendingOperate
1. 任务认领
2. 工作移交
3. 委派
列表出所有统一待办待阅、 应用待办待阅及Cordys平台任务相关的处理操作
流程定义
ProcessDefine
1. 查看流程
2. 获取流程环节
3. 获取流程执行人
4.
列举出涉及流程定义类的操作, 如获取当前用户下所有流程名称, 获取当前流程环节, 获取当前环节的后续环节等等。
流程管理
ProcessMgmt
1. 获取流程实例
2. 查看流程历史
流程管理相关的所有操作
组织管理
OrgMgmt
1. 用户查询
2. 用户同步
涉及与4A相关的组织用户同步及用户、 角色、 等组织信息查询操作, 经过封装4A提供的REST服务接口, 开发同步WS来实现。
应用开户
AppRegister
1. 建立租户
2. 建立系统资源( 建立SG、 SC、 CLASSPATH)
3. 分配数据库资源
4. 分配用户
5.
涉及应用开户
流程模型
BpmModel
1. 车辆(Vehicle)
2. 会议(Meeting)
3. 档案(Archive)
命名示例:
如【流程执行】模块下面的启动流程操作命名空间如下
http:// .cn /bpm / ProcessExecute
JAVA包命名方式:
com.cuc.bpm.processexecute
3.3.5.2 流程模型命名空间说明
流程模型NS定义格式:
http:// {公司域名} / {项目编号} / BpmModel/ {APPID}
公司域名: .cn
项目编号: bpm
{APPID}: 应用开发时EIP中申请的APPID。
3.3.5.3 JAR包命名规范
1、 JAVA包命名
bpm-{模块名}-{版本号}.jar
2、 提供给第三方REST接口SDK命名
bpm-{模块名}-interface-{版本号}.jar
3.3.5.4 REST接口URI命名说明
http://{EIP部署服务主机}:{端口}/bpm/rest/{模块名}/{服务操作}/{参数1}/{参数2}
示例:
: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之间之因此用下划线连接, 是因为数据库字段有时候可能全部大写, 无法断词。
3.3.7 JAVA类注释
1.方法注释:
项目中的方法注释按以下模板生成。生成成后效果, 如图所示:
配置方法: 在Eclipse中按以下方式打开菜单:
windows -> preferences:
找到Java – Code Template
右侧 ”Configute generated code and comments”: 区中点击 ”Metods”, 然后Edit此模板, 将下面内容
/**
* <b>Method Name</b>: ${enclosing_method}
* <br/><b>Description</b>: ${todo}
* @author ${user}
* ${tags} ${return_type}
* @throws
*/
表 - Eclipse的模板配置
粘贴后, 如图示:
保存即可。生成的模板注释后如下所示:
/**
*
* <b>Method Name</b>: startProcess
* <br/><b>Description</b>: 根据传递的流程特定消息来启动流程并返回流程实例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 编程公共命名
进行面向对象的设计, 考察方法本身是否为类的职责。
3.4.1 类命名
WS-AppServer依据后台数据库表对象或Object自动生成的Class, 以系统默认命名为准; 其它自定义类命名方式为
名词
名词中各个单词的第一个字母大写
如:
OaObject
或
动词+名词
动词第一个字母小写, 名词中各个单词的第一个字母大写
getOaObject
3.5 Javascript命名
3.5.1 类成员变量命名
命名方式为
_名词[+名词]
如
_password
_userName
首字母小写, 如包含多个名词后面名词首字母大写。成员变量都应当被封装, 不能被外部直接访问。采用”_”前缀, 同时提供getter/setter方法。
3.5.2 普通变量命名
非对象类型变量命名方式为
%TYPE%名词[+名词]
如
sType
iIndex
giIndex
%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)
3.5.4 普通方法
与类成员方法的唯一区别是不需要考虑外部可见性。
3.6 Java命名
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中的一致
3.7 数据库命名
3.7.1 表和字段命名
对于Oracle, 、 表名全部大写, 根据应用的不同用下划线分隔
如
OA_***
HR_***
如果表明超长, 测应用名称缩写
比如REPAIRREPORT_***缩写为RR_***
3.7.2 主键命名
命名方式为
PK_表名
如
PK_EMPLOYEE
全部大写。
3.7.3 外键命名
命名方式为
FK_表名_被引用表名
如
FK_EMPLOYEE_DETAIL_EMPLOYEE
全部大写。
3.7.4 视图命名
命名方式为
VW_表名[_表名]
如
OA_VW_EMPLOYEE_USER_INFO
全部大写。
3.7.5 序列命名
命名方式为
SEQ_表名
如
OA_SEQ_EMPLOYEE
全部大写。
3.7.6 存储过程命名
命名方式为
S_动词_名词
如
OA_S_UPDATE_EMPLOYEE
全部大写。
3.7.7 函数命名
命名方式为
F_动词_名词
如
OA_F_CALCULATE_USER_NUMBER
全部大写。
3.7.8 触发器命名
命名方式为
DT_动词_名词
如
OA_DT_GENERATE_USER_ID
全部大写。
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) 的实现代码, 而选择后面的几种方式把实现封装在
展开阅读全文