Создание сайтов - статьи

Прочие особенности WSCI


В таблице 1 перечислен ряд других полезных возможностей WSCI. Полный список доступен в документации по WSCI.

Таблица 1. Элементы WSCI



Название элемента Краткое описание Пример
Выбор (selector) Элемент выбирает значение свойства из сообщения. Он полезен для преобразования сложного сообщения в набор свойств. Элемент выбора может быть использован для получения общего числа акций из сообщения обо всех акциях (getAllStocksResponse):

<selector property = "tns:stockCount"
element = "tns: ArrayOfStockList
xpath = "count (./StockList)" />

Вызов (call) Элемент вызывает произвольную операцию (например, вызов стороннего Web-сервиса) в процессе выполнения действия. Это атомарный элемент, и действие не может быть выполнено, если не выполняется вызываемый процесс. Если приложение должно записать все транзакции для операций аудита и согласования, то для этого может быть вызван произвольный процесс:

<process name = "DebitMoney" instantiation = "other">

<action name = "debitMoney"


role = "tns:trader"


operation = "tns:debitMoney">

</action>

<call process = "auditTransactions"/>

</action>

</process>

Все действия (all activity) Этот элемент похож на элемент последовательности. Все операции, определенные в элементе последовательности, выполняются, но операции, определенные в этом элементе, могут быть выполнены непоследовательно. В этом примере заказ на покупку и снятие денег могут быть выполнены в любом порядке:

<all>

<operation name="confirmBuyOrder">

<input message="buySellOrderResponse"/>

<output message="buySellOrderResponse"/>

</operation>

<operation name="debitMoney">

<input message="creditCardDetails"/>

<output message="debitMoneyResponse"/>

</operation>

</all>

Для каждого (foreach) Элемент выполняет действия в условном цикле. Он похож на элемент цикла в языке Java. Элемент выполняет операцию размещения заказа на продажу (PlaceSellOrder) для каждого набора акций в общем списке (arrayOfStocks):

<foreach select="ns1:arrayOfStockList/leg[position()>1]">

<process name = "PlaceSellOrder" instantiation = "other">

<action name = "PlaceSellOrder"= "tns:trader"= "tns:placeSellOrder">

</action>

</process>

</foreach>

Переход (switch) Элемент осуществляет условный выбор действия из списка действий. Порядок условий очень важен; первым выполняется условие, значение которого истинно. Элемент похож на условный элемент языка Java (case statement). Элемент выполняет соответствующее действие, когда значение условия истинно. Если условие не выполняется, элемент осуществляет операцию отказа.

<switch>

<case>

<condition>tns:reverseBuyOrder</condition>

<action name = "reverseBuyOrder"


role = "tns:trader"


operation = "tns:reverseBuyOrder"/>

</case>

<default>

<action name = "confirmBuyOrder"

role = "tns:trader"

operation = "tns:confirmBuyOrder"/>

</default>

</switch>

До того, как (until) Элемент выполняет все действия на основе значения оператора Boolean. Он выполняет эти действия как минимум один раз. Элемент похож на элемент языка Java "делай пока" (do while). <until>

<condition>tns:creditCardProcessed</condition>

<process name = "DebitMoney" instantiation = "other">

<action name = "debitMoney"


role = "tns:trader"


operation = "tns:debitMoney">

</action>

</process>

</until>

Пока (while) Элемент выполняет все действия на основе значения оператора Boolean. При этом они могут быть выполнены как один или более раз, так и ни одного. Элемент похож на элемент языка Java "пока" (while). <while>

<condition>tns:creditCardProcessed</condition>

<process name = "DebitMoney" instantiation = "other">

<action name = "debitMoney"


role = "tns:trader"


operation = "tns:debitMoney">

</action>

</process>

</while>

Задержка (delay) Элемент выполняет действие с определенным периодом задержки. Если в процессе выполнения этого действия возникает исключительная ситуация, то оно может быть завершено раньше указанного времени. <exception>

<delay property = "tns:delayTime"


type = "duration"


reference="tns:delayBuyingStock">

</delay>

</exception>

Вызов (call) Элемент инициирует процесс и ждет окончания его выполнения. Он полезен для вызова внутренних процессов. <call process = "tns:audit" />
Генерирование (spawn) Элемент инициирует процесс, но не ждет его окончания. <Spawn process = "tns:logBuyTransaction" />
Объединение (join) Элемент ждет окончания выполнения генерированного процесса. Если нет никаких экземпляров или все они уже выполнены, действие завершается. <join process = "tns:logBuyTransaction" />



Содержание раздела