[SFDC vs D365]レコードタイプ機能をDynamicsで作成する

Dynamicsの試用期間により、移行検証はこれで最終回となります。
最終回はスクリプトを絡めたレコードタイプの以降についてです。

スポンサーリンク

Salesforceでのレコードタイプ機能

Salesforceでは、同じオブジェクトでもデータの種類によって情報を区別することができます。

レコードタイプを使用することによって、次のような恩恵を受けることができます。

  • ページレイアウトの切り替えができる
  • 選択リストの選択肢を変更することができる

所属選手でレコードタイプ分けをしてみましょう。
以下のように、投手と野手のレコードタイプを作成します。
Salesforceはレコードタイプによって入力に色がつけられる

選手の中でも、投手と野手で管理する成績が異なるため、次のような項目を作成します。
(橙が野手用項目、緑が投手項目、試合数は共通)
Salesforceの選手(取引先責任者)項目

打数〜打点が野手レコードタイプで管理すべき項目、勝利〜セーブが投手レコードタイプで管理すべき項目になります(試合数は両方表示)。

続いて、ページレイアウトと投手用と野手用に作成します。
こちらが投手用。
選手オブジェクト投手用のページレイアウト

こちらが野手用。
選手オブジェクト野手用のページレイアウト

最後にレコードタイプにより、ページレイアウトを設定します。
レコードタイプの[ページレイアウトの割り当て]から、以下のようにレイアウトを割り振ります。
レコードタイプによるページレイアウトの割り当て

これで、投手であれば投手用のレイアウト、野手であれば野手用のレイアウトが表示されることになります。

Dynamicsにはレコードタイプはない

では、一方のDynamicsはというと、レコードタイプの機能はありません
そのため、Salesforceからの移行となると、上記の機能がカスタマイズでは再現しきれないことになります。
Salesforceのレコードタイプを移行するには、Dynamics側では以下のような設定をする必要があります。

  1. レコードタイプの代わりとなるオプションセットを作成
  2. フォームに投手用のセクションと野手用のセクションを一緒に入れる
  3. スクリプトを使用して、セクションの表示切り替えを行う

では、1つずつ順をおって設定します。

レコードタイプに変わるオプションセットを用意する

まずは、レコードタイプ相当のオプションセットを定義します。
ここで作成するオプションセットは通常のオプションセットですので、ここからスクリプトによる処理を加える必要があります。

所属選手であたらに定義する項目は以下の通りです。
Dynamicsの選手(取引先担当者)の項目

セクション分けしたフォームを定義する

次にフォームの設定をします。
レコードタイプによって、情報の切り替えを行いたいため、共通して入力する部分と、投手のみが表示・入力するセクション、野手のみが表示・入力するセクションを用意します。

このように、投手用と野手用のセクションを同じフォームに配置します。
フォームには投手と野手の両方を入れる

投手のセクションのプロパティにはこのように定義します。
ラベル名は任意名でいいですが、名前は後のコーディングに使用するため、きっちり設定しておきましょう。
投手セクションの定義

こちらは野手用のセクションのプロパティ。
こちらも名前はコーディングに使用します。
野手セクションの定義

スクリプトを使用して、セクションの表示切り替えを行う

フォームのセクション分けをしたら、いよいよスクリプトによるコーディングの作成です。

フォームの設定画面からそのままできるため、[フォームのプロパティ]を選択。
スクリプトの定義はフォームのプロパティから

[イベント]タブの上部分のフォームライブラリの追加を選択。
プロパティからフォームライブラリを追加する

Webリソースの作成ダイアログが表示されるので、種類欄に「スクリプト」を選択し、[テキストエディター]を選択。
Webリソースからスクリプトを定義

ソースコードの編集画面が表示されるので、以下JavaScriptを入力します。
new_PlayerFormCtrl

