リボンの有効化ルールの定義

注意

このトピックは、従来のコマンドに関するものです。

コマンドを定義する新しい方法があります。 最新コマンドの概要 (プレビュー).

リボン要素を構成する場合は、そのリボン要素を有効にするタイミングを制御する特定のルールを定義できます。 <EnableRule> 要素は、次のように使用します。

  • リボン要素をいつ有効にする必要があるかを制御するルールを定義するには、/RuleDefinitions/EnableRules/EnableRule 要素を使用します。

  • コマンド定義に対して特定の有効化ルールを関連付けるには、/CommandDefinitions/CommandDefinition/EnableRules/EnableRule 要素を使用します。

有効になっているとはどういう意味か。

コマンド バーでは、無効なコマンドは非表示です。 リボンでは、無効なコマンドは表示されますが、イベントに応答しません。

リボン要素をいつ有効にするかをコントロール

有効化ルールは再利用することを前提としています。 ルール定義と一緒に定義することで、同じ有効化ルールを複数のコマンド定義で使用できます。 1 つのコマンド定義に対して複数の有効化ルールを定義した場合、有効化するリボン要素に対してすべての有効化ルールを true と評価する必要があります。

すべての有効化ルールには、ルールの既定値が true か false かを指定するためのパラメーター、およびテスト対象のアイテムが true を返す場合に負の結果を返せるようにするための InvertResult パラメーターがあります。どちらのパラメーターも省略可能です。

/RuleDefinitions/EnableRules/EnableRule 要素では、次の種類のルールがサポートされています。

コマンド クライアントの種類のルール

<CommandClientTypeRule> 要素を使用します。 使用される表示の種類を検出するルールを指定します。

Type の値は、次に対応します。

Value プレゼンテーション
Modern コマンド バーは、タブレット PC 用 Dynamics 365を使用して表現されます。
Refresh コマンド バーは、更新されたユーザー インターフェイスを使用して表示されます。
Legacy リボンは、更新されなかったテーブルのフォーム、または Dynamics 365 for Outlookのリスト ビューで表示されます。

Crm クライアントの種類のルール

<CrmClientTypeRule> 要素を使用して、使用するクライアントの種類に応じてルールの定義を許可します。 種類のオプションは次のとおりです。

  • Web

  • Outlook

Crm オフライン アクセス状態ルール

<CrmOfflineAccessStateRule> 要素を使用します。 この条件は、オフライン アクセス対応 Microsoft Office Outlook 用 Dynamics 365 が現在オフラインであるかどうかに基づいてリボン要素を有効にする場合に使用します。

Crm Outlook クライアントの種類のルール

<CrmOutlookClientTypeRule> 要素を使用します。 特定の種類の Dynamics 365 for Outlook でのみボタンを表示する場合は、このルールを使用します。 種類のオプションは次のとおりです。

  • CrmForOutlook

  • CrmForOutlookOfflineAccess

カスタム ルール

<CustomRule> 要素を使用します。 Promise (統一インターフェイス) またはブール値 (統一インターフェイスおよび Web クライアント) を返す JavaScript Web リソース内の関数を呼び出す際は、この種類のルールを使用します。

function EnableRule()
{
    const value = Xrm.Page.getAttribute("column1").getValue();
    return value === "Active";
}

注意

すぐに値を返さないユーザー定義ルールは、リボンのパフォーマンスに影響を与える可能性があります。 完了するまで時間がかかることがあるロジックを実行する必要がある場合 (例えば、ネットワーク要求)、次の方式を使用してユーザー定義ルールを非同期にしてください。

統一インターフェイス ルールは、非同期ルール評価用にブール値よりも Promise を返すことをサポートします。 Promise が 10 秒以内に解決されない場合は、ルールは false 値に解決されます。

注意

Promise ベースのルールは統一インターフェイスでのみ実行されるので、従来の Web クライアントがまだ使われている場合は使用できません。

// Old synchronous style
/*
function EnableRule() {
   const request = new XMLHttpRequest();
   request.open('GET', '/bar/foo', false);
   request.send(null);
   return request.status === 200 && request.responseText === "true";
}
*/

// New asynchronous style
function EnableRule() {
   const request = new XMLHttpRequest();
   request.open('GET', '/bar/foo');

   return new Promise(function(resolve, reject) {
       request.onload = function (e) {
           if (request.readyState === 4) {
               if (request.status === 200) {
                   resolve(request.responseText === "true");
               } else {
                   reject(request.statusText);
               }
           }
       };
       request.onerror = function (e) {
           reject(request.statusText);
       };

       request.send(null);
   });
}

エンティティ ルール

<EntityRule> 要素を使用します。 EntityRule では、現在のテーブルを評価できます。 これは、特定のテーブルではなくテーブル テンプレートに適用するユーザー定義のアクションを定義する場合に有効です。 たとえば、一部の特定のテーブルを除くすべてのテーブルへのリボン要素の追加が必要な場合があります。 すべてのテーブルに適用されるテーブル テンプレートのカスタムアクションを定義し、除外する必要のあるものは EntityRule を使ってフィルタリングする方が簡単です。

