基于WPS的电信业务集成场景,第二部分: 数据建模及其实现
 

2009-04-16 作者:杨 娟 来源:IBM

 
本文内容包括:
在本系列文章中我们将介绍WSCTI项目实现的电信业务场景,数据模型和业务流程,如何实现应用系统的集成和业务流程的整合。本文首先介绍WSCTI项目的业务场景,用例以及系统架构。

引言

通过本系列文章的第一部分的介绍,作者假定读者对WSCTI的业务场景与系统架构已经有了一个大致的了解。本文将重点介绍 WSCTI项目中所运用的数据模型及其在WID中的实现。

数据建模

根据业务功能的不同,我们将电信数据划分为六大类:

  • 客户数据:主要指客户相关数据,包括客户的基本信息、联络信息、信用信息等等。
  • 账户数据:主要指和账目相关信息。
  • 市场/产品数据:主要指和电信产品相关信息,包括产品定义、产品包定义、定价规则等等。
  • 服务数据:主要指支撑电信产品的由电信部门提供给客户的服务信息。
  • 资源数据:主要指支撑电信服务的电信部门内部资源,包括物理资源和逻辑资源。
  • 供应商/合作伙伴数据:主要指为电信部门提供资源或者进行业务合作的第三方。

如下图所示:

图1. 电信数据领域分类
图1. 电信数据领域分类

在我们的场景当中,由于所模拟的业务流程没有涉及到供应商/合作伙伴这个领域,所以在数据建模中我们将这个领域略去。同时由于我们模拟的业务流程偏重于计费,而对具体的账户收费信息较少涉及,所以我们用计费数据取代了账户数据。因此在这个场景中我们实际应用的数据模型如下图所示:

图2. WSCTI数据模型
图2. WSCTI数据模型

从这张图中我们可以看到,整个数据模型是以订单(SalesOrder)为核心的。概括来讲,一个客户(Customer)可以拥有多张订单。每张订单对应一个产品包(ProductPkg),每个产品包对应若干产品(Product)。根据订单里订购的不同产品,每个订单被划分为多个工单(WorkOrder)。每个工单(WorkOrder)对应一种产品,同时对应一项电信的服务(Service)。每项服务占用若干电信资源(Resource)。

开发过程

1. 业务对象(Business Object)简介:

业务对象是一项基于SDO(Service Data Object)的技术。目前SDO作为WebSphere Application Server的一部分已经集成在WPS中,它提供了一个简化了的J2EE数据应用开发的模型,SDO的实现包含在EMF中。EMF是构建数据模型的工具。可以把SDO理解为EMF所建的一个模型。但是它只是一个规范,并没有提供相关的服务来创建SDO。

Business Object Framework(BOF)在WPS中,作为SDO的一种增强是建立在SDO的EMF实现之上的,并且由于它是SOA的一部分而成为了WPS的核心组件之一。BOF的数据模型直接使用SDO。此外BOF还提供一些服务来创建、操纵Business Object以及Business Graph。一个Business Object(BO)是一组属性的集合,用来表达一个业务实体、一个对数据的操作和处理数据的流程。整合应用程序的组件则使用BO来交换数据和触发事件。

2. 定义通用业务对象

我们将创建一个名为PeonyLibray的module,用来存放这个场景中用到的所有通用业务对象(Generic Business Object)的定义。

首先我们简单介绍一下在WID中如何创建业务对象:

(1) 打开WID,并确保你在"商业整合(Business Integration)"视图下。

(2) 新建一个WID工程(WID Project),通常为一个模块(Module)或库(Library)。库,又名共享库(Shared Library)。在WSCTI这个业务场景中,我们把业务对象存放于一个共享库(PeonyLibrary)中。

(3) 选中要存放业务对象的WID工程(PeonyLibrary),右键单击该工程,选择新建->业务对象,输入业务对象存放的文件夹及业务对象的名字,单击完成。

