変更履歴を自動作成する方法(ノンプログラミング)
こんにちは。
Dynamics 365 (CRM) のシステム開発を行っていると、よくお客様から「いつ、誰がどの項目を何から何に変えたのかの変更履歴を誰でも見れるように画面上に表示してほしい」という要望を受けることがあります。
Dynamics 365 (CRM) では、上記のような機能が「監査」として提供されていますが、監査はどちらかというとシステム管理者向きの機能となっており、一般ユーザーの方の多くは馴染みがない機能だと思います。
そこで今回は、GUIカスタマイズとワークフローのみで変更履歴機能を実装する方法をご紹介します。
変更履歴機能の実装は、大きく分けて4つのステップに分かれています。
STEP 1.変更前の項目を格納するフィールドの作成
STEP 2.変更履歴エンティティの作成
STEP 3.ワークフローの作成
STEP 4.変更履歴サブグリッドの配置
今回は取引先担当者エンティティの役職フィールドに対して、変更履歴機能を実装してみます。
STEP 1.変更前の項目を格納するフィールドの作成
取引先企業エンティティに以下のようなフィールドを追加します。フィールドの種類や長さは変更履歴の取得対象となるフィールドと同じように設定してください。ただしワークフロー処理でこっそり使用するフィールドなので、フォームへの配置は不要です。
STEP 2.変更履歴エンティティの作成
変更履歴エンティティを作成します。作成したエンティティはどこに表示してもいいですが、今回は [設定] メニュー内に表示します。
変更履歴エンティティに以下のようなフィールドを用意します。
・エンティティ名:1行テキスト
・項目名:1行テキスト
・変更日:作成日の項目名を「変更日」に変更
・変更者:作成者の項目名を「変更者」に変更
・変更前:複数行テキスト
・変更後:複数行テキスト
・取引先担当者:検索 (取引先担当者)
続けて変更履歴エンティティに以下のようなビューを用意します。
STEP 3.ワークフローの作成
ワークフローは全部で2つ作成します。
(1) 変更前項目を格納する
(2) 変更履歴を作成する
(1) 変更前項目を格納する
レコードの新規作成時に役職に設定された値を、先ほど作成した役職(旧)フィールドに格納するプロセスを作成します。
プロパティは以下の通りに設定します。もうひとつのプロセスからこのプロセスをキックする必要があるので [子プロセスとして] にチェックを入れることをお忘れなく。
ステップに取引先担当者の更新を追加します。
更新の内容は以下の通りです。役職(旧)フィールドに役職フィールドを格納します。
(2) 変更履歴を作成する
役職フィールドの更新時に変更履歴を作成するプロセスを作成します。
プロパティは以下の通りに設定します。[レコード フィールドの変更] の右にある [選択] をクリックして、役職フィールドにチェックをつけます。
ステップに変更履歴の作成と子ワークフローの開始を追加します。子ワークフローには先ほど作成した(1)のワークフローを設定します。
変更履歴の作成の内容は以下の通りです。
STEP 4.変更履歴サブグリッドの配置
取引先担当者のフォームにSTEP 3で作成したビューをサブグリッドとして配置します。その際、関連レコードのみを表示するようにしてください。
以上で変更履歴機能の実装は完了です。
作成したエンティティ、フィールドの公開、ワークフローのアクティブ化を行いましょう。
動作確認
それでは実際に、変更履歴が作成されるかを画面上で確認しようかと思いますが、この機能を実装する前から存在していたレコードに関しては、役職(旧)フィールドが空っぽであるため、このままだとうまく動きません。
なので、Excelインポート(オンプレの場合はSQLでも可)を利用して役職(旧)フィールドに役職フィールドの値をコピーするか [ワークフローの実行] でSTEP 3の(1)のプロセスを一度実行して役職(旧)フィールドに値を埋めてあげましょう。
上記の準備が完了したら、取引先担当者の役職を主任から課長代理に変更してみます。
変更履歴が自動で作成されました。
あとは必要に応じて、以下のような作業を実施します。
・一般ユーザーのセキュリティロールに変更履歴の作成、読み取り権限を付与
・変更履歴エンティティの項目を読み取り専用化