EntityRule には、テーブルをフォームで表示するか、リスト (HomePageGrid) で表示するかを指定するオプションのコンテキスト パラメータも含まれています。 オプションの AppliesTo パラメータに SelectedEntity または PrimaryEntity を設定することで、テーブルがサブグリッドで表示されているかどうかを区別することができます。

フォーム状態ルール

<FormStateRule> 要素を使用します。 FormState ルールは、レコードを表示している現在のフォームの種類を判断する使用します。 状態には次のオプションがあります。

  • Create

  • Existing

  • ReadOnly

  • Disabled

  • BulkEdit

Or ルール

<OrRule> 要素を使用します。 OrRule を使用すると、複数の有効化ルールの種類に対する既定の AND による比較を無効にすることができます。 確認のために使用可能な複数の有効な結合を定義するには、OrRule 要素を使用します。

Outlook アイテム追跡ルール

<OutlookItemTrackingRule> 要素を使用します。 レコードが Power Apps で追跡されているかどうかを判断するには、この要素に対して TrackedInCrm パラメーターを使用します。

Outlook バージョン ルール

<OutlookVersionRule> 要素を使用します。 このルールは、次に示す特定のバージョンの Office Outlook のリボン要素を有効にする場合に使用します。

  • 2003

  • 2007

  • 2010

ページ ルール

<PageRule> 要素を使用します。 この種類のルールでは、表示されているページの URL を確認します。 Addressが一致した場合は true を返します。

レコード特権ルール

<RecordPrivilegeRule> 要素を使用します。 このルールは、現在のユーザーが特定のレコードに対して特権を持っているかどうかを判断する場合に使用します。 これらの特権には現在のユーザーとレコードを共有している別のユーザーによって取得された特権も含まれるため、テーブルの特権とは異なります。

選択カウント ルール

<SelectionCountRule> 要素を使用します。 リストに対して表示されるリボンで、指定した最大数または最小数のレコードがグリッド内で選択された場合にボタンを有効にするには、この種類のルールを使用します。 たとえば、レコードを統合するボタンであれば、リボン コントロールを有効にする前に少なくとも 2 つのレコードが選択されていることを確認する必要があります。

値ルール

<ValueRule> 要素を使用します。 このルールは、フォームに表示されているレコード内の特定の列の値を確認する場合に使用します。 確認するには、FieldValue を指定する必要があります。

注意

フォーム上で、ValueRule にて指定した列を機能させるには、フォームの一部である必要があります。 グリッドまたはサブグリッドでは、列はグリッド列の 1 つである必要があります。

クイック アクション ルールを表示

<EnableRule> 要素を使用します。 このルールを使用して、コマンドをクイック アクションとしてのみ表示します。

<CommandDefinition Id="new.contact.Command.Call">
  <EnableRules>
    <EnableRule Id="Mscrm.SelectionCountExactlyOne" />
    <EnableRule Id="Mscrm.ShowOnQuickAction" />
  </EnableRules>
  <DisplayRules />
  <Actions>
    <JavaScriptFunction FunctionName=" simplealert" />
  </Actions>
</CommandDefinition>

グリッドとクイック アクションに表示ルール

<EnableRule> 要素を使用します。 このルールを使用して、コマンドをホームページ グリッドおよびクイック アクションに表示します。

<CommandDefinition Id="new.contact.Command.Call">
  <EnableRules>
    <EnableRule Id="Mscrm.SelectionCountExactlyOne" />
    <EnableRule Id="Mscrm.ShowOnGridAndQuickAction" />
  </EnableRules>
  <DisplayRules />
  <Actions>
    <JavaScriptFunction FunctionName=" simplealert" />
  </Actions>
</CommandDefinition>

グリッドに表示ルール

<EnableRule> 要素を使用します。 このルールを使用して、クイック アクション コマンドをホームページ グリッドにのみ表示します。 つまり、このコマンドを使用して、既存のクイック アクションを非表示にすることができます。

<CommandDefinition Id="new.contact.Command.Call">
  <EnableRules>
    <EnableRule Id="Mscrm.SelectionCountExactlyOne" />
    <EnableRule Id="Mscrm.ShowOnGrid" />
  </EnableRules>
  <DisplayRules />
  <Actions>
    <JavaScriptFunction FunctionName=" simplealert" />
  </Actions>
</CommandDefinition>

関連項目

コマンドとリボンのカスタマイズ
リボン コマンドを定義する
リボンの表示ルールの定義

注意

ドキュメントの言語設定についてお聞かせください。 簡単な調査を行います。 (この調査は英語です)

この調査には約 7 分かかります。 個人データは収集されません (プライバシー ステートメント)。