Dataverse Web API クライアント エラーのトラブルシューティング

この記事では、 Dataverse Web API を使用するときに発生する可能性がある一般的なクライアント エラーと、それらを回避する方法について説明します。

セグメントのリソースが見つかりません

現象

要求

GET [Organization URI]/api/data/v9.2/Account HTTP/1.1

Response

HTTP/1.1 404 Not Found

{
 "error": {
  "code": "0x8006088a",
  "message": "Resource not found for the segment 'Account'."
 }
}

原因

このエラーは、リソースの名前が正しくない場合に発生します。 そのリソースは、エンティティ セットの名前、関数、またはアクションである可能性があります。 これらのリソース名では、大文字と小文字が区別されます。 前の例では、 というエンティティ セットがありますが、 という accounts名前 Accountのエンティティ セットはありません。

リソースがカスタム プロセス アクションとして定義されたアクションである場合、 カスタム プロセス アクションが非アクティブな場合にもこのエラーが発生する可能性があります。

回避する方法

型 'Microsoft.Dynamics.CRM' の '{property name}' という名前のプロパティが見つかりませんでした。{entity name}'

現象

要求

GET [Organization URI]/api/data/v9.2/accounts?$select=Name HTTP/1.1

Response

HTTP/1.1 400 Bad Request

{
 "error": {
  "code": "0x0",
  "message": "Could not find a property named 'Name' on type 'Microsoft.Dynamics.CRM.account'."
 }
}

原因

このエラーは、プロパティの名前が正しくない場合に発生します。 プロパティ名では、大文字と小文字を区別します。

前の例では、 という名前 nameのプロパティがありますが、 という名前 Nameのプロパティはありません。

回避する方法

使用する名前が CSDL $metadata ドキュメントに存在することを確認します。 詳細については、「 Web API のプロパティ」を参照してください。

要求 URI に一致する HTTP リソースが見つかりませんでした

現象

要求

POST [Organization URI]/api/data/v9.2/WhoAmI

Response

HTTP/1.1 404 Not Found

{
 "error": {
  "code": "",
  "message": "No HTTP resource was found that matches the request URI '[Organization URI]/api/data/v9.2/WhoAmI'."
 }
}

原因

このエラーは、正しくない HTTP メソッドが関数またはアクションに適用された場合に発生します。 この場合、 WhoAmI 関数 では を使用 GET する必要がありますが、使用 POST されました。

回避する方法

使用している OData 操作の種類と、使用する適切な HTTP メソッドに注意してください。 詳細については、以下を参照してください:

エンティティ 'Microsoft.Dynamics.CRM で無効なプロパティ {プロパティ名} が見つかりました。{entity name}'

現象

要求

POST [Organization URI]/api/data/v9.2/accounts HTTP/1.1

{
 "Name": "Account name"
}

Response

HTTP/1.1 400 Bad Request

{
 "error": {
  "code": "0x0",
  "message": "An error occurred while validating input parameters: 
    Microsoft.Crm.CrmException: Invalid property 'Name' was found in entity 'Microsoft.Dynamics.CRM.account'. 
    ---> Microsoft.OData.ODataException: Does not support untyped value in non-open type.<truncated for brevity>"
 }
}

原因

このエラーは、プロパティの名前が正しくないために発生します。 プロパティ名は大文字と小文字が区別され Name 、 ではなく name使用されました。

回避する方法

使用するプロパティ名が CSDL $metadata ドキュメントに存在することを確認します。 詳細については、「 Web API のプロパティ」を参照してください。

Entity '{entity name}' のユーザーによって提供されるペイロードで識別されるエラー

このエラーでは、2 つの異なる問題が発生する可能性があります。 違いは InnerException にあります。

InnerException: Microsoft.OData.ODataException: ペイロードに宣言されていないプロパティ [...] が見つかりました

このエラーは、無効なナビゲーション プロパティ名が要求と共に送信されたときに発生します。

現象

要求

POST [Organization URI]/api/data/v9.0/contacts HTTP/1.1

{
  "firstname":"test",
  "lastname":"contact",
  "parentcustomerid@odata.bind": "accounts(a779956b-d748-ed11-bb44-6045bd01152a)"
}

Response

HTTP/1.1 400 Bad Request

{
    "error": {
        "code": "0x80048d19",
        "message": "Error identified in Payload provided by the user for Entity :'contacts'  ---->  
        InnerException : Microsoft.OData.ODataException: An undeclared property 'parentcustomerid' 
        which only has property annotations in the payload but no property value was found in the payload. 
        In OData, only declared navigation properties and declared named streams can be represented as 
        properties without values <truncated for brevity>".
    }
}

