Dynamics CRM 2013/Fall '13 コマンドバーのカスタマイズ その 2

みなさん、こんにちは。

前回に引き続き、コマンドバーのカスタマイズを紹介します。今回は
具体的にカスタマイズを実施していきますが、以下の手順は前回記事
の手順の続きになります。

前回の記事はこちら

シナリオ

取引先企業エンティティのグリッドからのみ、高度な検索ボタンを
非表示にします。ただし高度な検索の権限は剥奪しません。

image

Customizations.xml を開く

コマンドバーのカスタマイズを行うにあたり、Visual Studio で保存した
Customizations.xml を開きます。

1. Visual Studio を起動します。

2. ファイル | 開くより解凍した Customizations.xml を開きます。

3. XML メニューよりスキーマをクリックします。

4. 追加より前回追加したスキーマを探し以下を選択します。

CustomizationsSolution.xsd
RibbonCore.xsd
RibbonTypes.xsd
RibbonWSS.xsd

5. OK をクリックします。

6. Entities | Entity | RibbonDiffXml ノードを探します。

7. CutomActions ノードを以下のように変更します。

<CustomActions></CustomActions>

8. CustomActions 内に要素を追加するために改行し、続いて [<]
を入力した際、以下のように Intellisense が動作すればスキーマが
正常に読み込まれています。

image

RibbonDiffXml の構成

コマンドバーのカスタマイズは、RibbonDiffXml を編集する事で
実行します。RibbonDiffXml 内には、以下の要素が存在します。

- CustomActions
- Templates
- CommandDefinitions
- RuleDefinitions
- LocLabels

それぞれの要素の使い方はこれからの記事で紹介していきます。

既存のボタンを非表示にする

早速今回のシナリオを満たすようにカスタマイズします。カスタム
ボタンの追加や既存のボタンの非表示を行うには、CustomAction を
追加します。

1. CustomActions ノードを改行して、HideCustomAction を追加します。

2. ID に一意となる値を指定します。他のソリューションと重ならない
ように、例えば以下のようなルールで ID を追加します。

<独自サフィックス>.HideCustomAction.<隠す要素の ID >

3. Location に隠したい要素の ID を指定します。今回は高度な検索を
隠すので以下の様に指定します。ID の確認方法は後ほど紹介します。  

image

4. 変更を保存します。

5. ダウンロードした zip ファイル内の Customizations.xml を、保存
したファイルで上書きします。

6. ブラウザに戻り、設定のカスタマイズ | ソリューションより、
変更したソリューションのインポートを実行します。

7. ソリューションのインポート完了後、すべてのカスタマイズを
公開し、ブラウザをリフレッシュします。

8. 取引先企業を表示し、グリッドのコマンドバーから高度な検索
ボタンが消えていることを確認します。

image

既存ボタンの ID 確認方法

既存コマンドバーの情報は、SDK の以下のフォルダに存在します。

SDK\Resources\ExportedRibbonXml

取引先企業のグリッドコマンドバーに表示される高度な検索の ID
は以下の手順で確認が可能です。

1. 上記パスにある accountRibbon.xml を Visual Studio で開きます。

2. RibbonDefinitions | RibbonDefinition | UI | Ribbon | Tabs 配下にある
Tab ノードを順番に確認します。Tab の ID 名は以下のように構成
されています。

Mscrm.<グリッドまたはフォーム※>.<エンティティ名> .<タブ名>
※グリッドの場合は HomepageGrid、フォームの場合は Form
例) Mscrm.HomepageGrid.account.MainTab は取引先企業エンティティ
のグリッドでメインタブであることを示しています。

3. タブの子要素として Group があります。Group の ID もタブと
同じ命名規則です。またその子要素として Controls、その子要素
としてボタンやスプリットボタンなどが存在します。

4. 検索で advancedfind の文字列を検索します。見つかったものが
Mscrm.HomepageGrid.account のものであるか確認します。

image

5. 上記の要素は探しているエンティティ (Account) と場所 (Grid) に
一致するため目的の ID であると当たりをつけて利用します。

追加のシナリオ

追加のシナリオとして、取引先企業フォームにある削除ボタンを
非表示にしてみます。

image

1. 上記手順で開いた accountRibbon.xml で delete を検索します。

image

2. 上記の検索結果は、その名前よりグリッドのものであるため、
続いて検索を行い、フォームの削除ボタンの ID を特定します。

image

3. Customizations.xml に以下の HideCustomAction を追加します。

image

4. 先ほどと同じ手順でソリューションを上書きします。

5. ソリューションのインポート後、すべてのカスタマイズを
公開して、ブラウザをリフレッシュします。ボタンが非表示
となることを確認します。

image

非表示にしたボタンを再表示

上記手順で非表示にしたボタンを再度表示したい場合、設定
を削除した Customizations.xml に差し替えることで元に戻す
ことが可能です。

1. 例えばフォームコマンドバーから非表示にした削除ボタンを
再度表示するが、高度な検索を非表示にしておく場合、以下の
内容に書き換えます。

image

2. すべてを戻す場合、以下のように書き換えます。

image

3. 変更を保存して、ソリューションを上書きし、インポート
終了後すべてのカスタマイズを公開します。

注意点

ボタンを非表示にする場合、まず初めに権限をはく奪することで
実現可能か検討してください。なにかしらの理由で権限はそのまま
にしておき、ボタンだけ非表示にしたい場合は、今回の手法が
利用できます。

次回はカスタムボタンの追加を紹介します。

‐ 中村 憲一郎