该团队正在尝试使用 Anypoint Studio 7.3 中的 Microsoft Dynamics Nav 连接器通过动态过滤器获取数据。但是我们得到的是所有数据,而不是我们过滤的子集
我们在 Soap UI 中加载了 WSDL 文件,得到了一个如下所示的soap请求正文:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:con="urn:microsoft-dynamics-schemas/page/contactcard">
<soapenv:Header/>
<soapenv:Body>
<con:ReadMultiple>
<!--1 or more repetitions:-->
<con:filter>
<con:Field>Name</con:Field>
<con:Criteria>'John Smith'</con:Criteria>
</con:filter>
</con:ReadMultiple>
</soapenv:Body>
</soapenv:Envelope>
并通过编辑 Criteria 字段确认过滤器有效。
由于我们仍在学习 Anypoint Studio,我们决定坚持使用soap xml,并在我们的 mule 流中创建一个名为“filter”的变量,并将其定义为与上面的有效负载完全相同:
%dw 2.0
output application/xml
---
read('<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:con="urn:microsoft-dynamics-schemas/page/contactcard">
<soapenv:Header/>
<soapenv:Body>
<con:ReadMultiple>
<!--1 or more repetitions:-->
<con:filter>
<con:Field>Name</con:Field>
<con:Criteria>"John Smith"</con:Criteria>
</con:filter>
</con:ReadMultiple>
</soapenv:Body>
</soapenv:Envelope>','application/xml')
我们添加了一个记录器并确认变量“过滤器”看起来像上面的代码。
作为最后一步,我们配置了 Microsoft Dynamics Page 连接器并确认连接正常。我们将 Service 定义为“Contact Card”,将 Operation 定义为 Read Multiple。
然后我们通过将“过滤器”变量(输入)[我知道,过滤器太多]的“过滤器”键连接到输出的“过滤器”元素来定义实体。在我们为过滤器变量定义元数据后,输出“过滤器”元素被自动暴露,过滤器变量的输入“过滤器”键被暴露。作为元数据,我们使用了一个与“过滤器”变量具有相同内容的示例 XML 文件。DataWeave 生成如下:
%dw 2.0
output application/java
ns ns0 urn:microsoft-dynamics-schemas/page/contactcard
---
{
filter : vars.filter.ns0#ReadMultiple.ns0#filter
}
一切正常,但我们提取了所有数据。当我们将 Criteria 从 --John Smith- 编辑为另一个不存在的值时 - 我们仍然获得了所有数据。我坚信数据编织定义的实际过滤器为空。
有人知道如何正确定义过滤器吗?描述 DynamicsNav 连接器的 Mulesoft 文档没有提到过滤器实体。
任何手动修改生成的 DataWeave 代码的尝试都会导致各种异常。
任何帮助,将不胜感激。谢谢。这是用于为过滤器变量生成元数据的文件内容。
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:con="urn:microsoft-dynamics-schemas/page/contactcard">
<soapenv:Header/>
<soapenv:Body>
<con:ReadMultiple>
<!--1 or more repetitions:-->
<con:filter>
<con:Field>Name</con:Field>
<con:Criteria>'John Smith'</con:Criteria>
</con:filter>
</con:ReadMultiple>
</soapenv:Body>
</soapenv:Envelope>