var Sdk = window.Sdk || {};
(function () {
    this.formOnLoad = function (executionContext) {
        // フォームコンテキストを取得
        var formContext = executionContext.getFormContext();

        // ポジションの値を取得
        var selectVal = formContext.getAttribute("new_position").getValue(); 

        // セクションを取得
        var tabObj = formContext.ui.tabs.get("SUMMARY_TAB");
        var sectionObj1 = tabObj.sections.get("Pitcher_section");
        var sectionObj2 = tabObj.sections.get("Fielder_section");

        // 一旦、投手・野手の両方を非表示とする
        sectionObj1. setVisible(false);
        sectionObj2. setVisible(false);
        if(selectVal == 100000000){
            // 投手が選択された場合は投手成績セクションのみ表示
            sectionObj1. setVisible(true);
        }
       if(selectVal == 100000001){
            // 野手が選択された場合は投手成績セクションのみ表示
            sectionObj2. setVisible(true);
        }
    }

    this.selectOnChange = function (executionContext) {
        // フォームコンテキストを取得
        var formContext = executionContext.getFormContext();

        // ポジションの値を取得
        var selectVal = formContext.getAttribute("new_position").getValue(); 

        // セクションを取得
        var tabObj = formContext.ui.tabs.get("SUMMARY_TAB");
        var sectionObj1 = tabObj.sections.get("Pitcher_section");
        var sectionObj2 = tabObj.sections.get("Fielder_section");

        // 一旦、投手・野手の両方を非表示とする
        sectionObj1. setVisible(false);
        sectionObj2. setVisible(false);
        if(selectVal == 100000000){
            // 投手が選択された場合は投手成績セクションのみ表示
            sectionObj1. setVisible(true);
        }
       if(selectVal == 100000001){
            // 野手が選択された場合は投手成績セクションのみ表示
            sectionObj2. setVisible(true);
        }
    }
}).call(Sdk);

コードの書き方については、事細かには説明しませんが、formOnLoadメソッドでフォームのOnLoadイベントで処理する内容を記述しています。
selectOnChangeメソッドも同じ内容ですが、別イベントとして起動させるため、同じ内容で定義しています。

ポジションのオプションセット値が、投手であれば投手セクション表示、野手セクション非表示。
野手であればその逆。
未選択であれば、どちらのセクションも非表示にさせています。

セクションコンポーネントの指定には、前述のセクションの名前を指定して取得しています。
セクション名を取得
オプションセットの値は、オプションセット定義の値が使用されます。
オプションセットは値(数値)を使用する

Webリソースの作成は以上で、フォームのプロパティに戻ります。
フォームライブラリに作成したWebリソースが追加されてます。
次にイベントハンドラーの[コントロール]を「フォーム」に、[イベント]を「OnLoad」に選択して、[追加]からハンドラーのプロパティで以下のように入力します。
onLoadイベントで起動するライブラリメソッドを指定する

関数には先ほど作成したファンクションを指定します(名前空間付き)。
[実行コンテキストを最初のパラメーターにとして渡す]は必ずチェックを入れてください。

このようにイベントが追加され、フォームの保存と公開でOnLoad時にイベントが発動します。
イベントセット後のフォームのプロパティ

ポジションのOnChangeイベントにも同じように定義します。
OnChangeイベントも同様の手法でイベント設定

いよいよ動作確認

では、実際にDynamics版レコードタイプの動作確認をしましょう。

所属選手のフォームから。

ポジションが未選択だと、投手成績・野手成績セクションは非表示です。
ポジション設定前の状態

投手を選択すると、投手成績セクションが表示され、野手成績セクションが非表示となります。
ポジションを投手に切り替えると、投手セクションが表示

野手を選択すると、野手成績セクションが表示され、投手成績セクションが非表示となります。
ポジションを野手に切り替えると、野手セクションが表示

これで、Dynamics版レコードタイプの完成です。
単純移行はできませんが、スクリプトを駆使してカバーすることは可能です。

コメント