2

问题

我正在尝试使用关键属性为空的 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 参数,但我想要一个解决方案,而不必求助于这种“解决方法”。毕竟,它是一把钥匙,我想把它当作一把钥匙。

4

1 回答 1

0

我认为您的努力证明了关键属性不能为空。因此,是时候采用另一种方法了。

创建一个自定义属性并用三个关键属性的组合值填充它。您可以在实体的创建和最终更新消息的预操作阶段注册的插件中执行此操作。

使用自定义属性作为关键属性。

于 2018-04-25T15:06:33.803 回答