Как правильно создать фильтр данных в соединителе Microsoft Dynamics Nav Anypoint Studio?
Команда пытается использовать соединитель Microsoft Dynamics Nav внутри Anypoint Studio 7.3 для получения данных через динамический фильтр. Однако мы получаем все данные, а не подмножество, для которого мы фильтруем
Мы загрузили WSDL-файл в Soap UI, получили тело запроса мыла примерно так:
<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>
и подтвердил, что фильтр работает, отредактировав поле Критерии.
Так как мы все еще изучаем Anypoint Studio, мы решили придерживаться мыльного XML и создали внутри нашего потока мулов переменную с именем "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 и подтвердили, что соединение в порядке. Мы определили Сервис как "Контактную карточку", а Операцию - как Чтение нескольких
Затем мы определили Entity, подключив ключ "filter" переменной "filter" (входной) [я знаю, слишком много фильтров] к элементу "filter" выходных данных. Выходной элемент "filter" становится автоматически доступным, ключ "filter" для переменной фильтра раскрывается после того, как мы определили метаданные для переменной фильтра. В качестве метаданных мы использовали пример XML-файла с тем же содержимым, что и у переменной "filter". DataWeave генерируется так:
%dw 2.0
output application/java
ns ns0 urn:microsoft-dynamics-schemas/page/contactcard
---
{
filter : vars.filter.ns0#ReadMultiple.ns0#filter
}
Все работало, но мы извлекли все данные. Когда мы отредактировали Критерии от - Джона Смита - до другого несуществующего значения - мы все равно получили все данные. Я убежден, что действительный фильтр, как определено переплетением данных, является нулевым.
Кто-нибудь знает, как правильно определить фильтр? В документах Mulesoft, описывающих соединитель DynamicsNav, не упоминается объект фильтра.
Любая попытка вручную изменить сгенерированный код 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>
1 ответ
Для всех, кому не все равно... Вот как вы создаете сущность фильтра для работы с страницей (Microsoft Dynamics Nav Connector)
%dw 2.0
output application/java
ns ns0 urn:microsoft-dynamics-schemas/page/contactcard
---
{
filter: [{
ns0#Field : "COMPANY_NAME",
ns0#Criteria : vars.CompanyName
}]
}
Очевидно, что для любого другого объекта, такого как "VendorCard", пространство имен необходимо редактировать. Значение поля ДОЛЖНО быть в верхнем регистре. Тем не менее, журнал покажет вам все существующие действительные имена полей, если вы не поняли это правильно. "CompanyName" - это переменная, которую вы должны установить в другом месте, "vars" - это шлюз для всех переменных в вашем сообщении mule. Дополнительные фильтры могут быть добавлены в тот же массив "filter", если вам нужно фильтровать по нескольким полям.
Я бы хотел, чтобы документы Mulesoft помогли вам пройти через этот процесс. Ну что ж.