CRMシステムとの連携
CRMシステムとの連携
表2の1のCRMシステムへの注文情報更新処理について詳しく見ていく。CRMシステムとの連携処理が追加されたことにより、従来のビジネスプロセスにはCRMシステムへの連携処理を行う"Invoke"アクティビティーが追加される(図2)。

図2:CRMシステムへの注文情報更新処理
この追加された"Invoke"アクティビティーからCRMシステムが提供する注文情報更新処理用のサービス呼び出しを行うことになる。
サービス呼び出しの設計ではビジネスプロセスから直接CRMシステムが提供しているインターフェースを呼び出しても構わないが、ビジネスプロセスを より柔軟にするためには連携するシステム固有のデータ構造やシグニチャがビジネスプロセス自身には含まれないほうが都合がよい。
ビジネスプロセスは一般的なインターフェースに対して処理を行い、システム固有の具体的なインターフェースへのマッピングはビジネスプロセスの外部 で実装するようにしておけば、プロセスの汎用性が高くなり、同種のデータを扱う多くのシステムとの連携や連携対象システムの変更などが容易になる。

図3:サービス呼び出しの設計
データ構造とマッピング
そこで、今回の例ではもともと注文情報の入力に使用していたデータ構造を一般的なものと想定し、CRMシステムが提供するインターフェースで定義されているデータ構造へのマッピングをビジネスプロセスの外部で実装することを考える。
ビジネスプロセスで使用している一般的なデータ構造、およびCRMシステムが提供するインターフェースで定義されているデータ構造は次のとおりである。
| データ構造名 | 項目 | 型 | 説明 |
|---|---|---|---|
| Order | orderNumber | int | 注文番号 |
| orderedDate | date | 注文日 | |
| deliveredDate | date | 配送日 | |
| customer | Customer | 顧客情報 | |
| orderedProduct | OrderedProduct (配列) | 注文商品情報 | |
| Customer | id | int | お客様番号 |
| name | string | 名前 | |
| address | string | 住所 | |
| mailAddress | string | メールアドレス | |
| OrderedProduct | id | int | 商品番号 |
| name | string | 名前 | |
| price | string | 価格 | |
| quantity | string | 注文数 |
| データ構造名 | 項目 | 型 | 説明 |
|---|---|---|---|
| CRMCustomer | custID | int | 顧客ID |
| custName | String | 顧客名 | |
| custAddress | String | 顧客住所 | |
| custEmail | String | メールアドレス | |
| orderInfo | CRMOrderInfo | 注文情報 | |
| CRMOrderInfo | orderID | int | 注文番号 |
| orderDate | date | 注文日 | |
| orderProduct | CRMProduct | 商品 | |
| orderStatus | String | 注文状況 | |
| CRMProduct | productID | int | 商品番号 |
| quantity | int | 注文数 |
このとき、マッピングの仕様は以下のようになる。なお、表5ではOrderオブジェクトのorderNumber項目であれば Order.orderNumber、のようにオブジェクトとその項目をドットでつなげてどのオブジェクトのどの項目であるかをあらわしている。
| マッピング元 | マッピング先 | 備考 |
|---|---|---|
| Order.orderNumber | CRMOrderInfo.orderID | |
| Order.orderedDate | CRMOrderInfo.orderDate | |
| N/A | CRMOrderInfo.orderStatus | ステータスを設定 |
| Customer.id | CRMCustomer.custID | |
| Customer.name | Customer.name | |
| Customer.address | CRMCustomer.custAddress | |
| Customer.mailAddress | CRMCustomer.custEmail | |
| OrderedProduct.id | CRMProduct.productID | |
| OrderedProduct.quantity | CRMProduct.quantity |
従って、注文情報更新処理では、表3に定義されるデータを用いてビジネスプロセス内からサービスの呼び出しを行い、外部のマッピング処理により表5の仕様に基づいて表4のデータへ変換を行う。その後、変換されたデータをCRMシステムへ渡すことにより処理を実現することになる。