(4) 在PeonyLibrary目录下,你将会看到新建的业务对象。双击该业务对象,用户可在右边的业务对象编辑器(Business Object Editor)中查看及编辑业务对象。点击编辑器中的 按钮,可以为业务对象添加属性。用户可在右下角的属性(Properties)视图中编辑该属性的名字,类型等属性。 按钮用于删除业务对象属性。 按钮用于将业务对象显示在表格视图中。

然后我们来定义一些主要的业务对象。

(1).客户(Customer)对象

客户业务对象常用的属性有ID,Name,Type等等,同时每个客户有着与自己相关联的信用(Credit)业务对象和联系人(Contact)业务对象。定义完成之后如下图所示:

图3. 客户对象示例
图3. 客户对象示例

(2)账单(Bill)对象

每张账单有账单号、计价单位、收费金额、收费方式等属性,同时包含多个的账单项,列出针对客户所订购的不同的业务的收费信息。如下图所示:

图4. 账单对象示例
图4. 账单对象示例

(3)订单(Order)对象

订单是整个场景中的核心数据。它包括的主要属性有订单号、客户号、订单类型、有效日期等。同时它被划分成多个工单,便于执行。在这些工单之间,可能存在前后依赖关系。

图5. 订单对象示例
图5. 订单对象示例

(4)服务(Service)对象

服务对象的属性主要包括服务号、服务名、类型、起始日期、服务状态等,以及它所占用的资源。

图6. 服务对象示例
图6. 服务对象示例

(5)资源(Resource)对象

资源对象的属性主要包括资源编号、资源名称、类型、占用状态等等,如下图所示。

图7. 资源对象示例
图7. 资源对象示例

3. 数据映射(Data Mapping)

以上定义的均为在WPS中使用的通用业务对象。在不同的业务系统中,同样的业务对象可能有不同的定义。比如订单这个业务对象,可能它在CRM系统里所包含的信息和在计费系统里所包含的信息会有很大的不一致。这就涉及到各个系统之间进行交互的时候需要对业务对象的进行转换。这一工作需要通过数据映射来完成。

以CRM系统为例,在它与WPS进行数据交换的时候,我们需要定义如下图的数据映射:

图8. 数据映射示例
图8. 数据映射示例

其中数据映射CRMSalesOrderToSalesOrder的具体映射格式定义如下:

图9. 订单数据映射示例
图9. 订单数据映射示例

可以看到,大部分的属性是直接通过"Move"的方式复制过去,对于本身包含其他业务对象的属性,我们定义了子映射,也就是引用了其他的数据映射。另外还可以通过"Join"来把多个不同的源属性连接成一个目的属性,或者通过"Extract"来从一个源属性中抽取出多个目的属性等等。

除此之外,我们有时候还需要对数据映射进行客户化定制,如下图所示:

图910 客户数据映射示例
图910 客户数据映射示例

具体的定制内容可以在"Custom"的属性栏中进行设置,如下图所示:

图11.定制数据映射示例
图11.定制数据映射示例

从图中可以看到,这是一个判断语句,如果源业务对象CRMCustomer中的customers数组不为空的话,则把customers的值赋给目的业务对象Customers的属性customerIDs。如果customers数组为空,则不进行赋值。

问题及前景展望

从本文的叙述中可以看出,WSCTI所使用的数据模型是简化了的电信数据模型,并且由于受到业务流程的约束,对于电信数据的六大领域中的账户(Account)以及供应商/合作伙伴(Supplier/Partner)领域数据未加描述。未来如有可能,应增加涉及到账户和供应商/合作伙伴的业务流程, 同时对其他领域的数据定义加以细化,使之更加符合中国电信行业的实际情况。

结束语

本文简单介绍了WSCTI项目的数据建模及如何用WID去进行实现。

参考资料


火龙果软件/UML软件工程组织致力于提高您的软件工程实践能力,我们不断地吸取业界的宝贵经验,向您提供经过数百家企业验证的有效的工程技术实践经验,同时关注最新的理论进展,帮助您“领跑您所在行业的软件世界”。
资源网站: UML软件工程组织