次の方法で共有


Catalog と CatalogAssignment テーブル

CatalogCatalogAssignment テーブルを使用して、ソリューションで使用されるアクションをビジネス イベントとして公開する構造を作成します。 Microsoft Dataverse ビジネス イベントにより、多くのシナリオで Dataverse 経由で他のアプリケーションとの統合を作成できます。 詳細: Microsoft Dataverse ビジネス イベント

カタログには、ご利用のソリューションに関連するイベントが記載されているため、他の人々がそれを利用できるようになります。 ソリューションに関連するイベントをカタログ化しない場合、ソリューションを使用しているユーザーがそれらを利用できない場合があります。

Catalog テーブルを使って、2 レベルの階層を作成します。 これにより、カタログそしてカテゴリー 第二階層のカタログがカテゴリーを表しています。

第一階層のカタログは、ご利用のソリューションを表すものでなければなりません。 第一階層のカタログに関連する複数の第二階層のカタログを使用して、ソリューション内の機能の異なるカテゴリをグループ化します。

ソリューション内のカテゴリを表す第 2 レベルのカタログごとに、CatalogAssignment テーブルを使って、イベントとして使用できるようにするテーブル、カスタム API、またはカスタム プロセス アクションを指定します。

重要

環境メーカー セキュリティ ロールのあるユーザーは、アクションの実行時 がトリガーされたときに Power Automate Dataverse コネクタでカタログ データを表示できます。 他のセキュリティ ロールには、適切なアクセス レベルである、次のテーブルの 読み取り 権限が必要です: カスタム APIプロセスSDK メッセージ

詳細:

例: Contoso の顧客管理

カタログのアイデアを紹介するために、まずは例を挙げてみます。

Contoso の顧客管理ソリューションには、多くのコンポーネントが含まれています。 主要なコンポーネントは、以下のコンポーネントです :

  • テーブル
  • カスタム API
  • カスタム プロセス アクション (ワークフロー)

テーブル

Contoso の顧客管理は、次のテーブルを含むソリューションです。

スキーマ名 表示名 内容
Account アカウント Dataverse システム テーブル
Contact 連絡先 Dataverse システム テーブル
contoso_Membership メンバーシップ カスタム組織所有のテーブル

カスタム API

また、カスタム API アクションをいくつか作成し、POS システム、Web サイト、ERP システムなどから呼び出して、Dataverse 内で発生したイベント以外のものを Dataverse に通知しています:

UniqueName 表示名
contoso_CustomerEnteredStore 入店
contoso_CustomerVisitWebSite Web サイトの訪問
contoso_CustomerPurchasedProduct 購入した製品
contoso_CustomerReturnedProduct 返品された製品

カタログの構造

Contoso の顧客管理ソリューション カタログは次のようになります。

カタログ 内容
Contoso の顧客管理 ルート カタログ
    テーブル 第 2 階層のカタログ カテゴリ
            アカウント CatalogAssignment: エンティティ
            取引先担当者 CatalogAssignment: エンティティ
            メンバーシップ CatalogAssignment: エンティティ
    顧客イベント 第 2 階層のカタログ カテゴリ
            入店 CatalogAssignment: CustomAPI
            Web サイトの訪問 CatalogAssignment: CustomAPI
            製品の購入 CatalogAssignment: CustomAPI
            製品の返品 CatalogAssignment: CustomAPI

使用可能なイベント

CatalogAssignment をテーブルに対して作成すると、そのテーブルの一部のシステム バインド操作がイベントとして使用可能になります。

このカタログでは、次のイベントが利用可能になります :

テーブル イベント 利用可能な理由
アカウント 作成​​
更新プログラム
Delete キー
標準的なデータ操作
アカウント GrantAccess
ModifyAccess
RevokeAccess
ユーザー所有のエンティティを共有できます。
連絡先 作成​​
更新プログラム
Delete キー
標準的なデータ操作
連絡先 GrantAccess
ModifyAccess
RevokeAccess
ユーザー所有のエンティティを共有できます。
メンバーシップ 作成​​
更新プログラム
Delete キー
標準的なデータ操作
N/A contoso_CustomerEnteredStore 明示的なカタログの割り当て
N/A contoso_CustomerVisitWebSite 明示的なカタログの割り当て
N/A contoso_CustomerPurchasedProduct 明示的なカタログの割り当て
N/A contoso_CustomerReturnedProduct 明示的なカタログの割り当て

