Dynamicsの試用期間により、移行検証はこれで最終回となります。
最終回はスクリプトを絡めたレコードタイプの以降についてです。
Salesforceでのレコードタイプ機能
Salesforceでは、同じオブジェクトでもデータの種類によって情報を区別することができます。
レコードタイプを使用することによって、次のような恩恵を受けることができます。
- ページレイアウトの切り替えができる
- 選択リストの選択肢を変更することができる
所属選手でレコードタイプ分けをしてみましょう。
以下のように、投手と野手のレコードタイプを作成します。
選手の中でも、投手と野手で管理する成績が異なるため、次のような項目を作成します。
(橙が野手用項目、緑が投手項目、試合数は共通)
打数〜打点が野手レコードタイプで管理すべき項目、勝利〜セーブが投手レコードタイプで管理すべき項目になります(試合数は両方表示)。
続いて、ページレイアウトと投手用と野手用に作成します。
こちらが投手用。
こちらが野手用。
最後にレコードタイプにより、ページレイアウトを設定します。
レコードタイプの[ページレイアウトの割り当て]から、以下のようにレイアウトを割り振ります。
これで、投手であれば投手用のレイアウト、野手であれば野手用のレイアウトが表示されることになります。
Dynamicsにはレコードタイプはない
では、一方のDynamicsはというと、レコードタイプの機能はありません!
そのため、Salesforceからの移行となると、上記の機能がカスタマイズでは再現しきれないことになります。
Salesforceのレコードタイプを移行するには、Dynamics側では以下のような設定をする必要があります。
- レコードタイプの代わりとなるオプションセットを作成
- フォームに投手用のセクションと野手用のセクションを一緒に入れる
- スクリプトを使用して、セクションの表示切り替えを行う
では、1つずつ順をおって設定します。
レコードタイプに変わるオプションセットを用意する
まずは、レコードタイプ相当のオプションセットを定義します。
ここで作成するオプションセットは通常のオプションセットですので、ここからスクリプトによる処理を加える必要があります。
所属選手であたらに定義する項目は以下の通りです。
セクション分けしたフォームを定義する
次にフォームの設定をします。
レコードタイプによって、情報の切り替えを行いたいため、共通して入力する部分と、投手のみが表示・入力するセクション、野手のみが表示・入力するセクションを用意します。
このように、投手用と野手用のセクションを同じフォームに配置します。
投手のセクションのプロパティにはこのように定義します。
ラベル名は任意名でいいですが、名前は後のコーディングに使用するため、きっちり設定しておきましょう。
こちらは野手用のセクションのプロパティ。
こちらも名前はコーディングに使用します。
スクリプトを使用して、セクションの表示切り替えを行う
フォームのセクション分けをしたら、いよいよスクリプトによるコーディングの作成です。
フォームの設定画面からそのままできるため、[フォームのプロパティ]を選択。
[イベント]タブの上部分のフォームライブラリの追加を選択。
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時にイベントが発動します。
ポジションのOnChangeイベントにも同じように定義します。
いよいよ動作確認
では、実際にDynamics版レコードタイプの動作確認をしましょう。
所属選手のフォームから。
ポジションが未選択だと、投手成績・野手成績セクションは非表示です。
投手を選択すると、投手成績セクションが表示され、野手成績セクションが非表示となります。
野手を選択すると、野手成績セクションが表示され、投手成績セクションが非表示となります。
これで、Dynamics版レコードタイプの完成です。
単純移行はできませんが、スクリプトを駆使してカバーすることは可能です。
コメント