Нужен способ передать узел любого типа пользовательской функции из механизма правил BizTalk
Я работаю над приложением BizTalk.
Я настроил свои словари и начал писать правила в редакторе правил.
После оценки правила я создал функцию AddValidationError, которая записывает ошибку проверки в проверяемый документ XML. Метод AddValidationError вызывается из раздела "Действие" правила.
Я хочу передать оцениваемый узел методу AddValidationError, чтобы я мог определить XPath для этого узла и включить его как часть сообщения об ошибке.
Я думал, что у меня может быть параметр типа TTypedXmlDocument, но это не позволяет мне передавать узлы, которые определены как что-либо отличное от TTypedXmlDocument, например, string, int, datetime и т. Д. Я заметил, что у механизма правил есть метод, называемый Существует, что примет любой тип узла и разрешит его в XPath, что я и хочу.
Я не хочу копировать текст XPath в метод AddValidationError, так как это кажется грязным, и любой БА должен иметь возможность создавать новые правила, просто перетаскивая узлы и методы на экране, то есть им не нужно знать что вам нужно скопировать XPath на узел в метод AddValidationError, чтобы он работал.
Я надеюсь это имеет смысл.
Итак, возвращаясь к методу предикатов Exists, я могу передать его любому узлу, и кажется, что он автоматически обрабатывает XPath, как я могу получить эту функциональность? или еще лучше, как я могу передать узел типа, отличного от TTypedXmlDocument, в метод, а затем определить XPath для переданного узла?
Я думал о наличии двух определений для каждого узла, одно из которых представляет значение, строку, int, datetime и т. Д., А другое для того же узла, но для TTypedXmlDocument. Хотя это действительно работает, оно также пахнет немного, поэтому хотелось бы что-то лучше.
1 ответ
То, что вы просите конкретно, не возможно. Compose не видит фактический xPath как артефакт, только то, к чему он разрешает.
Хотя вы можете увидеть xPath в предикате Exists, на самом деле это не то, что оценивается. Результат xPath, как и любой другой параметр, проверяется на нулевое значение.
Если бы мне нужно было сделать что-то подобное, я бы, вероятно, создал бы элемент Vocabulary с "путём" (но не обязательно действительным xPath) к узлу / полю, тестируемому в правиле.