ほとんどのテーブルでは、作成更新削除イベントに対応しています。 いくつかの例外があります。 ユーザー所有のテーブルは、共有の変更に関するイベントを公開します: GrantAccessModifiedAccess、および RevokeAccess

注意

テーブルにバインドされているカスタム API またはカスタム プロセス アクションも含まれます。

無効になっているカスタム プロセス アクションが表示されますが、有効にして使用するまでイベントは発生しません。

Power Apps でのカタログの作成

カタログカタログの割り当てレコードを Power Apps (https://make.powerapps.com) でサック請求できます。

ソリューションの一部として、常にカタログを作成する必要があります。 次の手順を使用して、カタログ レコードを作成します。

  1. Power Apps にサインインします、

  2. 左のナビゲーション ウィンドウで、ソリューション を選択します。

  3. 使用するソリューションを作成または選択して、新規をクリックします。

  4. メニューからカタログを選択しすると、新しいウィンドウが開きます。

  5. 以下のフィールドに値を入力します:

    フィールド 内容
    親カタログ ソリューション ルートカタログに親カタログを設定しないでください。 それ以外の場合は、ソリューション ルート カタログを設定します。
    一意の名前 一意の名前にはカスタマイズ接頭辞が必要であり、スペースを含めることはできません。 この接頭辞は、ソリューション発行者のカスタマイズ接頭辞と同じである必要があります。
    件名 カタログの新しい名前を入力します。 通常は一意の名前と同じですが、カスタマイズ接頭辞を使わず、スペースを含めます。
    表示名 通常は、名前と同じです。
    説明 カタログに意味のある説明を入力します。
  6. フォームを保存して閉じます。

Power Apps でカタログ割り当てを作成します

Power Apps のカタログを含む同じソリューションを使用する

  1. 新規を選択します。

  2. メニューからカタログの割り当てを選択すると、新しいウィンドウが開きます。

  3. 名前を入力します。 この値は、カスタマイズ接頭辞から始まり、スペースを含めることはできません。 ソリューション発行者に対して定義されたのと同じカスタマイズ接頭辞を使用する必要があります。

  4. カタログ割り当てオブジェクトを設定します。 このルックアップにより、3 つの異なるタイプのレコードを設定できます。

    • カスタム API
    • エンティティ
    • プロセス

    名前を入力することで、探しているタイプを見つけることができます。

  5. カタログを選択する

    注意

    選択するカタログは、カテゴリを表す第 2 レベルのカタログである必要があります。

  6. フォームを保存して閉じます

管理ソリューションのカタログ アイテムのカスタマイズをブロックする

管理ソリューションをインストールするユーザーがカタログとカタログの割り当てをカスタマイズできるようにする場合を除いて、IsCustomizable プロパティを false に設定する必要があります。なぜなら、既定値を使うとカスタマイズできるためです。

これを Power Apps UI で設定するには:

  1. ソリューション内の各カタログまたはカタログ割り当てを選択します

  2. メニューで、省略記号 (...) をクリックし、管理プロパティを選択します。

    省略記号をクリックして、管理プロパティ ボタンを表示します。

  3. 開いたウィンドウで、カスタマイズを許可するの選択を解除します。

    カスタマイズを許可の選択を解除します

  4. 終了をクリックします

テーブル図

次の図は、Catalog テーブルと CatalogAssignment テーブル間の関連付けを示しています

Catalog と CatalogAssignment テーブル図

ParentCatalogId を使用した自己参照関係により、1つのソリューション カタログと、カタログ レコードを使ってカテゴリーを表現した複数のカタログの間に 2 段階の階層を作成できます。

カタログ テーブル列

利用可能なすべての列と関連付けは、Catalog テーブル/エンティティの参照 で利用できます。

次の表には、設定可能なカタログ テーブル/エンティティの選択された列/属性が含まれています。

表示名
SchemaName
LogicalName
内容
カタログ
CatalogId
catalogid
Uniqueidentifier カタログ インスタンスの一意識別子です。
内容
Description
description
String カタログ インスタンスのローカライズされた説明です。
必須
表示名
DisplayName
displayname
String カタログ インスタンスのローカライズされた表示名です。
必須
カスタマイズ可能
IsCustomizable
iscustomizable
ManagedProperty カタログのカスタマイズや削除を行うかどうかを制御します。
これは既定値は true です。 詳細: 管理ソリューションのカタログ アイテムのカスタマイズをブロックする
必須
件名
Name
name
String カタログのプライマリ名です。
必須
親カタログ
ParentCatalogId
parentcatalogid
参照 親カタログを表す一意識別子。
保存後に変更できません。
一意の名前
UniqueName
uniquename
String カタログを表す一意の名前です。
必須
カスタマイズ接頭辞で始める必要があります。

注意

カタログの割り当てをカタログに関連付けると、カタログ割り当てを削除するまでそのカタログを削除できなくなります。

CatalogAssignment テーブルの列

利用可能なすべての列と関連付けは、CatalogAssignment テーブル/エンティティの参照 で利用できます。

次の表には、設定可能な CatalogAssignment テーブル/エンティティの選択された列/属性が含まれています。

表示名
SchemaName
LogicalName
内容
カタログ割り当て
CatalogAssignmentId
catalogassignmentid
Uniqueidentifier カタログ割り当てインスタンスを表す一意識別子です。
カタログ
CatalogId
catalogid
参照 カタログ割り当てに関連付けられたカタログを表す一意識別子です。
必須
カスタマイズ可能
IsCustomizable
iscustomizable
ManagedProperty CatalogAssignment のカスタマイズや削除を行うかどうかを制御します。
これは既定値は true です。 詳細: 管理ソリューションのカタログ アイテムのカスタマイズをブロックする
必須
件名
Name
name
String カタログ割り当てのプライマリ名です。
カタログ割り当てオブジェクト
Object
object
参照 カタログ割り当てに関連付けられたオブジェクトを表す一意識別子です。
必須
保存後に変更できません。
このポリモーフィック ルックアップは、次のテーブルにリンクできます:
  customapi
  エンティティ
  ワークフロー

Web API を使用してこのポリモーフィックな関係を関連付ける場合は、各関係に単一値のナビゲーション プロパティ名を使用する必要があります。

これらの名前は次のとおりです :
  CustomAPIId
  EntityId
  WorkflowId

テーブル、カスタム API、カスタム プロセスアクションに関連付ける場合は、それぞれの値を取得する必要があります。 詳細については CatalogAssignment の項目の ID を取得するを参照してください。

CatalogAssignment 項目の ID を取得します

CatalogAssignment に関連付ける場合は、エンティティの ID、カスタム API、カスタム プロセス アクションを取得する必要があります。

テーブルの ID を取得する

エンティティ テーブルには、各テーブルの行が含まれています。 Web API を使ったこれらのクエリのいずれかを使って、Account テーブルなど特定のテーブルの ID を取得できます :

GET [Organization URI]/api/data/v9.2/EntityDefinitions(LogicalName='account')?$select=MetadataId
GET [Organization URI]/api/data/v9.2/entities?$select=entityid&$filter=name eq 'Account'

カスタム API の ID を取得する

これは、Web API を使って簡単に行うことができます。 次の例では、your_CustomAPINameuniquename を持つカスタム API の customapiid を返します。

GET [Organization URI]/api/data/v9.2/customapis?$select=customapiid&$filter=uniquename eq 'your_CustomAPIName'

カスタム プロセス アクションを取得する

これは、Web API を使って簡単に行うことができます。 次の例では、ExampleCustomProcessActionuniquename を持つカスタム プロセス アクションの workflowid を返します。

GET [Organization URI]/api/data/v9.2/workflows?$select=workflowid,uniquename&$filter=category eq 3 and type eq 1 and endswith(uniquename,'ExampleCustomProcessAction')

注意

ワークフローの uniquename には、Web API のカスタムプロセス アクションの名前の前に付くカスタマイズ用の接頭辞が含まれません。 Web API から呼び出すアクションが new_ExampleCustomProcessAction と命名されている場合、ワークフローの一意の名前は ExampleCustomProcessAction となります。

タイプ1 の行にアクセスしていることを確認してください。 これはワークフローの定義です。

カスタム プロセスのアクション ワークフローは、カテゴリーの値が 3 です。

既存のカタログ割り当てを取得する

次の OData クエリを使用して、カタログ割り当て、割り当てのタイプ、関連付けられているカタログ、および親カタログに関する情報を取得できます。

GET [Organization URI]/api/data/v9.2/catalogassignments?$select=name
    &$expand=CatalogId($select=uniquename;$expand=ParentCatalogId($select=uniquename)),
    EntityId($select=entityid),
    CustomAPIId($select=uniquename),
    WorkflowId($select=uniquename)
    &$filter=name ne null

コードでカタログと CatalogAssignments を作成する

カタログとカタログ割り当てレコードは、Web API または .NET 用 SDK を使って作成できます。

Web API の使用

注意

現時点では、「deep-insert」 を使用してカタログやカタログ割り当てレコードを作成することはできません。

'deep-insert' を使用してカタログレコードの階層を作成できますが、カタログ割り当ては個別に作成する必要があります。

以下の一連の Web API 操作は、UniqueName: ContosoCustomerManagement のソリューションにカタログ階層と CatalogAssignment を作成します。 レコードが作成された際に、ソリューションへの関連付けを設定する MSCRM.SolutionUniqueName リクエストヘッダーの使用に注意してください。

Web API を使用してレコードを作成する セクションを参照してください。 詳細については、基本的な作成作成時のテーブル列の関連付けを参照してください。

ルート カタログを作成する

要求:

POST [Organization URI]/api/data/v9.2/catalogs HTTP/1.1
MSCRM.SolutionUniqueName: ContosoCustomerManagement
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0
Accept: application/json
{
    "name": "Contoso Customer Management",
    "uniquename": "contoso_CustomerManagement",
    "displayname": "Contoso Customer Management",
    "description": "The root catalog for the Contoso Customer Management solution",
    "iscustomizable": {
        "Value": false
    }
}

応答:

HTTP/1.1 204 No Content
OData-EntityId: [Organization URI]/api/data/v9.2/catalogs(00000000-0000-0000-0000-000000000001)

テーブル イベント サブカタログを作成する

要求:

POST [Organization URI]/api/data/v9.2/catalogs HTTP/1.1
MSCRM.SolutionUniqueName: ContosoCustomerManagement
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0
Accept: application/json
{
    "name": "Contoso Customer Management Table Events",
    "uniquename": "contoso_TableEvents",
    "displayname": "Tables",
    "description": "Groups Table events for the Contoso Customer Management Solution",
    "iscustomizable": {
        "Value": false
    },
    "ParentCatalogId@odata.bind": "catalogs(00000000-0000-0000-0000-000000000001)"
}

応答:

HTTP/1.1 204 No Content
OData-EntityId: [Organization URI]/api/data/v9.2/catalogassignments(00000000-0000-0000-0000-000000000002)

テーブル カタログで勘定カタログの割当を登録する

テーブルの ID についての情報は、テーブルの ID を取得するを参照してください。

要求:

POST [Organization URI]/api/data/v9.2/catalogassignments HTTP/1.1
MSCRM.SolutionUniqueName: ContosoCustomerManagement
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0
Accept: application/json
{
    "name": "Account",
    "EntityId@odata.bind": "entities(70816501-edb9-4740-a16c-6a5efbc05d84)",
    "iscustomizable": {
        "Value": false
    },
    "CatalogId@odata.bind": "catalogs(00000000-0000-0000-0000-000000000002)"
}

応答:

HTTP/1.1 204 No Content
OData-EntityId: [Organization URI]/api/data/v9.2/catalogassignments(00000000-0000-0000-0000-000000000003)

SDK for .NET の使用

次のコードは、UniqueName: ContosoCustomerManagement を持つソリューションに、カタログ階層とカタログ割り当てを作成します。

注意

そのソリューションのコンテキストでレコードを作成するには、CreateRequest クラスSolutionUniqueName オプション パラメータを使用します。 詳細情報 : リクエストでオプションのパラメータを渡す

string conn = $@"
Url = {url};
AuthType = OAuth;
UserName = {userName};
Password = {password};
AppId = 51f81489-12ee-4a9e-aaae-a2591f45987d;
RedirectUri = app://58145B91-0C36-4500-8554-080854F2AC97;
LoginPrompt=Auto;
RequireNewInstance = True";

var service = new CrmServiceClient(conn);
// var service = new ServiceClient(conn);

var solutionUniqueName = " ContosoCustomerManagement ";

//Create the root catalog
Catalog rootCatalog = new Catalog
{
    Name = "Contoso Customer Management",
    UniqueName = "contoso_CustomerManagement",
    DisplayName = "Contoso Customer Management",
    Description = "The root catalog for the Contoso Customer Management solution",
    IsCustomizable = new BooleanManagedProperty(false)
};

CreateRequest rootCatalogReq = new CreateRequest {
    Target = rootCatalog
};
rootCatalogReq["SolutionUniqueName"] = solutionUniqueName;

Guid rootCatalogId = ((CreateResponse)service.Execute(rootCatalogReq)).id;

//Create the Table Events Sub-catalog
Catalog tableEvents = new Catalog
{
    Name = "Contoso Customer Management Table Events",
    UniqueName = "contoso_TableEvents",
    DisplayName = "Tables",
    Description = "Groups Table events for the Contoso Customer Management Solution",
    IsCustomizable = new BooleanManagedProperty(false),
    ParentCatalogId = new EntityReference("catalog", rootCatalogId)
};

CreateRequest tableEventsReq = new CreateRequest
{
    Target = tableEvents
};
tableEventsReq["SolutionUniqueName"] = solutionUniqueName;

Guid tableEventsId = ((CreateResponse)service.Execute(tableEventsReq)).id;

//Create the Account Catalog Assignment on the Tables catalog
CatalogAssignment accountAssignment = new CatalogAssignment
{
    Name = "Account",
    IsCustomizable = new BooleanManagedProperty(false),
    Object = new EntityReference("entity",new Guid("70816501-edb9-4740-a16c-6a5efbc05d84")),
    CatalogId = new EntityReference("catalog", tableEventsId)

};

CreateRequest accountAssignmentReq = new CreateRequest
{
    Target = accountAssignment
};
accountAssignmentReq["SolutionUniqueName"] = solutionUniqueName;

Guid accountAssignmentId = ((CreateResponse)service.Execute(accountAssignmentReq)).id;

ソリューション ファイルを編集して、カタログとカタログ割り当てを作成する

ソリューションファイル内で、ファイルを編集してカタログおよびカタログ割り当てを作成できます。

SolutionPackager ツール を使用してソース管理で管理できるファイルにソリューションを抽出します。 続いて、ファイルを編集できます。 olutionPackager を使用して、解凍したファイルをソリューションに戻すことができます。 詳細情報 : ソリューション ファイルによるソース管理

ヒント

ソリューションでいくつかのカタログとカタログ割り当てを作成してから、ソリューションをエクスポートおよび抽出して、複数の例を確認します。

最新版の Microsoft.CrmSdk.CoreTools NuGet パッケージ を使用しているか確認する

ソリューション ファイルを使用してカタログを作成する

ソリューション内では、すべてのカタログが catalogs のフォルダ内に格納されます。 このフォルダー内のフォルダーとファイルを編集し、ソリューション パッケージャーを使用してパックされた後にソリューションをインポートすることにより、カタログを作成、変更、または削除できます。

各カタログは、contoso_CustomerManagement など、カタログの uniquename と一致するフォルダーに入っています。

フォルダー内には、カタログの定義を含む catalog.xml ファイルが入っています。

例:

<catalog uniquename="contoso_CustomerManagement">
    <description default="The root catalog for the Contoso Customer Management solution">
        <label description="The root catalog for the Contoso Customer Management solution" languagecode="1033" />
    </description>
    <displayname default="Contoso Customer Management">
        <label description="Contoso Customer Management" languagecode="1033" />
    </displayname>
    <iscustomizable>0</iscustomizable>
    <name>Contoso Customer Management</name>
</catalog>

catalog 要素 uniquename 属性は、ファイルを含むフォルダーの名前と一致する必要があります。

catalog 要素には、これらの要素が含まれます:

要素 内容
description 既定の説明の値を持つ default 属性があります。
複数の言語が定義されている場合、descriptionlanguagecode の属性に対して 1 つ以上の label 要素を含みます。
displayname 既定の表示名の値を持つ default 属性があります。
複数の言語が定義されている場合、descriptionlanguagecode の属性に対して 1 つ以上の label 要素を含みます。
iscustomizable カタログがカスタマイズ可能かどうか。 0 = false、1 = true
name カタログの名前。

カタログがカテゴリを表す場合、親カタログとの関係は、親カタログの一意の名前を含む uniquename 要素を含む parentcatalogid 要素を使って含まれます。

例:

<catalog uniquename="contoso_TableEvents">
    <description default="Groups Table events for the Contoso Customer Management Solution">
        <label description="Groups Table events for the Contoso Customer Management Solution" languagecode="1033" />
    </description>
    <displayname default="Tables">
        <label description="Tables" languagecode="1033" />
    </displayname>
    <iscustomizable>0</iscustomizable>
    <name>Contoso Customer Management Table Events</name>
    <parentcatalogid>
        <uniquename>contoso_CustomerManagement</uniquename>
    </parentcatalogid>
</catalog>

ソリューション ファイルを使用して CatalogAssignment を作成する

ソリューション内の Assetsフォルダに、catalogassignments.xml ファイルがあります。 すべてのカタログ割り当てがファイルに含まれています。 このファイルを編集して、ソリューション パッケージャーを使用してパックされた後にソリューションをインポートすることにより、カタログ割り当てを作成または変更できます。

例:

<catalogassignments>
    <catalogassignment object.logicalname="account" catalogid.uniquename="contoso_TableEvents" objectidtype="entity">
        <iscustomizable>0</iscustomizable>
        <name>Account</name>
    </catalogassignment>
    <catalogassignment catalogid.uniquename="contoso_CustomerEvents" object.uniquename="contoso_CustomerEnteredStore" objectidtype="customapi">
        <iscustomizable>0</iscustomizable>
        <name>Customer Entered Store</name>
  </catalogassignment>
</catalogassignments>

catalogassignment 要素には次の属性があります:

属性 内容
catalogid.uniquename カタログ割り当ての対象であるサブカタログの一意の名前。
objecttypeid オブジェクトのタイプ。 有効な値は:
entity
customapi
workflow

objectypeid によって、各 catalogassignment 要素には、対応する次の属性のいずれかが必要です:

属性 内容
object.uniquename カスタム api の一意の名前。
object.logicalname エンティティの論理名。
object.workflowid カスタム プロセス アクションの一意の ID 値。

catalogassignment 要素には、これらの要素が含まれます:

要素 内容
iscustomizable カタログ割り当てがカスタマイズ可能かどうか。 0 = false、1 = true
name カタログ割り当ての名前

関連情報

Microsoft Dataverse ビジネス イベント
Web API を使用してエンティティ レコードを作成する
Web API を使用してエンティティ レコードを取得する
.NET 用 SDK を使用してエンティティを作成する
.NET 用 SDK を使用してエンティティを取得する

注意

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

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