问题
我正在尝试使用关键属性为空的 Web API 从 Dynamics 365 查询记录。
方法
出于测试目的,我创建了一个具有字符串属性、整数属性和小数属性的实体。然后,我创建了一个备用键并将这三个属性放入其中,使这种属性组合独一无二。然后我创建了一些记录。
使用 Web 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 并带有消息“错误请求 - 查询语法错误”。只是为了澄清:我特意创建了其中一个关键属性为空的记录,如下所示:
{
"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)
我还尝试省略其中包含 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 参数,但我想要一个解决方案,而不必求助于这种“解决方法”。毕竟,它是一把钥匙,我想把它当作一把钥匙。