Dataverse レコードの主キー値がわからない場合は、データ統合シナリオで代替キーを使用してデータ操作を実行します。 定義されているテーブルに対してのみ、代替キーを使用できます。 ほとんどの Dataverse テーブルには、代替キーを含めるようにカスタマイズしない限り、代替キーはありません。
テーブルの代替キーを定義および特定する方法については、次の記事を参照してください。
.NET用の Dataverse Web API または SDK を使用して、代替キーを操作します。
Web API を使用する場合は、URL を使用して特定のレコードを参照します。 次に、 POST、 PATCH、または DELETE HTTP メソッドを使用して、データ操作を実行します。 また、URL を使用して、 @odata.bind 構文を使用するか、関数とアクションのパラメーターとして、単一値ナビゲーション プロパティの値を設定します。
次の表は、相対 URL を使用してレコードを参照する方法の例を示しています。
| 状況 | 例 |
|---|---|
| 主キーを使用する |
/accounts(00000000-0000-0000-0000-000000000001) またはaccounts(accountid=00000000-0000-0000-0000-000000000001)systemuser および team エンティティ タイプについては、次の注記を参照 |
| 単一の代替キーを使用する | /accounts(accountnumber='ABC123') |
| 複数要素の代替キー付き | /contacts(firstname='Joe',emailaddress1='abc@example.com') |
| 検索列を使用する 代替キーを使用する | /accounts(_primarycontactid_value=00000000-0000-0000-0000-000000000002)ルックアップ列の代替キーを定義する場合は、対応する Lookup プロパティの名前を使用する必要があります。 検索プロパティは、次の名前付け規則に従います: _<name of single-valued navigation property>_value。 |
注意
エンティティ型 systemuser および team エンティティ型が principal エンティティ型から継承される方法のため、名前付き主キーを使用してこれらのエンティティを参照することはできません。 これらのエンティティの両方の主キーは ownerid または systemuserid ではなく、teamidです。
principal エンティティ型は、GET 操作をサポートしていません。 詳細: EntityType の継承
Web API を用いた代替キー使用時の例外
代替キーを使用する場合は、次の条件と考えられる例外に注意してください。
一意キーとして定義されていない列を指定すると、エラーが発生します。 エラー メッセージは、
The key in the request URI is not valid for resource 'Microsoft.Dynamics.CRM.<table logical name>'. Ensure that the names and number of key properties match the declared or alternate key properties for the resource 'Microsoft.Dynamics.CRM.<table logical name>'.です代替キー値には、一部の特殊文字を含めることはできません。
次の文字
/、<、>、*、%、&、:、\\、?、+の代替キー値はサポートされていません。 これらの特殊文字は、URL パス セグメントで予約されているか、構造的に重要です。 これらの値を URL のかっこ内に含むGET要求を送信すると、Dataverse はエラーを返します。 回避策は、1 つのレコードを取得するのではなく、代替キー値と$filterを使用して、代替キー値と一致する 1 つのレコードを含むコレクションを取得することです。たとえば、失敗するこのリクエストの代わりに:
GET [Organization URI]/api/data/v9.2/new_skts(new_name='M%26M')$filterクエリを使用します。GET [Organization URI]/api/data/v9.2/new_skts?$filter=new_name eq 'M%26M'&$select=new_nameレコードにのみアクセスする必要がある場合は、返された
valueコレクション内の最初の (および唯一の) 一致するレコードからデータを取得できます。 レコードの更新や削除など、他のアクションを実行する必要がある場合は、この方法を使用して一致するレコードの ID を取得し、代替キーの値ではなく ID 値を使用してレコードを従来参照できます。注意
パラメーター エイリアス (
@param) は、代替キー構文では機能しません。 キー述語でパラメーターエイリアスを使用すると、特殊文字のない値であっても400エラーが返されます。$filterを代わりに使用します。
関連項目
テーブルの代替キーを定義する
変更の追跡を使用してデータを外部システムに同期
Upsert を使用してレコードを挿入または更新