MDM SaaS : Data Enrichment をルートレコードのフィールドに設定する

## はじめに
MDM SaaS では 2024年10月のリリースで Data Enrichment の機能が追加されました。Data Enrichment は外部データプロバイダを使ってデータを Enrich することができる機能です。実装には CAI のプロセスを利用しています。
この記事では、ビジネスエンティティのルートレコードのフィールドに Data Enrichment を設定する方法を紹介します。フィールドグループ内のフィールドに設定するサンプルは製品ドキュメントで紹介されていますので、そちらを参考にしてください。
## シナリオ
- x_be_er という名称のビジネスエンティティ内の beforeER フィールドを Data Enrichment のインプットとして利用し、afterER フィールドに Data Enrichment された内容を設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119974/70e294ed-e902-09a7-edfd-b8b6685b37f4.png)

- CAI のプロセスでは、今回は外部データプロバイダは利用せず、インプットとして渡された値に固定のテキスト文字列を追加してアウトプットする処理を行います。 

## 事前準備
- ビジネスエンティティを用意します。そのビジネスエンティティの検索結果のレイアウト、必要なページを作成し、MDM SaaS アプリケーションで利用できるように追加しておきます。
- 「表示して編集」のページでは、ソースレコードのコンポーネントを追加しておきます。
- Enrichment 用のソースシステムを作成しておきます。

## CAI でのプロセスオブジェクトとプロセスの作成
プロセスオブジェクトの作成方法については、[プロセスオブジェクトによるユーザー定義変数の利用](https://qiita.com/shunsuzu/private/70f1c56f95536645e62f)を参考にしてください。

:::note warn
プロセスオブジェクトに追加するフィールドのタイプを間違えると、後のステップのプロセス選択でエラーが発生することがありますので注意が必要です。
:::

### 1\. System プロセスオブジェクトの作成
groupId フィールドを追加します。
| 名前 | ラベル | タイプ |
|--|--|--|
| groupId | groupId | テキスト |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119974/1de70965-aa36-2dd7-c5e1-c6586a84e3e0.png)

### 2\. InputPayload プロセスオブジェクトの作成
インプットに利用するフィールドと、1 で作成した System プロセスオブジェクトを追加します。
| 名前 | ラベル | タイプ |
|--|--|--|
| beforeER | beforeER | テキスト |
| sys | sys | 参照 (1 で作成した System プロセスオブジェクトを指定) |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119974/03772b89-6715-9fdf-b904-cfc399219071.png)

### 3\. OutputPayload プロセスオブジェクトの作成
アウトプットに利用するフィールドと、confidenceScoreInPercent フィールドを追加します。
| 名前 | ラベル | タイプ |
|--|--|--|
| afterER | afterER | テキスト |
| confidenceScoreInPercent | confidenceScoreInPercent | テキスト |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119974/5197dd48-ea84-e041-60bf-d6be261d5617.png)

### 4\. InputPerRecord プロセスオブジェクトの作成
2 で作成した InputPayload プロセスオブジェクトと、docId フィールドを追加します。
| 名前 | ラベル | タイプ |
|--|--|--|
| payload | payload | オブジェクトリスト<br> (2 で作成した InputPayload プロセスオブジェクトを指定) |
| docId | docId | テキスト |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119974/e55d7137-88ca-3d28-18e0-b1d3ab82746c.png)

### 5\. OutputPerRecord プロセスオブジェクトの作成
docId フィールドと 3 で作成した OutputPayload プロセスオブジェクトを追加します。
| 名前 | ラベル | タイプ |
|--|--|--|
| docId | docId | テキスト |
| payload | payload | オブジェクトリスト<br> (3 で作成した OutputPayload プロセスオブジェクトを指定) |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119974/ed4858fc-cf48-3492-0a0b-b3ee962ec949.png)

### 6\. プロセスの作成
#### 6-1\. 開始ステップ
- 全般
    - 名前を入力します。
- 開始
    - 「匿名アクセスを許可します。」をチェックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119974/2f6207ca-9103-58f4-dc13-b313debc410b.png)
- 入力フィールド
    - 入力形式で「ペイロード全体」を選択します。
    - フィールドを追加し、名前に request を入力します。
    - タイプでは、▼をクリック → タイプをさらに表示 → カテゴリで「カスタムタイプ」を選択し、4 で作成した InputPerRecord を選択します。
さらに、「このタイプのオブジェクトのリストを許可します」をチェックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119974/8b82a685-ecf6-f2e1-ac5d-11532874db71.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119974/0269420d-8d33-76ca-f0d9-79147614973d.png)


- 出力フィールド
    - 入力形式で「ペイロード全体」を選択します。
    - フィールドを追加し、名前に request を入力します。
    - タイプでは、▼をクリック → タイプをさらに表示 → カテゴリで「カスタムタイプ」を選択し、5 で作成した OutputPerRecord を選択します。
さらに、「このタイプのオブジェクトのリストを許可します」をチェックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119974/be368164-3760-0b5f-f6ab-4e6120e117a7.png)

