次の方法で共有


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

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

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

現象

Request

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

回答

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}'

現象

Request

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

回答

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 リソースが見つかりませんでした

現象

Request

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

回答

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 で無効なプロパティ {property name} が見つかりました。{entity name}'

現象

Request

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

{
 "Name": "Account name"
}

回答

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 name}' のユーザーによって提供されるペイロードで識別されるエラー

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

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

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

現象

Request

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

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

回答

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

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

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

回避する方法

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

InnerException : System.ArgumentException: Stream が読み取れなかった

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

現象

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

回答

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 要求」を参照してください。

関連項目