Устранить ошибку при глубокой вставке свойства навигации Dynamics WebAPI
Я использую Microsoft Dynamics Web API для записи данных в сущность в Microsoft Dynamics 365. Когда я пытаюсь выполнить глубокую вставку, я получаю сообщение об ошибке
Необъявленное свойство 'ccseq_employeeid', которое имеет только аннотации свойств в полезной нагрузке, но не обнаружило значения свойства в полезной нагрузке. В OData только объявленные свойства навигации и объявленные именованные потоки могут быть представлены как свойства без значений.
Почему я получаю эту ошибку и как ее устранить?
JSON
{
"ccseq_importdate" : "2017-05-28T04:00:00Z",
"ccseq_month" : "1",
"ccseq_year" : "2017",
"ccseq_name" : "Test",
"ccseq_status" : "100000000", "ccseq_ccseq_expensetransactionset_ccseq_expensetransaction_ExpenseTransactionSetID" :
[
{
"ccseq_employeeid@odata.bind": "/systemusers(6d2fd71b-32d1-dd11-a4f5-001a6449bbe7)",
"ccseq_clientid@odata.bind": "/ccseq_clients(663ebd00-73b9-4faf-90ed-f56bb9c2dc9b)",
"ccseq_navemployeeid" : "11111",
"ccseq_employeefirstname" : "John"
}
]
}
ExpenseTransactionSet
является родителем ExpenseTransaction
означающий, что ExpenseTransaction
есть поиск ExpenseTransactionSet
, ccseq_ccseq_expensetransactionset_ccseq_expensetransaction_ExpenseTransactionSetID
это отношения один ко многим. systemuser
а также ccseq_clients
отдельные объекты, которые являются поисками в ExpenseTransaction
,
Я также попробовал следующие варианты на "ccseq_employeeid@odata.bind"
objectid_systemuser@odata.bind
objectid_ccseq_employeeid@odata.bind
ccseq_employeeid@data.bind
ccseq_employeeid@odata.bind : systemusers()
ccseq_employeeid_systemusers@odata.bind
systemuserid_systemusers@odata.bind
Я видел этот вопрос и этот вопрос и безуспешно пробовал предложенные решения.
2 ответа
Я нашел ответ, читая эту ветку. Правильный синтаксис для свойства навигации в глубокой вставке - использовать имя дочернего объекта, за которым следуют скобки с именем поля. JSON должен быть изменен на ниже
{
"ccseq_importdate" : "2017-05-28T04:00:00Z",
"ccseq_month" : "1",
"ccseq_year" : "2017",
"ccseq_name" : "Test",
"ccseq_status" : "100000000",
"ccseq_ccseq_expensetransactionset_ccseq_expensetransaction_ExpenseTransactionSetID" :
[
{
// Next two lines are changed
"ExpenseTransaction[ccseq_employeeid@odata.bind]": "/systemusers(6d2fd71b-32d1-dd11-a4f5-001a6449bbe7)",
"ExpenseTransaction[ccseq_clientid@odata.bind]": "/ccseq_clients(663ebd00-73b9-4faf-90ed-f56bb9c2dc9b)",
"ccseq_navemployeeid" : "11111",
"ccseq_employeefirstname" : "John"
}
]
}
В документе метаданных {org-url}/api/data/v8.0/$metadata
, вы можете проверить тип элемента свойства навигации со значением коллекции ccseq_ccseq_expensetransactionset_ccseq_expensetransaction_ExpenseTransactionSetID
?
Это тот же тип, который имеет ccseq_employeeid
как его свойство навигации? Если нет, то и собственность ccseq_employeeid
принадлежит к производному типу, вам может потребоваться аннотировать объект свойства навигации, как показано ниже:
{
"ccseq_importdate" : "2017-05-28T04:00:00Z",
"ccseq_month" : "1",
"ccseq_year" : "2017",
"ccseq_name" : "Test",
"ccseq_status" : "100000000",
"ccseq_ccseq_expensetransactionset_ccseq_expensetransaction_ExpenseTransactionSetID" :
[
{
"@odata.type": "Microsoft.Dynamics.CRM.ccseq_navemployee",
"ccseq_employeeid@odata.bind": "/systemusers(6d2fd71b-32d1-dd11-a4f5-001a6449bbe7)",
"ccseq_clientid@odata.bind": "/ccseq_clients(663ebd00-73b9-4faf-90ed-f56bb9c2dc9b)",
"ccseq_navemployeeid" : "11111",
"ccseq_employeefirstname" : "John"
}
]
}