Dynamics CRM 2015/Online 2015 更新プログラム 階層化の新機能 その3
みなさん、こんにちは。
先日 Microsoft Dynamics CRM 2015 および Microsoft Dynamics CRM Online
2015 更新で追加された階層化の新機能を、以下記事紹介しました。
今回は階層化ビューコマンドのカスタマイズに関する Tips を紹介します。
コマンドバーは Microsoft Dynamics CRM 2011 ではリボンとして提供された
機能であり、Microsoft Dynamics CRM 2013 からコマンドとして表現方法が
変更されました。今回は既にコマンドバーの基本的なカスタマイズ方法は
知っている前提としますので、一度もコマンドバーのカスタマイズを行った
事が無い場合は、以下の記事をご覧ください。
こちらの記事は全 7 回であり、以下記事に全てのリンクが含まれています。
Dynamics CRM 2013/Fall ‘13 コマンドバーのカスタマイズ
概要
階層化ビューのコマンドは、エンティティビューの 1 種類とみなされるため
コマンドの定義を共有しており、ビューと同様にカスタマイズが可能です。
通常ビューとのコマンドの差異
先ほど説明したとおり、通常のビューと階層化ビューはコマンドの定義を共有
していますが、実際には以下の様に表示されるコマンドが異なります。
この違いは、ビューの状態によって動的に表示されるコマンドが変わるためです。
具体的には以下の 2 つの条件で複数のコマンドが非表示となっています。
グラフが最大化されたビュー
始めの状態はグラフ領域が最大化されたビューの状態です。あまり知られて
いない機能ですが、既定でビューの右側に表示できるグラフは、左にドラッグ
することでグラフだけの画面にすることが出来ます。階層化ビューも状態と
してグラフが最大化されたビューであると認識されます。
上記の場合コマンドバーの項目が変わっていることが分かります。
階層化ビュー
もう 1 つの状態は階層化されたビューの状態の場合です。これは言葉の通り
階層化ビューが表示されているかどうかで判定されます。
この 2 つの状態を知ることが重要な理由は次に説明します。
削除ボタンが階層化ビューで表示されない理由
削除ボタンは通常のビューでは表示されますが、階層化ビューでは表示が
されません。この理由をエクスポートされたコマンドバーの定義から確認
してみます。エクスポートされたコマンドバー定義は、既定の状態での
コマンドバーの定義をすべて示したファイルです。
1. Dynamics CRM 2015 の SDK をダウンロードします。
https://www.microsoft.com/en-us/download/details.aspx?id=44567
2. ダウンロードしたファイルを実行して SDK フォルダを解凍します。
3. DK\Resources\ExportedRibbonXml フォルダにエクスポートされた定義が
ありますので、この中から accountRibbon.xml を開きます。
4. 32 行目から 41 行目に削除ボタンの定義があります。まずは削除ボタンの
大本である SplitButton Id="Mscrm.HomepageGrid.account.DeleteMenu" の
Command 名が Mscrm.HomepageGrid.DeleteSplitButtonCommand である
事を確認します。
5. Mscrm.HomepageGrid.DeleteSplitButtonCommand 定義を検索すると
1481 行目に定義を見つけることが出来ます。表示に関わるルールは
EnableRule と DisplayRule であり、関連するものは以下の 3 つです。
Mscrm.DeleteSplitButtonEnableRule
Mscrm.AnySelection
Mscrm.DeleteSplitButtonDisplayRule
6. まず Mscrm.DeleteSplitButtonEnableRule を検索します。4943 行目に定義を
確認できます。ここでは 2 つの条件が OrRule として指定されているため、
いずれかを満たすと True を判断されます。1 つ目は CustomRuleで関数名が
Mscrm.RibbonActions.disableButtonsWhenChartMaximized であることから、
グラフが最大化されている場合に True を返すものと予測できます。これで
削除ボタンが階層化ビューで表示されないのは、上記で示した 2 つの理由の
うちの前者であることが分かります。
階層化の表示ボタンが階層化ビューで表示されない理由
次にグラフが最大化されたビューでは表示されていた「階層化の表示」が
階層化ビューで表示されない理由を確認します。
1. accountRibbon.xml で「階層化の表示」ボタンを探すと 75 行目に該当の
定義が存在するので、Command が Mscrm.ViewHierarchyForSelectedRecord
であることを確認します。
2. Mscrm.ViewHierarchyForSelectedRecord の定義を検索すると 1664 行目が
見つかります。EnableRule と DisplayRule を見ると関連しそうなルール名と
して以下のものが存在します。
IsNotHierarchyView
IsRecordHierarchyEnabled
3. IsNotHierarchyView は名前から階層化ビューではない事と取れますので、
階層化ビューではないグラフが最大化されたビューではボタンが表示されて
おり、階層化ビューでは非表示になる理由であると分かります。
コマンドバーのカスタマイズ
カスタムボタンを追加する際、上記の情報から以下の要素をうまく使って
階層化ビューでのボタンの表示/非表示をコントロールできます。
EnableRule: Mscrm.IsNotHierarchyView - 階層化ビューでない場合 True
EnableRule: Mscrm.IsRecordHierarchyEnabled - 階層化が有効な場合 True
まとめ
階層化ビューという新しいビューがサポートされましたが、コマンドバーの
カスタマイズという観点からはさほど大きな変更ではありません。ただし
上手くコントロールしないと必要なコマンドが階層化ビューで表示されない
事や、隠したいコマンドが表示されるということになります。
こちらの情報が開発とトラブルシューティングのお役に立てば幸いです。
- 中村 憲一郎