Получить запись с помощью веб-API Dynamics 365 с пустым альтернативным ключом
проблема
Я пытаюсь запросить записи из Dynamics 365 с помощью веб-API, где ключевой атрибут имеет значение null.
Подход
Для тестирования я создал сущность со строковым атрибутом, целочисленным атрибутом и десятичным атрибутом. Затем я создал альтернативный ключ и поместил в него эти три атрибута, сделав эту комбинацию атрибутов уникальной. Затем я создал несколько записей.
Запрос данных с использованием веб-API работает, как и ожидалось. Я создал запись с этими значениями:
{
"my_string_key": "s1",
"my_integer_key": 1,
"my_decimal_key": 1.23
}
И запрос это так:
/my_entities(my_string_key='s1',my_integer_key=1,my_decimal_key=1.23)
Это возвращает желаемую запись.
Однако я не могу заставить его работать, когда любое из ключевых полей пусто, оно всегда возвращает 400 с сообщением "Bad Request - Ошибка в синтаксисе запроса". Просто для пояснения: я специально создал записи, в которых один из ключевых атрибутов пуст, например:
{
"my_integer_key": 1,
"my_decimal_key": 1.23
}
{
"my_string_key": "s1",
"my_decimal_key": 1.23
}
{
"my_string_key": "s1",
"my_integer_key": 1
}
Обратите внимание, что в каждой записи отсутствует один из ключевых атрибутов, который фактически оставляет его равным нулю.
Я пытался с помощью =null
, =empty
, =''
, =
а также =Microsoft.OData.Core.ODataNullValue
но ничего не работает. Я попытался запросить их так:
/my_entities(my_string_key=null,my_integer_key=1,my_decimal_key=1.23)
/my_entities(my_string_key='s1',my_integer_key=null,my_decimal_key=1.23)
/my_entities(my_string_key='s1',my_integer_key=1,my_decimal_key=null)
Я также попытался опустить атрибут с нулем в нем, например:
/my_entities(my_integer_key=1,my_decimal_key=1.23)
/my_entities(my_string_key='s1',my_decimal_key=1.23)
/my_entities(my_string_key='s1',my_integer_key=1)
Ничего из этого не работает. Кто-нибудь может предложить решение?
Заключительные слова
Я знаю, что ключевые атрибуты не должны быть пустыми, потому что это не главное. Мой сценарий, однако, требует обработки этого конкретного случая.
Я также знаю, что мог бы просто использовать параметр $ filter, но я бы хотел найти решение, не прибегая к этому "обходному пути". В конце концов, это ключ, и я хотел бы относиться к нему как к одному.
1 ответ
Я думаю, что ваши усилия доказывают, что ключевые атрибуты не могут быть пустыми. Итак, время для другого подхода.
Создайте пользовательский атрибут и заполните его объединенными значениями трех ключевых атрибутов. Вы можете сделать это с помощью плагина, зарегистрированного на этапе подготовки к операции создания и обновления сообщений вашей организации.
Используйте пользовательский атрибут в качестве ключевого атрибута.