Mô hình hoạt động của Windows Workflow Foundation

Một phần của tài liệu tìm hiểu và ứng dụng windows workflow foundation để hỗ trợ các quy trình nghiệp vụ (Trang 32 - 38)

3. CHƯƠNG 3: WORKFLOW FOUNDATION

3.1.4Mô hình hoạt động của Windows Workflow Foundation

3.1.4.1 Quá trình chuyển đổi trạng thái hoạt động của workflow và activity

WF chỉ bao gồm các activity. Thực chất, workflow trong WF là một activity lớn chứa các activity con bên trong. Do đó, tập các trạng thái hoạt động của 1 activity cũng chính là tập các trạng thái hoạt động của workflow, bao gồm:

- Initialized: workflow đã được tạo ra. - Executing: workflow đang hoạt động.

- Canceling, canceled: workflow bị hủy bỏ quá trình hoạt động. - Faulting, faulted: quá trình thực hiện của workflow gặp lỗi

- Compensating, compensated: workflow trong quá trình thực hiện giao tác bồi thường.

- Unitialized: workflow kết thúc quá trình hoạt động.

Hình 3-8: Quá trình chuyển đổi trạng thái của workflow và activity

(Tham khảo: Dharma Shukla, Bob Schmidt , Essential Windows Workflow Foundation, chương Automation Context)

Một activity (hoặc workflow) sau khi được tạo ra (trạng thài Initialized) sẽ bắt đầu thực hiện công việc của nó và chuyển sang trạng thái Executing; và nó sẽ thực hiện cho đến khi kết thúc thành công (trạng thái Suceed), sau cùng sẽ được giải phóng khỏi bộ nhớ (trạng thái Uninitialized). Nếu trong quá trình hoạt động, vì một lý do nào đó mà activity (hoặc workflow) bị cancel (trạng thái Canceling), có thể là do quá trình thực hiện xảy ra lỗi (trạng thái FaultingFaulted), hoặc có thể do người dùng hủy bỏ quá trình thực hiện của nó (trạng thái Canceled), thì activity (hoặc workflow) sẽ được giải phóng khỏi bộ nhớ và kết thúc quá trình thực hiện. Sau khi activity (hoặc workflow) thực hiện thành công, activity vẫn có thể thực hiện các giao tác đền bù (ví dụ cập nhật cơ sở dữ liệu) (trạng thái CompensatingCompensated) cho đến khi

kết thúc và được giải phóng khỏi bộ nhớ.

Chỉ các activity có thể thực hiện giao tác đền bù mới có thể chuyển qua các trạng thái Compensating và Compensated. Các activity khác không chuyển qua trạng thái này được.

3.1.4.2 Tiến trình đặt workflow lên application

Hình 3-9: Tiến trình khởi động ứng dụng thực hiện workflow

(Tham khảo: Bruce Bukovics, Pro WF Windows Workflow in .NET 3.5, trang 37) Trước khi ứng dụng thực hiện, nó phải tạo và start các thực thể của

WorkflowRuntime, đồng thời cũng mô tả các sự kiện cho phép workflow runtime giám sát quá trình hoạt động của workflow như: workflow kết thúc thành công, lưu trạng thái của workflow xuống database để giải phóng bộ nhớ, …. Có thể có nhiều thực thể của workflow runtime trong một miền ứng dụng, tuy nhiên, không cần thiết có nhiều thực thể của workflow runtime vì chỉ cần một thực thể của workflow runtime là có đủ khả năng để quản lý việc thực hiện của nhiều thể hiện workflow, và để tránh xung đột giữa các thực thể workflow runtime với nhau. Ngoài ra, ứng dụng cũng phải tạo và đăng ký các dịch vụ với runtime engine nếu cần thiết bao gồm: các dịch vụ lõi và các dịch vụ nội bộ.

3.1.4.3 Tương tác giữa ứng dụng và workflow

Như đã đề cập ở phần trước, các dịch vụ nội bộ là đối tượng trung gian cho phép các ứng dụng có thể giao tiếp với workflow và ngược lại. Tuy nhiên, các dịch vụ nội bộ phải được đăng ký với workflow runtime trước khi ứng dụng được start. Các dịch vụ nội bộ thực chất là các sự kiện và phương thức được định nghĩa để hỗ trợ giao tiếp giữa ứng dụng và workflow.

Hình 3-10: Tương tác giữa ứng dụng và workflow

(Tham khảo: Bruce Bukovics, Pro WF Windows Workflow in .NET 3.5, trang 42) Để ứng dụng có thể giao tiếp cũng như truyền dữ liệu cho workflow, nó phải dùng các dịch vụ nội bộ để phát sinh các sự kiện đã đăng ký với workflow runtime và

workflow runtime sẽ bắt lấy các sự kiện này để xử lý. Ngược lại, workflow sử dụng các phương thức đã đăng ký để giao tiếp và truyền dữ liệu ngược về cho ứng dụng.

Cũng như các dịch vụ lõi, ứng dụng cũng chịu trách nhiệm tạo và đăng ký các dịch vụ nội bộ với runtime engine. Mặc khác, không giống như các dịch vụ lõi, có thể đăng ký nhiều dịch vụ nội bộ vào runtiem engine, mà chỉ duy nhất 1 dịch vụ nội bộ của loại mà dịch vụ đó thuộc về được runtime engine gọi thực hiện.

