3

通过 Web API 查询 Dynamics 365 时,有多个运算符可供选择以过滤查询的数据。其中一个运算符contains实际上出现了两次。

一个是 ODatacontains函数(您可以在“标准查询函数”标题下找到它):

https://msdn.microsoft.com/en-us/library/gg334767.aspx#Filter%20results

例子:

$filter=contains(name,'(sample)')

另一个是 Dynamics 365 Web API 本身的实现:

https://msdn.microsoft.com/en-us/library/mt608053.aspx

我试过这个,但只得到一个通用 SQL 错误:

$filter=Microsoft.Dynamics.CRM.Contains(PropertyName='name',PropertyValue='(sample)')

有什么不同?也许有人甚至可以告诉我如何contains正确调用 Web API 版本?

4

2 回答 2

6

最新文档确认$filter=contains(name,'(sample)')是唯一适用于 web api 的语法。正如 Jatin 所说,OData 过滤器在幕后转换为查询表达式,一些文章(thisthis)传达了可能的解决方案是Like直接在 C# 查询表达式中使用运算符。

我们在 web api 中没有Like 运算符等效功能。

我的尝试和观察

Microsoft.Dynamics.CRM.Contains- 一般 SQL 错误。

$filter=like(name,'%test%')- 发现了一个名为“like”的未知函数。这也可能是函数导入或导航属性上的键查找,这是不允许的。

$filter=contains(name, 'test')- 在职的

于 2018-04-20T15:11:51.980 回答
2

我认为这两种方法是等效的。添加了 Web API 过滤功能以支持标准的 OData 过滤功能。Contains 函数是将 CRM 中支持的所有条件运算符公开为 OData 函数的结果。请在 D365 文档中搜索 ConditionOperator 枚举以获取有关 Contains 运算符的信息。它提到了 SQL 错误背后的原因。复制以下内容

您必须仅对那些启用全文索引的属性使用 Contains 运算符。否则,您将在检索数据时收到一般 SQL 错误消息。在 Microsoft Dynamics 365 默认安装中,仅 KBArticle(文章)实体的属性启用全文索引。

最好使用 Web API 过滤器功能,因为它更惯用。使用它会遇到什么错误?我想两者的根本原因可能是相同的,因为 OData 过滤器查询在后端转换为 D365 查询表达式,并且包含过滤器应该被转换为包含条件运算符。

于 2018-04-20T13:29:06.870 回答