- 一時フィールド
    - フィールドを追加し、名前に temp_recordId を入力します。タイプはテキストを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119974/45ee31ca-5d25-b9f8-8d63-f4fa132468ca.png)

#### 6-2\. 割り当てステップ (一時フィールド用) を追加
- 全般
    - 名前を入力します。
- 割り当て
    - 「フィールドの追加」から temp_recordId を選択します。
    - 計算式を選択し、式に $input.request[1]/docId を入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119974/c7f33e79-ce13-fca7-119d-685b67565c4b.png)

#### 6-3\. 割り当てステップ (Response 用) を追加
- 全般
    - 名前を入力します。
- 割り当て
    - 「フィールドの追加」から response を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119974/159c72db-0631-febc-7ec2-4c8414ae52c4.png)
    - 計算式を選択し、式エディタを開いて以下を入力します。
    - ここでは、インプットのテキストに "Enrichment Done" という文字列を追加して、アウトプットとしています。
```XQuery: 式エディタの中身
<OutputPerRecord>
    <docId> {$temp.temp_recordId }</docId>
    <payload>
        <confidenceScoreInPercent>70</confidenceScoreInPercent>
        <afterER>
            {concat($input.request[1]/payload[1]/beforeER, "Enrichment Done")}
        </afterER>
    </payload>
</OutputPerRecord>
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119974/69045965-6968-558e-3fe1-93f0d172bd12.png)


#### 6-4\. プロセスの保存と公開
プロセスの検証を行ってエラーがなければ、保存して、公開します。

## Business 360 Console でビジネスエンティティのデータ品質設定
Business 360 Console でビジネスエンティティを開き、データ品質 > 目標グループ を開きます。

### 7\. 目標グループの作成
右上の「目標グループの追加」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119974/3f53e06f-b830-8f5f-aa1c-7e007f60832d.png)
表示名を入力して作成すると、新規目標グループの画面が表示されます。
### 8\. 目標の作成
左ペイン「目標」の「目標の追加」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119974/2d5e3fbc-f579-9c55-d9eb-f36f9e154416.png)
右ペイン「プロパティ」でステータスを有効にし、「ルールの関連付けの作成」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119974/3bf8cc53-bc60-657e-0c5d-c80a5ab1e126.png)
### 9\. ルールの関連付けの作成
表示名を入力して作成すると、「データ拡張ルールの選択」ステップが表示されます。「データ拡張ルールの追加」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119974/150d9001-c9e0-618a-1c2a-eaf09fcaa6e1.png)
### 10\. データ拡張ルールの作成と設定
表示名を入力して作成すると、データ拡張ルールの設定画面が表示されます。
- 「プラグイン」に「アプリケーション統合 ​​- 推奨事項ベースのエンリッチメント」を設定します。
- 「CAI Process Identifier」で 6 で作成したプロセスを選択します。
- 「confidenceScoreInPercent」に confidenceScoreInPercent を入力します。
- 入力フィールドに InputPayload で指定した sys 以外のフィールドが表示されていることを確認します。
- 出力フィールドに OutputPayload で指定したフィールドが表示されていることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119974/a3e6f639-714b-7cac-6199-f3e0c2436c5e.png)
- 保存します。
### 11\. ルールの関連付けの設定
- 「データ拡張ルールの選択」ステップで「データ拡張ルール」に 10 で設定したデータ拡張ルールを設定し、「次へ」をクリックします。
- 「フィールドのマッピング」ステップで入力マッピングと出力マッピングを行います。 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119974/269eca6c-9e87-bdd9-5ae9-48424ab710cd.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119974/d5bb1c64-90b0-77fb-98ba-6ad9719289b1.png)
    - confidenceScoreInPercent はこのサンプルではターゲットフィールドに利用しないので、マップしません。
    - ソースシステムに事前準備しておいた Enrichment 用のソースシステムを指定します。
- 保存します。
### 12\. 目標の設定と目標グループの保存
- 右ペイン「プロパティ」のルール関連付けの追加をクリックして、11 で設定したルール関連付けを選択します。
- チェックボックスをクリックして、保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119974/a260f8de-cd64-e04b-2405-5b2a8b8e1822.png)
- 目標グループを保存します。
- ビジネスエンティティを保存します。

## 動作確認
MDM SaaS アプリケーションから動作を確認してみます。
- 新規レコードを作成し、適用 → 送信 をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119974/edfa96f0-5234-d25f-d120-4db306b3a970.png)
- 送信後のレコード画面に Enrichment が実行された後のフィールド値が設定されていることが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119974/e2e642b4-c0c4-bc20-9f49-f27e8515ba44.png)
- ソースレコードを確認すると、ルールの関連付けで出力フィールドに設定したソースシステムのソースレコードが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119974/573e7909-48e5-d17d-c4a5-368f1f985592.png)

## 参考ドキュメント
- [Configuring data enrichment](https://docs.informatica.com/master-data-management-cloud/business-360-console/current-version/configure-data-quality/configuring-data-enrichment.html)