3.1.4.4 Tối ưu hóa việc quản lý các workflow kéo dài

Khi workflow bắt đầu được thực hiện, workflow runtime cấp 1 luồng (luồng) thực hiện 1 workflow. Thông thường, Workflow được thực hiện một cách tự động. Tuy nhiên, đối với các workflow thực hiện trong khoảng thời gian dài như phải chờ 1 sự kiện phát sinh (trì hoãn quá trình thực hiện trong một khoảng thời gian nhất đinh hoặc chờ sự kiện từ phía người dùng), khi đó workflow chuyển sang trạng thái rảnh và được lưu trạng thái xuống cơ sở dữ liệu, đồng thời luồng được cấp cho workflow được giải phóng cho việc sử dụng các hoạt động khác của hệ thống. Khi nó được kích hoạt lại thì runime sẽ cấp luồng mới để luồng đó thực hiệp tiếp workflow và tiếp tục như vậy cho đến khi workflow kết thúc.

Hình 3-11: Ví dụ quá trình thực hiện workflow kéo dài

(Dharma Shukla, Bob Schmidt , Essential Windows Workflow Foundation, chương Automation context)

Quy trình ví dụ trên chỉ đơn gian là xuất thông báo (PrintKey) yêu cầu người dùng nhập thông tin (ReadLine) và in lời chào ra màn hình (PrintGreeting). Khi workflow bắt đầu thực hiên, workflow runtime yêu cầu luồng T1 thực hiện thao tác PrintKey và

workflow đang thực hiện vào cơ sở dữ liệu và đồng thời giải phóng luồng khỏi bộ nhớ nhằm sử dụng cho các công việc khác của hệ thống. Việc người dùng nhập thông tin vào sẽ kích hoạt workflow thực hiện trở lại. Khi đó, workflow runtime sẽ yêu cầu 1 luồng khác T2 thực hiện tiếp tục quá trình đang còn dở, và thực hiện PrintGreeting.

3.1.4.5 Tracking - Lưu vết quá trình thực hiện của workflow

Thông thường quá trình thực hiện của workflow được lưu vết và được lưu vào cơ sở dữ liệu SQL. Tuy nhiên, WF cho phép người phép người phát triển tùy biến lại dịch vụ này và có thể lưu xuống cơ sở dữ liệu khác như Oracle, Db2, hoặc lưu dưới định dạng XML, và cũng có thể lưu trữ thông tin bằng các file log.

3.1.4.6 Workflow Changes – Thay đổi workflow đang thực hiện

Windows Workflow Foundation cho phép cập nhật tự động workflow đang chạy. (adsbygoogle = window.adsbygoogle || []).push({});

3.1.4.7 Rules và Conditions – Quy tắc và điều kiện

Windows Workflow Foundation cung cấp các quy tắc và điều kiện như là 2 cơ chế để định nghĩa quy trình nghiệp vụ trong workflow. Sử dụng các đoạn mã điều kiện là một cách để xác định khi nào đoạn mã được thực thi. Quy tắc là một dạng điều kiện có thể lập trình hoặc được định nghĩa trong một file XML. Từ những điều kiện đơn giản đến các tập hợp quy tắc phức tạp, công nghệ này dường như mang lại khả năng tích hợp các quy tắc vào trong workflow dễ dàng.

Ích lợi chính yếu của việc định nghĩa quy tắc nghiệp vụ là các quy tắc có thể thay đổi trong khi workflow đang chạy. Hơn nữa, các quy tắc còn giúp cho ta phân biệt rõ quy trình nghiệp vụ với workflow nhằm chia sẻ các quy tắc đó cho các workflow khác.

3.1.4.8 Fault Handling – Quản lý lỗi

Cásc ngoại lệ xảy ra trong các activity được quản lí bất đồng bộ bởi workflow runtime engine trong một tiến trình được gọi là fault handling. Các ngoại lệ sẽ được lập lịch trong một hàng đợi để xử lí. Nếu ngoại lệ ứng đúng với loại lỗi mà activity

FaultHadlerActivity xử lý thì activity này sẽ xử lí nó. Nếu ngoại lệ nào không được xử lí, nó sẽ được đẩy lên trên cho các activity cha cho đến khi nào gây ra sự kết thúc

workflow.

3.1.4.9 Chỉnh trang workflow - Workflow markup

Dựa trên nền tảng của định dạng file XAML (Extensible Application Markup Language), chỉnh trang workflow giúp người phát triển và người thiết kế phân định rạch ròi quy trình nghiệp vụ với các chi tiết thực thi cấp dưới được mô hình bởi các file kèm với mã nguồn. Vì được mô hình một cách rõ ràng, quy trình nghiệp vụ có thể được kích hoạt bằng cách tải file chỉnh trang workflow một cách trực tiếp vào workflow runtime engine lúc đang thực thi.

Một phần của tài liệu tìm hiểu và ứng dụng windows workflow foundation để hỗ trợ các quy trình nghiệp vụ (Trang 32 - 38)