エンティティは、Dynamics 365 Customer Engagement (オンプレミス) のビジネス データをモデル化および管理するために使用されます。 たとえば、取引先企業、キャンペーン、インシデント (ケース) などのエンティティを使用して、販売、マーケティング、サービスのアクティビティを追跡およびサポートできます。 エンティティには一連の 属性 があり、各属性は特定の型のデータ項目を表します。 たとえば、アカウント エンティティには、 Name
、 Address
、および OwnerId
属性があります。 概念的には、エンティティはデータベース テーブルのようなもので、エンティティ属性はテーブル列に対応します。 Dynamics 365 Customer Engagement (オンプレミス) でエンティティ レコード (または単にレコード) を作成することは、データベース テーブルに行を追加するのと同じです。 エンティティは、システム、ビジネス、カスタムの 3 つのカテゴリに分かれています。 ビジネス データを操作する開発者は、ビジネス エンティティとカスタム エンティティを使用します。 システム エンティティは、ワークフローや非同期ジョブなど、すべての内部プロセスを処理するために Dynamics 365 Customer Engagement (オンプレミス) によって使用されます。 システム エンティティを削除またはカスタマイズすることはできません。
ビジネス エンティティは Dynamics 365 Customer Engagement (オンプレミス) の既定のインストールの一部であり、カスタマイズ ユーザー インターフェイスに表示されます。 取引先企業、連絡先、およびレターは、ビジネス エンティティの例です。 インストール後、Dynamics 365 Customer Engagement (オンプレミス) にカスタム エンティティを追加して、組織の特定のビジネス ニーズに対応できます。 Dynamics 365 Customer Engagement (オンプレミス) ソリューションでは、ビジネス エンティティとカスタム エンティティと属性をカスタマイズ可能またはカスタマイズ不可に設定できます。 カスタマイズ可能なエンティティを変更するには、名前を変更したり、新しい属性を追加したり、重複検出やキューのサポート設定などのさまざまな設定を変更したりできます。 カスタマイズできないエンティティは変更できません。 カスタマイズ、アンマネージド ソリューション、マネージド プロパティの詳細については、「 Dynamics 365 Customer Engagement (オンプレミス) ソリューションを使用した拡張機能のパッケージ化と配布」を参照してください。
事前バインドされたプログラミング モデルを使用している場合、エンティティは、アカウント エンティティを表す Account
クラスなどのクラスによって表されます。 エンティティ属性は、クラス プロパティによって表されます。 このクラスは、CrmSvcUtil ツールによって生成されます。 詳細については、「 WCF 事前バインド (厳密に型指定された) プログラミング」を参照してください。 または、動的アプローチを使用して、エンティティ データを操作するプログラムを記述することもできます。 詳細については、「 WCF 遅延バインド (緩やかに型指定された) プログラミング」を参照してください。
注
Dynamics 365 Customer Engagement (オンプレミス) Web サービスでは、"エンティティ属性" という用語は、用語 "attribute" と "property" (クラス プロパティ) という用語と同じ意味で使用されます。
エンティティ メタデータ
Dynamics 365 Customer Engagement (オンプレミス) 組織のメタデータには、エンティティ、属性、およびエンティティ間のリレーションシップの定義が含まれています。 詳細については、「 Dynamics 365 Customer Engagement (オンプレミス)のメタデータモデルとデータ モデル」を参照してください。 開発者は、組織のすべてのメタデータを検索できると便利な場合が多数あります。 メタデータを検索して参照する方法はいくつかあります。
エンティティ メタデータ ブラウザーを使用すると、Dynamics 365 Customer Engagement (オンプレミス) でエンティティとそのプロパティを表示できます。 詳細については、「 組織のメタデータを参照する」を参照してください。
次のサンプルを使用して、組織のメタデータを生成できます。
エンティティ間のリレーションシップには、一対多、多対一、多対多のリレーションシップを作成できます。 多対多リレーションシップのレコードは、交差エンティティに格納されます。 リレーションシップが定義されたら、 AssociateRequest メッセージまたは Associate メソッドを使用して、指定したレコード間のリンクを作成し、 DisassociateRequest メッセージまたは Disassociate メソッドを使用して、指定したレコード間のリンクを削除します。
一対多リレーションシップと多対一リレーションシップでは、親エンティティ レコードに対するいくつかのアクションが子エンティティ レコードに影響します。 連鎖動作を持つアクションには、Assign、Delete、Merge、Share、Unshare、Reparent などがあります。 詳細については、「 エンティティリレーションシップの動作」を参照してください。
エンティティ メタデータで使用される名前
エンティティ、属性、リレーションシップには、いくつかの異なる名前があります。 次の表に、メタデータで使用されるさまざまな名前を示します。
名前 | Description |
---|---|
表示される名前 | ユーザーに表示される名前。 |
コレクション名の表示 | 表示名の複数形バージョン。 これはエンティティにのみ適用されます。 |
論理名 | エンティティまたは属性の一意の名前。 この名前はすべて小文字です。 |
スキーマ名 | スキーマ名は作成時に指定されます。 一意である必要があります。 論理名を作成するために使用されます。 この名前は Pascal の大文字と小文字にする必要があります。 スキーマ名は、事前バインドされたプログラミングを使用する場合にエンティティのクラスを作成するために使用されます。 |
注
ソリューションのコンテキストで作成されたカスタム エンティティ、属性、およびリレーションシップの場合、論理名とスキーマ名のカスタマイズ プレフィックスは、 Publisher.CustomizationPrefix
属性で定義されます。 プログラムによって作成されたカスタム エンティティの場合は、カスタマイズ プレフィックスを長さ 2 ~ 8 文字の文字列に設定します。すべての英数字は文字で始まります。 "mscrm" で始めることはできません。 エンティティ メタデータのカスタマイズと名前付け規則の詳細については、「 エンティティ メタデータのカスタマイズ」を参照してください。
エンティティ レコードに対するアクション
各エンティティは、レコードの作成や削除、別のユーザーまたはチームへのレコードの割り当てなど、いくつかの異なるアクションをサポートしています。 すべてのエンティティ型または属性ですべてのアクションが許可されるわけではありません。 各属性について、メタデータは、特定のアクションがサポートされているかどうかを定義します。 たとえば、 IsValidForCreate
、 IsValidForRead
、 IsValidForUpdate
などの属性のプロパティは、属性を作成、取得、または更新できるかどうかを示します。 詳細情報: 属性に対する有効な操作。
アクションを実行するには、IOrganizationServiceのいずれかのメソッドを呼び出します。 たとえば、Dynamics 365 Customer Engagement (オンプレミス) でレコードを作成するには、対応するIOrganizationService メッセージで Create.IOrganizationService メソッドまたは Execute.CreateRequest メソッドを使用できます。 これらのアクションを実行するために必要な特権とアクセス権が必要です。 詳細については、「 Dynamics 365 Customer Engagement (オンプレミス)のセキュリティ モデル」を参照してください。
次の表に、ビジネス レコードとカスタム エンティティ レコードで許可されるアクションと、これらのアクションを実行するために使用できるメソッドとメッセージを示します。
アクション | Description | メソッドまたはメッセージ |
---|---|---|
作成 | カスタム エンティティを含む、特定のエンティティ型のレコードを作成します。 |
IOrganizationService.Create CreateRequest |
Update | レコードの内容を変更します。 |
IOrganizationService.Update UpdateRequest |
削除 | レコードを削除します。 |
IOrganizationService.Delete DeleteRequest |
取得 | レコードを取得します。 |
IOrganizationService.Retrieve RetrieveRequest |
複数の値を取得する | レコードのコレクションを取得します。 |
IOrganizationService.RetrieveMultiple RetrieveMultipleRequest |
割り当てる | レコードの所有権を変更します。 ユーザー所有またはチーム所有のエンティティに対して有効です。 | AssignRequest |
共有 | レコードへのアクセスを他のユーザーまたはチームに許可、変更、または取り消します。 ユーザー所有またはチーム所有のエンティティに対して有効です。 | GrantAccessRequest ModifyAccessRequest RevokeAccessRequest |
仲間 | エンティティ間にリレーションシップがあるレコードとレコードのコレクション間のリンクを作成します。 | AssociateRequest |
解除 | エンティティ間にリレーションシップがあるレコードとレコードのコレクション間のリンクを削除します。 | DisassociateRequest |
状態の設定 | レコードの状態を設定します。 | SetStateRequest |
Create
このアクションを実行するには、呼び出し元に Create Privileges が必要です。 アクセス権は作成アクションには適用されませんが、作成後にレコードに適用されます。
レコードを所有したり、新しく作成されたレコードを取得したりするには、ユーザーまたはチームも新しいレコードに対する読み取り特権とアクセス権を持っている必要があります。 たとえば、アカウントの特権を作成している場合は、アカウント レコードを作成し、別のユーザーまたはチームに割り当てることができます。 ただし、アカウントの読み取り特権と新しいレコードに対するアクセス権も持っていない限り、アカウントを作成してその新しいアカウントの所有者にすることはできません。
Update
このアクションを実行するには、呼び出し元が更新対象のエンティティ レコードに対する更新特権とアクセス権を持っている必要があります。
レコードを更新すると、データを指定した属性または null を指定した属性のみが更新されます。 その他の値はすべて同じままです。 また、更新に無効な属性のデータを指定した場合、それらは無視されます。
削除
このアクションを実行するには、呼び出し元に削除されるエンティティ レコードに対する削除権限とアクセス権が必要です。
連鎖ルールは、関連レコードが同時に削除されるかどうかを決定します。 詳細については、「 エンティティリレーションシップの動作」を参照してください。
通常、誤って入力したレコードのみを削除する必要があります。 レコードの種類によっては、レコードを削除する代わりに非アクティブ化または閉じることもできます。 すべてのレコードの種類を削除できるわけではありません。
取得
このアクションを実行するには、呼び出し元が取得したエンティティ レコードに対する取得特権とアクセス権を持っている必要があります。
複数の値を取得する
このアクションを実行するには、呼び出し元が取得したエンティティ レコードに対する取得特権とアクセス権を持っている必要があります。
クエリ パラメーターに基づいてレコードのコレクションを取得するには、クエリ式または FetchXML クエリ言語を使用します。 クエリ式を使用すると、クラス階層を使用してクエリ ツリーを作成できます。 クエリ式を使用するメソッドは、厳密に型指定されたレコードのコレクションを返します。 FetchXML を使用すると、XML 言語を使用してクエリを作成できます。 FetchXML は XML 文字列を返します。 そのため、クエリ結果を使用するには、より多くのデータ操作を行う必要があります。 詳細については、「 データを取得するクエリの作成」を参照してください。
割り当てる
ユーザー所有またはチーム所有のエンティティの場合は、新しい所有者にレコードを割り当てます。 詳細については、「 エンティティの所有権」を参照してください。 このアクションを実行するには、呼び出し元にエンティティ レコードに対する割り当て権限とアクセス権が必要です。
連鎖ルールによって、関連レコードが別のユーザーに同時に割り当てられるかどうかが決まります。 詳細については、「 エンティティリレーションシップの動作」を参照してください。
レコードが別のユーザーまたはチームに割り当てられている場合でも、 ShareToPreviousOwnerOnAssign
属性が true
に設定されている場合、前の所有者はこのレコードにアクセスできます。 ただし、前の所有者はレコードの所有権を持たなくなります。
注
レコードの所有権を別のユーザーに変更した後、ユーザーがそのレコードに対する "ユーザー" レベルのレコード特権のみを持っている場合、そのレコードにアクセスしようとすると、ユーザーは "アクセス拒否" エラーを受け取ります。
共有
ユーザー所有またはチーム所有のエンティティの場合は、レコードを他のユーザーまたはチームと共有できます。 このアクションを実行するには、呼び出し元に GrantAccess、ModifyAccess、RevokeAccess 権限、およびエンティティ レコードに対するアクセス権が必要です。
連鎖ルールは、関連レコードが同時に共有されるかどうかを決定します。 詳細については、「エンティティリレーションシップの動作」を参照してください。
共有は、Dynamics 365 Customer Engagement (オンプレミス) ユーザーが必要に応じて他のユーザーに顧客情報へのアクセスを許可する方法です。 たとえば、営業担当者は、重要な販売の進行状況を両方とも追跡できるように、営業案件を別の営業担当者と共有することを決定する場合があります。
GrantAccessRequestを使用してレコードを共有します。 ModifyAccessRequestを使用して、レコードの共有方法を変更します。 RevokeAccessRequestを使用して、レコードのすべての共有を削除します。
ユーザーは、Dynamics 365 Customer Engagement (オンプレミス) の他のユーザーと、連絡先、アカウント、営業案件、ケース、注文などの顧客関連のレコードを共有する共有権限を持っている必要があります。 レコードを共有する場合は、共有レコードに付与する権限を指定できます。
次の一覧では、レコードを共有するための規則について説明します。
レコードに対する共有権限を持つすべてのユーザーは、追加のユーザーまたはチームと共有できます。
レコードに対する共有権限を持つすべてのユーザーは、そのレコードのアクセス権を設定できます。 これらのアクセス権は、レコードを共有するユーザーがそのレコードにアクセスする方法を制御します。
共有レコードのアクセス権は、読み取りまたは書き込みなど、任意のアクセス権に設定できます。
共有レコードに対するアクセス権は、レコードが共有されるユーザーごとに異なる場合があります。
レコードは、同じセキュリティ プリンシパルと 1 回だけ共有できます。 ユーザーは、そのレコードに対する共有権限を持っている場合、レコードを共有できます。
ビジネス レコードに対する共有権限を持つすべてのユーザーは、レコードが共有されているユーザーのアクセス権を変更できます。
ビジネス レコードに対する共有権限を持つすべてのユーザーは、レコードが共有されている指定されたユーザーの共有を削除できます。
ビジネス レコードに対する共有権限を持つすべてのユーザーは、そのレコードが以前に共有されていたすべてのユーザーの共有を削除できます。
仲間
このアクションを実行するには、呼び出し元に、更新されるレコードに対する関連付け特権とアクセス権が必要です。
関連付けでは、指定したリレーションシップに対して、指定したレコードと指定したコレクション内の各レコードの間に、1 つのトランザクションに複数の関連付けが作成されます。
一対多リレーションシップの場合、このメソッドは、関連レコード内の ReferencingAttribute を指定したレコードの ID に設定します。
多対多リレーションシップの場合、このメソッドはリレーションシップの交差テーブルにレコードを作成します。このテーブルには、参照先レコードと参照レコードの両方の ID が含まれます。 交差テーブル名は、リレーションシップの IntersectEntityName プロパティで定義されます。
解除
このアクションを実行するには、更新するレコードに対する権限とアクセス権の関連付けを解除する必要があります。
関連付けを解除すると、参照先のレコードを更新して参照し、必要に応じて交差レコードを削除することで、関連付け操作が元に戻されます。 詳細については、「 関連付け」を参照してください。
状態を設定する
このアクションを実行するには、呼び出し元に、更新されるレコードに対する SetState 権限とアクセス権が必要です。
SetStateRequest メッセージは、エンティティ レコードのStateCode
属性とStatusCode
属性を更新します。
エンティティの所有権
エンティティの所有権にはいくつかの種類があります。 カスタム エンティティを含むほとんどのエンティティは、組織またはユーザーまたはチームによって所有されます。 所有者がいない一部のビジネス エンティティ (割引の種類 (割引リスト) など)、所有権は親エンティティの割引によって定義されます。 所有権の種類はエンティティ (テーブル) の作成時に構成され、後で所有権の種類を変更することはできません。 所有権の種類は、レコードに対して実行できる操作の一部を定義します。 エンティティの所有権は、メタデータ プロパティ OwnershipTypeで定義されます。 次の表に、所有権のプロパティを示します。
所有権の種類 | Description |
---|---|
所有している組織 | 所属するデータ、または組織全体で表示できるデータが含まれます。 組織所有のエンティティを割り当てまたは共有することはできません。 たとえば、製品は組織が所有しています。 これらのエンティティには、 organizationid という名前の属性があります。 |
企業所有 | 部署に属するエンティティ。 これらのエンティティには、 owningbusinessunit という名前の属性があります。 |
ユーザーまたはチーム所有 | ユーザーまたはチームに割り当てられます。 これらのエンティティには、取引先企業や連絡先など、顧客に関連するデータが含まれます。 セキュリティは、ユーザーまたはチームの部署に従って定義できます。 これらのエンティティには、 owningteam および owninguser という名前の属性があります。 |
None | これらのエンティティは、別のエンティティによって所有されていません。 |
ユーザーまたはチームの所有権に関する追加情報
AssignRequest メッセージを使用して、レコードの所有権を変更できます。 詳細については、「 割り当て」を参照してください。 ReassignObjectsOwnerRequestまたはReassignObjectsSystemUserRequest メッセージを使用して、所有者のすべてのレコードを一括再割り当てできます。
注
ユーザーまたはチームに所有権を制限することで、組織内の承認されたユーザーにデータへのアクセスを制限します。 ただし、エンティティ レコードを共有することで、追加のユーザーやチームへのデータ アクセスを拡張できます。 別のユーザーまたはチームにレコードを割り当てることもできます。 ユーザー所有またはチーム所有のエンティティのセキュリティを構成すると、組織所有のエンティティよりもセキュリティ ロールのアクセス レベルが高くなります。 組織所有エンティティのセキュリティ ロールには、None と Global の 2 つのアクセス レベルがあります。 ユーザー所有またはチーム所有のエンティティには、グローバル、ディープ、ローカル、基本、なしの 5 つのアクセス レベルがあります。
レコードの状態と状態
ほとんどのビジネス エンティティには、レコードの状態を追跡するための 2 つのプロパティがあります。 これらは StateCode
であり、Web アプリケーションでは Status と呼ばれ、 StatusCode
は Web アプリケーションの Status Reason と呼ばれます。
StateCode
とStatusCode
属性値がリンクされます。
StateCode
属性は、エンティティの状態を表すために内部的に使用されます。
StatusCode
属性は、エンド ユーザーにこの値を表示するために使用されます。 エンティティの有効な状態コードのセットはカスタマイズできませんが、状態コードはカスタマイズ可能です。 ケース エンティティとカスタム エンティティの場合は、状態間の有効な遷移に関する追加の条件を定義できます。 詳細については、「 エンティティ属性メタデータのカスタマイズ 」および「 カスタム状態モデルの遷移の定義」を参照してください。
エンティティ イメージ
特定のシステム エンティティには、イメージ属性があります。 カスタム エンティティにイメージ属性を追加できます。 エンティティにイメージ属性がある場合は、 PrimaryImageAttribute プロパティを設定して、イメージをアプリケーションに表示するかどうかを制御できます。 Web アプリケーションのアプリケーション ユーザーに画像が表示されると、エンティティ レコードの画像をアップロードできます。 次のシステム エンティティにはイメージ属性があります。 アスタリスクが付いているものは、既定で有効になっており、アプリケーションに表示されます。
- アカウント \*
- KbArticle
- キャンペーン
- インシデント
- 競争者 \*
- 接続
- 接触 \*
- コントラクト
- 取引通貨
- EmailServerProfile
- 目標
- 請求書
- 鉛 \*
- メールボックス
- OpportunityProduct
- SalesOrder
- 組織
- 積 \*
- 発行者 \*
- 待ち行列
- 資源 \*
- セールス資料
- 担当地域
- SystemUser \*
詳細情報: 画像データ属性。
こちらも参照ください
管理およびセキュリティエンティティ
エンティティリレーションシップダイアグラムを生成する
カスタム状態モデルの遷移を定義する
Dynamics 365 Customer Engagement (オンプレミス) を使用してビジネス データをモデル化する
エンティティリレーションシップメタデータ
エンティティリレーションシップの動作
Dynamics 365 Customer Engagement のメタデータとデータ モデル (オンプレミス)
Dynamics 365 Customer Engagement のメタデータ モデルを拡張する (オンプレミス)
Dynamics 365 Customer Engagement (オンプレミス) ソリューションを使用した拡張機能のパッケージ化と配布
IOrganizationService エンティティ
Dynamics 365 Customer Engagement (on-premises) のセキュリティ モデル
サンプル: エンティティ イメージの設定と取得
サンプル: チームにレコードを割り当てる
サンプル: GrantAccess、ModifyAccess、RevokeAccess メッセージを使用してレコードを共有する
サンプル: 2 つのレコードをマージする
サンプル: レコードの状態を検証し、レコードの状態を設定する
サンプル: 特定のレコードに関連するレコードをロールアップする