原因

このエラーは、 という名前 parentcustomeridの連絡先エンティティ型に単一値ナビゲーション プロパティがないために発生します。 詳細については、「 EntityType > の単一値ナビゲーション プロパティ」を参照してください。

parentcustomerid は、連絡先テーブル内の参照列の論理名です。 すべての参照は、OData の単一値ナビゲーション プロパティによって表されます。 参照プロパティの名前は、対応する単一値ナビゲーション プロパティ名と常に一致するとは限りません。

この場合、 parentcustomerid 列は顧客参照の種類であり、アカウントまたは連絡先テーブルのいずれかにリンクする可能性がある一種の マルチテーブル参照 です。 この顧客参照をサポートするために、2 つの個別のリレーションシップがあり、それぞれ異なる単一値ナビゲーション プロパティがあります。 この場合の正しい単一値ナビゲーション プロパティは です parentcustomerid_account

回避する方法

使用するナビゲーション プロパティ名が CSDL $metadata ドキュメントに存在することを確認します。 詳細については、「 Web API ナビゲーション プロパティ」、特に 「複数テーブル参照 」セクションを参照してください。

InnerException : System.ArgumentException: Stream が読み取り可能ではなかった

このエラーは、 バッチ操作を実行するときに発生します。

現象

要求を送信すると、次の $batch エラーが発生します。

Response

HTTP/1.1 400 Bad Request

--batchresponse_5bd81edb-2ef9-4269-85c3-4623981e6c6e
Content-Type: application/http
Content-Transfer-Encoding: binary

HTTP/1.1 400 Bad Request
REQ_ID: 4c8c75eb-10bf-47f9-9998-c119146d511f
Content-Type: application/json; odata.metadata=minimal
OData-Version: 4.0

{"error":{"code":"0x80048d19","message":"Error identified in Payload provided by the user for Entity :'accounts',
For more information on this error please follow this help link https://go.microsoft.com/fwlink/?linkid=2195293
---->  InnerException : System.ArgumentException: Stream was not readable.\r\n
at System.IO.StreamReader..ctor(Stream stream, Encoding encoding, Boolean detectEncodingFromByteOrderMarks, Int32 bufferSize, Boolean leaveOpen)\r\n
at System.IO.StreamReader..ctor(Stream stream, Encoding encoding)\r\n
at Microsoft.OData.JsonLight.ODataJsonLightInputContext.CreateTextReader(Stream messageStream, Encoding encoding)\r\n
at Microsoft.OData.JsonLight.ODataJsonLightInputContext..ctor(ODataMessageInfo messageInfo, ODataMessageReaderSettings messageReaderSettings)\r\n
at Microsoft.OData.Json.ODataJsonFormat.CreateInputContext(ODataMessageInfo messageInfo, ODataMessageReaderSettings messageReaderSettings)\r\n
at Microsoft.OData.ODataMessageReader.ReadFromInput[T](Func`2 readFunc, ODataPayloadKind[] payloadKinds)\r\n
at System.Web.OData.Formatter.Deserialization.ODataResourceDeserializer.Read(ODataMessageReader messageReader, Type type, ODataDeserializerContext readContext)\r\n
at System.Web.OData.Formatter.ODataMediaTypeFormatter.ReadFromStream(Type type, Stream readStream, HttpContent content, IFormatterLogger formatterLogger)."}}
--batchresponse_5bd81edb-2ef9-4269-85c3-4623981e6c6e--

原因

この逆シリアル化エラーは、バッチ要求本文で CRLF 以外の行末が使用されていることが原因で発生します。

使用するエディターによっては、これらの印刷以外の文字が見えにくい場合があります。 Notepad++ を使用する場合は、[すべての文字を表示] オプションを使用して、これらの文字を表示できます。

このペイロードは次の機能を持ちます。

すべての行の CRLF 終了を含むバッチ要求本文を示すスクリーンショット。

最後の行が で CRLF終わらないため、このペイロードは失敗します。

最後の行に CRLF が見つからないバッチ要求本文を示すスクリーンショット。

この場合、最後の行の末尾に復帰を追加するだけで十分です。

回避する方法

要求本文のすべての行末尾が $batch であることを CRLF確認します。 を使用 CRLFできない場合は、バッチ要求本文の末尾に 2 つの行以外CRLF の末尾を追加して、この逆シリアル化エラーを解決します。 詳細については、「 Batch 要求」を参照してください。

関連項目