Microsoft Dynamics CRM 2015 - создание объекта с использованием OData API

Не уверены, почему следующий запрос дает ошибку следующим образом:

Ошибка обработки потока запросов. Запрос должен быть допустимым объектом ресурса верхнего уровня.

Запрос (некоторые детали были скрыты по понятным причинам):

POST http://someUrl.com/someUrl/XRMServices/2011/OrganizationData.svc/someSet HTTP/1.1
Connection: Keep-Alive
Content-Type: application/json; charset=utf-8
Accept-Encoding: gzip, deflate
Content-Length: 387
Host: someUrl.com

{
    "paymentid": {
        "Id": "00e3f661-8d28-e321-896e-00155dfd1d05",
        "LogicalName": "payment"
    },
    "invoiceid": {
        "Id": "00e3f661-8d28-e411-896e-00155dfd1d05",
        "LogicalName": "invoice"
    },
    "AppliedAmount": 1317.53000,
    "name": "Payment Applied",
    "postingstatus": "Posted",
    "transactioncurrencyid": {
        "Id": "80870a9b-329e-d421-8a22-00155d025001",
        "LogicalName": "transactionCurrency"
    }
}

Все логические имена были получены в результате выполнения следующего запроса:

select
    LogicalName
from 
    NHLPA_MSCRM.dbo.EntityView
where
    BaseTableName = 'paymentbase' -- | invoicebase | transactioncurrencybase

1 ответ

Резюме: используйте OrganizationData.svc/someSet URL-адрес, чтобы получить список существующих сущностей, предоставляя совершенную ссылку на необходимую структуру JSON (минус _metaData свойства)

Так что проблема оказалась довольно простой.

Лицо someSet не было проблемой, как обозначается возможность доступа http://someUrl.com/someUrl/XRMServices/2011/OrganizationData‌​.svc/someSet без проблем.

Далее углубляясь в вещи, это были внутренние логические сущности (платеж, счет, валюта транзакции). Как уже упоминалось, эти логические имена были получены из базы данных, которая соответствовала странице настроек объекта (изображение ниже).

введите описание изображения здесь

Тем не менее, все следующие URL не будут разрешены:

  • http://someUrl.com/someUrl/XRMServices/2011/OrganizationData‌​.svc/paymentSet
  • http://someUrl.com/someUrl/XRMServices/2011/OrganizationData‌​.svc/invoiceSet
  • http://someUrl.com/someUrl/XRMServices/2011/OrganizationData‌​.svc/transactionCurrencySet

Проблема заключалась в том, что, несмотря на то, что во всех местах, где вы найдете логическое имя сущности, строчные буквы, первую букву нужно было использовать с большой буквы, например:

  • http://someUrl.com/someUrl/XRMServices/2011/OrganizationData‌​.svc/PaymentSet
  • http://someUrl.com/someUrl/XRMServices/2011/OrganizationData‌​.svc/InvoiceSet
  • http://someUrl.com/someUrl/XRMServices/2011/OrganizationData‌​.svc/TransactionCurrencySet

И рабочая полезная нагрузка:

{
    "paymentid": {
        "Id": "00e3f661-8d28-e321-896e-00155dfd1d05",
        "LogicalName": "Payment"
    },
    "invoiceid": {
        "Id": "00e3f661-8d28-e411-896e-00155dfd1d05",
        "LogicalName": "Invoice"
    },
    "AppliedAmount": 1317.53000,
    "name": "Payment Applied",
    "postingstatus": "Posted",
    "TransactionCurrencyId": {
        "Id": "80870a9b-329e-d421-8a22-00155d025001",
        "LogicalName": "TransactionCurrency"
    }
}