2.2. Các khái niệm cơ bản
2.2.7. Các hành động cấu trúc
Hành động có cấu trúc quy định thứ tự trong tập hợp các hành động được thực thi.
Chúng mô tả làm thế nào một tiến trình nghiệp vụ được tạo ra; bằng cách soạn các hành động cơ bản thực hiện thành cấu trúc thể hiện các mô hình điều khiển, xử lý lỗi và các sự kiện bên ngoài, phối hợp trao đổi thông báo giữa các tiến trình tham gia trong một giao thức kinh doanh.
a. Sequence
Hành động Sequence chứa đựng một hoặc nhiều hành động thực hiện tuần tự, theo thứ tự xuất hiện bên trong thành phần <Sequence>. Hành động Sequence hoàn thành khi hành động cuối cùng trong Sequence hoàn thành.
<sequence standard-attributes>
standard-elements activity+
</sequence>
- Bên trong hành động sequence là tập hợp các hành động (activity). Các hành động này có thể là hành động cơ bản hay hành động có cấu trúc.
b. If
Hành động If cung cấp điều kiện cho hành vi của tiến trình nghiệp vụ. Hành động này bao gồm một danh sách có thứ tự của một hoặc nhiều các điều kiện nhánh được định bởi thành phần if và tùy chọn elseIf, theo sau là một tùy chọn else. Các nhánh if và elseif được xem xét theo thứ tự mà chúng xuất hiện. Nhánh đầu tiên có điều kiện đúng được thực hiện, các hành động bên trong được thực hiện. Nếu không có nhánh với điều kiện đúng được thực hiện thì nhánh else sẽ được thực hiện.
<if standard-attributes>
standard-elements
<condition expressionLanguage="anyURI"?>bool-expr</condition>
activity
<elseif>*
<condition expressionLanguage="anyURI"?>bool-expr</condition>
activity
</elseif>
<else>?
</else>
</if>
- Thuộc tính expressionLanguage trong thẻ condition xác định ngôn ngữ biểu thức được sử dụng trong tiến trình. Giá trị mặc định cho thuộc tính này là
"urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0", có nghĩa là sử dụng XPATH 1.0 bên trong WS-BPEL 2.0.
- Giá trị bool-expr là biểu thức logic điều kiện.
c. While
Hành động While cung cấp các thực hiện lặp đi lặp lại của các hành động bên trong nó. Các hành động bên trong được thực hiện miễn là điều kiện để đánh giá là đúng vào lúc bắt đầu của mỗi lần lặp.
<while standard-attributes>
standard-elements
<condition expressionLanguage="anyURI"?>bool-expr</condition>
activity
</while>
d. Repeat Until
Hành động RepeatUntil cung cấp cho việc thực hiện lặp đi lặp lại của các hành động bên trong nó. Các hành động bên trong được thực hiện cho đến khi điều kiện trở thành đúng. Điều kiện được kiểm tra sau mỗi lần thực hiện trong vòng lặp. Ngược lại với hành động While, RepeatUltil thực hiện lặp các hành động trong nó ít nhất một lần.
<repeatUntil standard-attributes>
standard-elements activity
<condition expressionLanguage="anyURI"?>bool-expr</condition>
</repeatUntil>
e. Pick
Hành động Pick đợi sự xuất hiện chính xác của một sự kiện từ một tập hợp các sự kiện, sau đó thực hiện hành động liên quan với sự kiện đó. Sau khi sự kiện được lựa chọn, các sự kiện khác không được chấp nhận bởi hành động Pick.
<pick createInstance="yes|no"? standard-attributes>
standard-elements
<onMessage partnerLink="NCName"
portType="QName"?
operation="NCName"
variable="BPELVariableName"?
messageExchange="NCName"?>+
<correlations>?
<correlation set="NCName" initiate="yes|join|no"? />+
</correlations>
<fromParts>?
<fromPart part="NCName" toVariable="BPELVariableName" />+
</fromParts>
activity
</onMessage>
<onAlarm>*
(
<for expressionLanguage="anyURI"?>duration-expr</for>
|
<until expressionLanguage="anyURI"?>deadline-expr</until>
) activity
</onAlarm>
</pick>
- Sự kiện <onMessage> có thể có một hay nhiều, khi sự kiện được gọi đến sẽ khởi tạo một tiến trình nghiệp vụ.
- Thuộc tính parnerLink khai báo tên của partnerLink của tiến trình được khởi tạo.
- Thuộc tính portType khai báo tên của portType của tiến trình được khởi tạo.
- Thuộc tính operation khai báo tên của phương thức của tiến trình được khởi tạo.
- Thuộc tính variable khai báo giá trị đầu vào của tiến trình được khởi tạo.
- Thuộc tính messageExchange là tùy chọn được sử dụng để phân biệt mối quan hệ giữa các hành động gửi thông báo đến và các hành động <reply>, việc sử dụng messageExchange cần thiết khi việc thực thi có kết quả trong nhiều cặp
<receive> <reply> trên cùng một partnerLink và các hoạt động được thực hiện đồng thời.
- Thẻ <correlations> liệt kê các correlation được sử dụng trong hành động
<Receive>.
- Thẻ <fromParts> cho phép khai báo một hay nhiều giá trị đầu vào của tiến trình nghiệp vụ có giá trị tương ứng với giá trị thuộc tính variable (chỉ khai báo ở variable hoặc <fromPart> không khai báo ở cả hai nơi).
- Trong sự kiện <onMessage> chứa các hành động của tiến trình nghiệp vụ:
<receive>, <reply>, <invoke>…
- Sự kiện <onAlarm> dựa trên bộ đếm thời gian để thực thi tiến trình nghiệp vụ, thời gian bắt đầu thỏa mãn điều kiện trong thẻ <for> và thực hiện cho đến khi thỏa mãn điều kiện trong thẻ <ultil>.
f. Flow
Hành động Flow cung cấp đồng thời và đồng bộ. Có nghĩa là các hành động sẽ được thực hiện đồng thời và hoàn thành khi tất cả các hành động trong thẻ <flow> hoàn thành.
<flow standard-attributes>
standard-elements
<links>?
<link name="NCName">+
</links>
activity+
</flow>
- Thẻ <links> sử dụng để xác định phụ thuộc kiểm soát rõ ràng giữa các hoạt động con lồng nhau.
- Trong <flow> chứa tập hợp các hành động được định nghĩa bởi tiến trình WS- BPEL bao gồm các hành động cơ bản và các hành động có cấu trúc.
g. Foreach
Hành động Foreach sẽ thực thi các hành động được định nghĩa bên trong nó chính xác N+1 lần, N bằng <finalCounterValue> trừ đi <startCounterValue>.
<forEach counterName="BPELVariableName" parallel="yes|no"
standard-attributes>
standard-elements
<startCounterValue expressionLanguage="anyURI"?>
unsigned-integer-expression
</startCounterValue>
<finalCounterValue expressionLanguage="anyURI"?>
unsigned-integer-expression
</finalCounterValue>
<completionCondition>?
<branches expressionLanguage="anyURI"?
successfulBranchesOnly="yes|no"?>?
unsigned-integer-expression
</branches>
</completionCondition>
<scope ...>...</scope>
</forEach>
- Thuộc tính parallel là “no” thì <foreach> thực hiện tuần tự các hành động được định nghĩa bên trong, nếu parallel là “yes” thì <foreach> thực hiện các hành động đó song song với nhau.
- Thẻ <startCounterValue> chứa giá trị bắt đầu của hành động <foreach>.
- Thẻ <finalCounterValue> chứa giá trị kết thúc của hành động <foreach>.
- Thẻ <completionCondition> là một tùy chọn được chỉ định để ngăn chặn một số các con được thực hiện hoặc chấm dứt sớm các trường hợp con đó.
- Thẻ <branches> được sử dụng để xác định các điều kiện hoàn thành.