Окно BPEL Mapper доступно в качестве вкладки в окнах "Design", "Source" или "Logging" процесса BPEL.
Окно BPEL Mapper формирует среду для обработки и распределения данных процесса BPEL. Эта среда состоит из следующих элементов:
Строка меню. Строка меню предоставляет операторы, необходимые элементы и функции XPath, используемые для создания отображений BPEL. Кроме того, можно усовершенствовать или расширить отображения BPEL путем включения предикатов, состоящих из функций XPath.
Панель дерева "Source". Исходная панель дерева, располагаемая слева, содержит элемент дерева, который предоставляет доступ к переменным данных бизнес-процесса и партнерских связей.
Панель отображения. Панель отображения содержит холст для создания отображений BPEL. При выборе функции из строки меню на панели отображения появляется поле функции. Если функция принимает какие-либо параметры, то в левой части поля функции имеется одна соединительная линия для каждого параметра. Если параметр является необязательным, то после имени этого параметра появляется вопросительный знак. В правой части поля функции имеется одна соединительная линия для результата. Указатель BPEL используется со следующими элементами бизнес-процесса:
Действие "Assign". Позволяет определить одно или несколько присвоений.
Действие "If". Позволяет определить условие.
Элемент "ElseIf" в рамках действия "If". Позволяет определить условие.
Действие "ForEach". Позволяет определить условие.
Действие "RepeatUntil". Позволяет определить условие.
Действие "While". Позволяет определить условие.
Действие "Wait". Можно указать крайний срок или длительность интервала.
Событие "OnAlarm". Можно указать крайний срок или длительность интервала.
Панель дерева "Destination". Эта панель размещается справа. Элемент дерева целевой панели зависит от отображаемого элемента бизнес-процесса. Эта панель содержит следующие элементы:
Для действия "Assign" в правой панели содержится тот же самый элемент дерева, что и в левой панели.
Для действия "If", элемента "ElseIf", действия "ForEach", действия "RepeatUntil" и действия "While" в правой панели содержится узел "Result".
Для действия "Wait "и события "onAlarm" в правой панели содержится узел "Deadline" или "Duration".
Для открытия окна BPEL Mapper:
Откройте диаграмму BPEL и выполните одно из следующих действий:
Дважды щелкните элемент, для которого требуется создать отображение. Появится вкладка "Mapper".
Выберите элемент, для которого требуется создать отображение, и на панели инструментов диаграммы выберите вкладку "Mapper".
Для получения возможности одновременного просмотра указателя и диаграммы процесса можно поместить средство создания отображений в отдельном окне. Для получения дополнительных сведений см. Клонирование представлений документов.
Создание отображений BPEL
Существует возможность непосредственного создания отображения из исходной панели дерева на целевую панель без помощи каких-либо функций. Такое отображение может относиться к одному из следующих типов:
отображение переменной на переменную;
отображение элемента на элемент;
отображение элемента XSD на элемент XSD;
отображение атрибута XSD на атрибут XSD.
Кроме того, можно создать отображение, которое использует одну или несколько функций XPath из строки меню в окне BPEL Mapper. Например, если процесс BPEL имеет в своем составе действие "Wait", предполагающее ожидание в течение определенного промежутка времени, то для указания длительности интервала можно использовать функцию Duration Literal.
Создание отображения без помощи каких-либо функций:
На исходной панели дерева выполните развертку элемента дерева до появления исходного узла для отображения.
Если целевая панель дерева содержит элемент дерева, выполните развертку элемента дерева до появления исходного узла для отображения.
Выберите узел на исходной панели дерева и перетащите указатель к узлу на целевой панели дерева.
Таким образом устанавливается ссылка для привязки узлов.
Для каждого параметра устанавливается соответствие с помощью соединительной линии в левой части поля функции. Источник может быть узлом на исходной панели дерева или выводом из другого поля функции. Если параметр является необязательным, то после имени этого параметра появляется вопросительный знак.
Установите соответствие для результата из правой части поля функции. Адресатом может быть узел на целевой панели дерева или ввод в другое поле функции.
Свертывание ссылки или функции в отображении:
Выберите ссылку или функцию.
Щелкните мелкий значок со знаком "минус" в точке входа соединительной линии в целевую панель дерева.
Удаление ссылки или функции в отображении:
Выберите ссылку или функцию.
Нажмите кнопку "Delete".
Работа с предикатами
BPEL Mapper позволяет создавать предикат, который состоит из функций XPath.
Предикат позволяет применять условие к узлу, который может иметь несколько значений. Результатом является подмножество узлов, удовлетворяющих этому условию.
Например, предположим, что узел представляет ряд продуктов. При необходимости выбора всех продуктов, количество которых превышает 50, для определения условия можно использовать функции greater than и number literal.
Создание предикатов возможно только для определенных типов узлов. Контекстное меню этих узлов содержит вариант выбора "New Predicate". При развертке элемента дерева в исходной панели дерева узлы, которые могут иметь предикаты, отмечены звездочкой (*).
После создания предиката его можно использовать для последующего присвоения. Например, можно скопировать данные из предиката из исходной панели дерева в узел, находящийся в целевой панели дерева.
Существующий предикат можно изменить или удалить.
Создание предиката:
На исходной панели дерева щелкните правой кнопкой мыши узел, который отмечен звездочкой (*), и выберите "New Predicate".
Появится редактор предикатов.
С помощью функций XPath создайте условие для предиката. Отобразите результат на узел предиката на целевой панели дерева.
Нажмите кнопку "OK".
Узел предиката появится непосредственно под исходным узлом. Соответствующее условие отображается в скобках.
Изменение предиката:
На исходной панели дерева щелкните правой кнопкой мыши узел предиката и выберите "Edit Predicate".
Измените условие.
Нажмите кнопку "OK".
Удаление предиката:
На исходной панели дерева щелкните правой кнопкой мыши узел предиката и выберите "Delete Predicate".
Нажмите кнопку "Yes".
Справочник по функциям XPath
Набор функций XPath доступен в строке меню BPEL Mapper. Эти функции основаны на спецификации XPath 1.0. В этом меню также содержатся некоторые функции расширения XPath.
Каждая функция может иметь от нуля до нескольких параметров. Каждая функция возвращает единственный результат.
Logical And использует следующую логику: если оба параметра имеют значение "True", то функция возвращает значение "True". Если любой из параметров имеет значение "False", функция возвращает значение "False".
Функция Logical Or использует следующую логику: если любой из параметров имеет значение "True", то функция возвращает значение "True". Если оба параметра имеют значение "False", функция возвращает значение "False".
Функция Logical Not использует следующую логику: если параметр имеет значение "False", функция возвращает значение "True". Если параметр имеет значение "True", функция возвращает значение "False".
Функция Language возвращает значение "True" или "False" в зависимости от того, совпадает ли язык контекстного узла с языком, указанным в параметре (либо принадлежит подмножеству указанных в параметре языков).
Функция Logical False возвращает значение "False".
Функция Logical True возвращает значение "True".
Функция Boolean используется для преобразования параметра в логическое значение. Для получения дополнительных сведений о логике см. спецификацию XPath 1.0.
String
Меню "String" содержит следующие функции:
Функция Contains использует следующую логику: если первая строка параметра содержит вторую строку параметра, функция возвращает значение "True". В противном случае функция возвращает значение "False".
Функция Normalize Space возвращает строку параметра с нормализованной простановкой пробелов, т.е. с удалением первого и последнего пробела и заменой последовательности пробелов одним пробелом.
Функция String преобразовывает объект в строку.
Функция Starts With используют следующую логику: если первая строка параметра начинается со второй строки параметра, то функция возвращает значение "True". В противном случае функция возвращает значение "False".
String Length возвращает число символов в строке.
Функция Substring возвращает первую подстроку параметра, начинающуюся в позиции, определяемой вторым параметром, и имеющую длину, указанную в третьем параметре. Первый символ расположен в позиции 1, второй – в позиции 2 и т.д. Третий параметр является необязательным. Если третий параметр не указан, функция возвращает подстроку, начинающуюся с позиции, определяемой вторым параметром, и продолжающуюся до конца строки.
Функция Substring Before возвращает подстроку первой строки параметра, предшествующую первому появлению второй строки параметра в первой строке параметра. Если первая строка параметра не содержит вторую строку параметра, функция возвращает пустую строку.
Функция Substring After возвращает подстроку первой строки параметра, которая следует за первым появлением второй строки параметра в первой строке параметра. Если первая строка параметра не содержит вторую строку параметра, функция возвращает пустую строку.
Функция Translate возвращает первую строку параметра в случае появления во второй строке параметра символов, заменяемых символом в соответствующей позиции из третьей строки параметра.
Функция Concat возвращает конкатенацию параметров.
Функция String Literal позволяет вводить строковый литерал.
Node
Меню "Nodes" содержит следующие функции:
Функция Local Name возвращает локальную часть развернутого имени узла в наборе узлов параметра, который является первым в последовательности документов. (Развернутое имя состоит из локальной части и унифицированного идентификатора ресурсов пространства имен.)
Функция Name возвращает составное имя, представляющее развернутое имя узла в наборе узлов параметра, который является первым в последовательности документов. (Развернутое имя состоит из локальной части и унифицированного идентификатора ресурсов пространства имен.)
Функция Namespace URI возвращает унифицированный идентификатор ресурсов пространства имен развернутого имени узла в наборе узлов параметра, который является первым в последовательности документов. (Развернутое имя состоит из локальной части и унифицированного идентификатора ресурсов пространства имен.)
Функция Position возвращает позицию контекста.
Функция Last возвращает размер контекста.
Функция Count возвращает количество узлов в наборе узлов параметра.
Number
Меню "Number" содержит следующие функции:
Функция Number используется для преобразования в числовое значение. Для получения дополнительных сведений о логике см. спецификацию XPath 1.0.
Функция Numeric Literal позволяет вводить числовой литерал.
Функция Round возвращает целое число, наиболее близкое к значению параметра.
Функция Sum возвращает сумму, получающуюся в результате преобразования значений строки узла в числовое значение, для каждого узла в наборе узлов параметров.
Функция Floor возвращает наибольшее целое число, не превышающее значение параметра.
Функция Ceiling возвращает наименьшее целое число, большее или равное значению параметра.
Date&Time
Меню "Datetime" содержит следующие функции:
Функция Current Date возвращает текущую дату.
Функция Current Time возвращает текущее время.
Функция Current Date and Time возвращает текущую дату и время.
Функция Duration Literal позволяет вводить временной литерал. Используйте формат, указанный в спецификации схемы XML.
BPEL
Меню "BPEL" содержит следующие функции расширения XPath:
doXslTransform. Это функция расширения XPath, определенная в спецификации WS-BPEL. Данная функция может использоваться в действии "Assign" BPEL для вызова преобразования XSLT.
Wrap with Service Reference. Это специальный вариант функции doXslTransform, используемый для преобразования данных в ServiceRefType. Эта функция предназначена для упрощения использования динамической адресации.
doMarshal используется для сериализации объекта.
doUnMarshal используется для десериализации объекта.
Примеры отображений
Нижеприведенные примеры иллюстрируют некоторые случаи отображения:
Предположим, что процесс BPEL должен обеспечивать копирование данных, полученных от партнера. Для этого необходимо выполнить следующие задачи:
Добавьте действие "Assign" после действия "Receive".
В режиме проектирования выберите действие "Assign" и с помощью BPEL Mapper определите одно или несколько присвоений. Для открытия окна дважды щелкните действие "Assign" или выберите вкладку "Mapper" на панели инструментов.
Следующий пример иллюстрирует присвоение без использования каких-либо функций XPath. Значение входной переменной копируется в выходную переменную. Следует отметить, что на левой и правой панелях содержится один и тот же элемент дерева.
Теперь воспользуемся некоторыми выражениями XPath. Удаление созданной ссылки:
Выберите ссылку на панели отображения (она выделяется зеленым цветом) и нажмите кнопку "Delete".
В меню выберите "String > Concat". На панели отображения появится поле функции.
В меню выберите "String > String Literal", и на панели отображения появится еще одно поле функции.
Дважды щелкните поле функции "String Literal" и введите в это поле THE VALUE.
Проведите соединительную линию от поля функции "String Literal" к входящей соединительной линии поля функции "Concat".
Проведите еще одну соединительную линию от переменной в исходном дереве к полю "Concat".
Проведите исходящую соединительную линию от поля "Concat" к переменной в целевом дереве. Целевая переменная теперь имеет значение, состоящее из конкатенации строкового литерала и исходного значения переменной.
Следующий пример иллюстрирует присвоение с использованием функции XPath concat. Значение входной переменной имеет конкатенацию с концом строкового литерала THE VALUE: и копируется в выходную переменную.
Случай с действием "If"
Предположим, что определенная последовательность действий должна быть выполнена только в том случае, если соблюдается определенное условие. Для этого необходимо выполнить следующие задачи:
Добавьте действие "If" к процессу BPEL.
Добавьте операции, входящие в состав действия "If".
В режиме проектирования выберите действие "If" и с помощью BPEL Mapper определите булево условие. Для открытия средства отображения дважды щелкните действие If" или выберите вкладку "Mapper" на панели инструментов.
Следующий пример иллюстрирует отображение условия. Для отображения используется функция XPath Not из узла Boolean в строке меню. Если маршрут предполагает бронирование авиабилетов, то функция XPath Not возвращает значение "True". Результат отображается на узел Result на правой панели.
Случай с предикатом
Предположим, что процесс BPEL должен обеспечивать копирование данных из маршрутов заказчиков при условии, что в поездке принимает участие не более двух сотрудников. Входные записи содержат переменную, определяющую количество пассажиров в группе заказчика. Для этого необходимо выполнить следующие задачи:
На левой панели окна BPEL Mapper щелкните правой кнопкой мыши узел повтора, который отмечен звездочкой (*), и выберите "New Predicate".
Появится окно "Predicate Editor".
Добавьте функцию XPath Less Than к средней панели.
Добавьте функцию XPath number literal к средней панели. Установите значение, равное 3.
Отобразите узел переменной на первый параметр функции XPath Less Than.
Отобразите результат функции XPath number literal на второй параметр функции XPath Less Than.
Отобразите результат функции XPath Less Than на узел Result в правой панели.
Нажмите кнопку "OK".
Следующий пример иллюстрирует появление отображения в окне "Predicate". После нажатия кнопки "OK" узел предиката можно использовать для присвоения.
При получении процессом BPEL данных в формате XML предикатом выбирается первый тег Air.