Bài này giới thiệu tổng quan về Windows Workflow Foundation (WF). Phần đầu bàn về khái niệm
workflow (luồng công việc) trong các hoạt động nghiệp vụ. Từ sự phức tạp của các luồng công việc, chúng ta thấy rằng cần có các công cụ phát triển phần mềm giúp mô hình hóa và tiến hành lập trình các ứng dụng tập trung vào các luồng công việc một cách thuận tiện và đơn giản nhất. Windows Workflow Foundation (WF) là một thành phần phần mềm như thế. Phần tiếp theo sẽ đi vào chi tiết giới thiệu WF, kiến trúc WF, công cụ phát triển và cuối cùng là một ví dụ cơ bản ban đầu về WF giúp cho người đọc làm quen với WF.
18 trang |
Chia sẻ: lylyngoc | Lượt xem: 3331 | Lượt tải: 1
Bạn đang xem nội dung tài liệu Làm quen với Windows Workflow Foundation, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
MỤC LỤC
1 Workflow là gì? ............................................................................................................................. 2
2 Giới thiệu Windows Workflow Foundation ................................................................................. 3
2.1. Lý do nên sử dụng WF ................................................................................................................................... 3
2.2. Kiến trúc của Windows Workflow Foundation ............................................................................................. 4
2.2.1 Hai loại activity ................................................................................................................................. 6
2.2.2 Lưu trú ............................................................................................................................................... 6
2.2.1 Các dịch vụ chạy (runtime service) trong WF .................................................................................. 8
2.3. Mô hình xây dựng workflow ....................................................................................................................... 11
2.4. Các loại workflow trong WF ....................................................................................................................... 11
2.5. Công cụ phát triển WF ................................................................................................................................. 12
3 So sánh WF với WCF ................................................................................................................. 13
4 Bắt đầu với WF ........................................................................................................................... 13
Ví dụ đầu tiên với WF ........................................................................................................................ 14
Câu hỏi ôn tập .................................................................................................................................... 17
Tài liệu tham khảo ............................................................................................................................. 18
Microsoft Vietnam – DPE Team | WF – Bài mở đầu: Giới thiệu về Windows Workflow Foundation 2
Bài mở đầu
GIỚI THIỆU VỀ WINDOWS WORKFLOW FOUNDATION
Bài này giới thiệu tổng quan về Windows Workflow Foundation (WF). Phần đầu bàn về khái niệm
workflow (luồng công việc) trong các hoạt động nghiệp vụ. Từ sự phức tạp của các luồng công việc, chúng ta
thấy rằng cần có các công cụ phát triển phần mềm giúp mô hình hóa và tiến hành lập trình các ứng dụng tập trung
vào các luồng công việc một cách thuận tiện và đơn giản nhất. Windows Workflow Foundation (WF) là một
thành phần phần mềm như thế. Phần tiếp theo sẽ đi vào chi tiết giới thiệu WF, kiến trúc WF, công cụ phát triển
và cuối cùng là một ví dụ cơ bản ban đầu về WF giúp cho người đọc làm quen với WF.
1 Workflow là gì?
Một workflow (luồng công việc) là thứ tự các bước, tác vụ, sự kiện hoặc tương tác làm nên một quy trình
để thực hiện một công việc nào đó. Quy trình này có thể có nhiều bộ phận, cá nhân tham gia. Nguồn gốc luồng
công việc có lẽ bắt nguồn từ công tác xử lý văn bản: văn bản cần phải được di chuyển từ nơi này sang nơi khác
để thực hiện các công việc khác nhau (đọc, sửa đổi, góp ý, xem lại, phê chuẩn…).
Ví dụ, một luồng công việc thực hiện mua bán hàng hóa đơn giản nhất gồm một chuối các bước như sau:
Đầu tiên người mua xem tính năng sản phẩm và giá, nếu cảm thấy thỏa mãn thì chọn mua sản phẩm đó, tiếp
theo điền thông tin cá nhân vào phí thanh toán và cuối cùng là thanh toán đơn hàng
Hình 1. Ví dụ về một quy trình công việc
Thực tế cho thấy, các hệ thống quản lý thông tin chứa rất nhiều nghiệp vụ cần thực hiện như một luồng
công việc. Vì vậy có rất nhiều sản phẩm workflow tự động cho phép tạo mô hình luồng công việc và các thành
phần như là các form online, người dùng dùng chúng để đảm bảo tính nhất quán của công việc. Chẳng hạn như ở
ví dụ trên, luồng công việc đảm bảo rằng người mua hàng phải thực hiện bước chọn sản phầm và điền thông tin
khách hàng trước khi thực hiện thanh toán.
Microsoft Vietnam – DPE Team | WF – Bài mở đầu: Giới thiệu về Windows Workflow Foundation 3
2 Giới thiệu Windows Workflow Foundation
Windows Workflow Foundation (WF) là một công nghệ của Microsoft cho phép định nghĩa, thực thi và
quản lý các workflow. Công nghệ này được ra đời vào tháng 11 năm 2006 như là một phần của nền tảng .NET
framework 3.0 (còn gọi là WinFX).
WF, không chỉ cho phép bạn phối hợp các công việc như các chương trình truyền thống, nó có có một vài
điểm khác biệt quan trọng sau:
WF có thể điều khiển các công việc chạy trong thời gian dài bằng cách lưu trữ
(persisting) workflow vào chỗ lâu bền (trái với bộ nhớ chỉ tồn tại khi hệ điều hành chạy) như là đĩa cứng,
cơ sở dữ liệu khi workflow không làm gì và nạp trở lại khi workflow tiếp tục làm việc.
Thể hiện của workflow có thể được chỉnh sửa động khi đang chạy (thêm điều kiện mới,
cách xử lý khác với khi nó được tạo ra).
WF là mộ phương pháp lập trình khai báo (trái với lập trình viết mã lệnh) bằng cách kết
nối các thành phần được định nghĩa sẵn (gọi là “hành động” - activity).
WF cho phép bạn khai báo các luật nghiệp vụ, chúng tách rời mã vì vậy bạn dễ dàng sửa
đổi chúng về sau.
WF hỗ trợ các kiểu hệ thống khác nhau với hai loại workflow: workflow trình tự
(sequential) và workflow máy trạng thái.
2.1. Lý do nên sử dụng WF
Tại sao lại dùng luồng công việc (workflow): Lý do lớn nhất là vì luồng công việc cho phép bạn mô
hình hóa một cách trực quan và rõ ràng các luồng điều khiển của một ứng dụng. Thay vì biểu diễn logic ứng dụng
của bạn bằng một mớ mã phức tạp, thì khai báo logic đó bằng luồng công việc rõ ràng là làm đơn giản hơn. Nhờ
đó, bạn có thể kiểm tra logic ứng dụng của bạn, làm trực quan hóa nó, theo vết nó khi thực thi và kể cả thay đổi
nó khi đang chạy. Điều này rõ ràng là tuyệt vời.
Ngoài ra workflow cho phép phối hợp làm việc giữa con người và phần mềm bằng các loại giao diện
tương tác khác nhau: email, web-form, winform, instant message
Tại sao nên dùng WF: WF là nền tảng cho phép các nhà phát triển xây dựng các ứng dụng có các luồng
công việc trở nên đơn giản hơn. Thực tế, có rất nhiều nhà phát triển đã phát triển framework của riêng họ, điều
này cho thấy sự cần thiết phải có một framework đủ tốt hỗ trợ cho các ứng dụng về luồng công việc. Sự ra đời
của WF đã giải quyết được nhu cầu này. Một workflow trong WF được cấu thành từ các activity. Theo quan điểm
của người lập trình thì workflow hay activity đều là các đối tượng được hình thành từ các lớp, do vậy có thể định
nghĩa được các workflow hay activity tùy ý. Cũng giống winform hoặc webform có điều khiển chuẩn thì
Microsoft cũng cung cấp các activity cơ bản gọi là BAL (Base Activity Library), hầu hết các workflow đều được
xây dựng chỉ từ các activity này. Nhà phát triển có thể thiết kế workflow rất trực quan qua công cụ thiết kế
Microsoft Vietnam – DPE Team | WF – Bài mở đầu: Giới thiệu về Windows Workflow Foundation 4
workflow đồ họa trên (Workflow Designer) Visual Studio. Rất nhiều người thích tính trực quan và dễ dàng nắm
bắt của giao diện đồ họa này nhưng cũng có người thích những dòng mã hơn, vì thế WF cho phép họ làm như thế
hoặc phối hợp cả hai cách. Như vậy WF cho hiệu quả phát triển workflow luôn ở mức cao nhất, thuận tiện nhất
với tất cả mọi người. Workflow được WF hỗ trợ phát triển nhanh chóng và dễ dàng như vậy nên chi phí phát
triển sẽ giảm đáng kể mà chất lượng vẫn được đảm bảo.
2.2. Kiến trúc của Windows Workflow Foundation
Như đã giới thiệu ở trên, WF là một thành phần nằm trong nền tảng .NET 3.0. Bên cạnh WF, .NET 3.0
còn có một số mô hình lập trình mới như là WCF, WPF, CardSpace.
Hình 2. Vị trí WF trong .NET 3.0
Microsoft Vietnam – DPE Team | WF – Bài mở đầu: Giới thiệu về Windows Workflow Foundation 5
Hình 3. Kiến trúc của WF
WF là một mô hình lập trình, trang bị một cơ chế và các công cụ để xây dựng các ứng dụng thiên về
luồng công việc. Như trong hình… một workflow trong WF được cấu thành từ các activity, các activity này
thường là được tạo ra từ BAL - thư viện activity cơ bản của WF hoặc cũng có thể là các activity tùy biến của
người dùng. Một workflow sẽ chạy trong Runtime Engine, trong Runtime Engine có thể bao gồm cả các dịch vụ
chạy (Runtime Service). Đến lượt Runtime Engine lại được lưu trú ở một tiến trình của ứng dụng chủ (host
process), ứng dụng chủ có thể là bất cứ loại ứng dụng nào của .NET chạy phía client hay server: winform,
winservice, webform, web service.
Microsoft Vietnam – DPE Team | WF – Bài mở đầu: Giới thiệu về Windows Workflow Foundation 6
2.2.1 Hai loại activity
Hình 4. Các activity cơ bản
Thư viện activity cơ bản – BAL: Frameworkf WF đóng gói hơn 30 activity trong BAL.
BAL chứa các activity từ các điều khiển cơ bản cho đến các hành động phức tạp như là gọi web service.
Hình 3 hiển thị tất cả các activity BAL trong Toolbox của Visual Studio
Activity tùy biến: Bạn có thể dễ dàng tạo activity mới đáp ứng nghiệp vụ của bạn.
Activity tùy biến có thể thực hiện chức năng nào đó, từ đơn giản chẳng hạn như câu lệnh SQL Insert dữ
liệu đến phức tạp như là tạo một đơn đặt hàng.
2.2.2 Lưu trú
Vì WF không phải là một ứng dụng độc lập, nên nó cần phải được cho lưu trú lên một ứng dụng .NET
khác. Ứng dụng chủ có thể là bất cứ loại ứng dụng .NET nào chẳng hạn như winform, ASP.NET, console,
Windows Service hoặc web service.
Mặc dù workflow là nơi hầu hết các nghiệp vụ quan trọng thực thi, nhưng ứng dụng chủ cũng rất quan
trọng vì nó là nơi diễn ra vòng đời thi hành của workflow. Ứng dụng chủ là nơi workflow khởi hành và thường là
nơi người dùng tương tác.
Microsoft Vietnam – DPE Team | WF – Bài mở đầu: Giới thiệu về Windows Workflow Foundation 7
Mô hình có ứng dụng chủ này rất phù hợp vì cho phép WF tập trung vào xử lý nghiệp vụ, còn các tương
tác có thể được giao phó cho bất cứ loại ứng dụng nào khác trong .NET.
Việc tương tác giữa WF với ứng dụng chủ ra sao?
Tất nhiên WF không thể thực thi một mình, nó cần có tương tác với môi trường bên ngoài chính là ứng
dụng chủ. WF cung cấp cơ chế cho phép bạn dễ dàng và nhanh chóng truyền dữ liệu vào ra workflow, ngoài ra
các phương thức có thể điều khiển sự kiện để tương tác với bên ngoài.
Để dùng tham số giao tiếp giữa workflow và ứng dụng chủ, trong đoạn mã tạo workflow bằng phương
thức CreateWorkflow của lớp WorkflowRuntime, bạn có thể truyền đối tượng Dictionary chứa
các thành phần tham số cần thiết cho workflow.
Dạng giao tiếp khác của workflow là dịch vụ giao tiếp nội tại (local communication services), dạng giao
tiếp này được thực hiện giữa các lớp thông qua các sự kiện và phương thức. Ứng dụng chủ có thể “nói chuyện”
với workflow bằng cách kích hoạt các sự kiện mà được xử lý ở bên trong workflow. Workflow cũng có thể giao
tiếp với ứng dụng chủ bằng cách gọi các phương thức. Đây là dạng thông dụng của giao tiếp vì nó dùng khái các
niệm đã quen thuộc đối với các nhà phát triển.
Dùng dịch vụ giao tiếp nội tại rất đơn giản. Đầu tiên bạn cần phát triển một .NET Interface định nghĩa
các sự kiện và phương thức dùng để giao tiếp, ví dụ
[ExternalDataExchangeAttribute]
public interface ITalkWithMe
{
void TellSomethingToTheHost(string message);
event EventHandler NotifyTheWorkflow;
}
Sau đó tạo lớp triển khai interface trên như sau:
public class TalkWithMeService : ITalkWithMe
{
public void TellSomethingToTheHost(string message)
{
System.Windows.Forms.MessageBox("The workflow told me: " + message);
}
public event EventHandler NotifyTheWorkflow;
public void SendAnEventToTheWorkflow()
{
Microsoft Vietnam – DPE Team | WF – Bài mở đầu: Giới thiệu về Windows Workflow Foundation 8
NotifyTheWorkflow(this,
new
ExternalDataEventArgs(WorkflowEnvironment.WorkflowInstanceId));
}
}
Chú ý rằng interface ITalkWithMe có attribute ExternalDataExchange, nó giúp cho WF biết rằng
interface này là một dịch vụ giao tiếp nội tại. Tại lớp triển khai của interface này, phương thức
TellSomethingToTheHost được gọi từ một thể hiện của workflow và cho phép truyền message tới dịch vụ.
Phương thức SendAnEventToTheWorkflow dùng để ứng ụng chủ sinh sự kiện NotifyTheWorkflow
2.2.1 Các dịch vụ chạy (runtime service) trong WF
Hình 5. Dịch vụ chạy trong WF
Các dịch vụ chạy trong WF chứa các lớp chuẩn và lớp người dùng tùy biến cần thiết cho engine của
workflow runtime trong quá trình thi hành (hình 5). Các dịch vụ này thực hiện các tác vụ liên quan đến thực thi
và bảo trì workflow. Sau đây là một số dịch vụ:
Tên dịch vụ Mô tả Các lớp liên quan
Transaction
(giao tác):
Là dịch vụ giúp bạn bảo đảm tính toàn vẹn của ứng
dụng workflow. Transaction được định nghĩa là một
nhóm các activity phải được thực thi thành công toàn
bộ. Nếu một activity trong chuỗi mà bị lỗi, các hành
động đã thực hiện phải được quay lui. Tuy nhiên các
transaction mà thực thi trong thời gian dài không phải
lúc nào cũng có thể quay lui, thay vào đó nó một số
DefaultWorkflowTransactionService
(mặc định)
SharedConnectionWorkflow
-TransactionService
Microsoft Vietnam – DPE Team | WF – Bài mở đầu: Giới thiệu về Windows Workflow Foundation 9
logic được triển khai để đảm bảo trạng thái ổn định
của workflow. Kiến trúc dịch vụ transaction trong WF
hỗ trợ hai loại transaction là transaction ACID
(Atomic – nguyên tử, Consistency – nhất quán,
Isolate – phân tách và Durable – lâu bền) và
transaction chạy lâu dài (long-running). Transaction
chạy lâu dài khác với ACID ở chỗ nó không có tính
Isolate, bởi vì có các activity nhất định không thể
quay lui. Ví dụ trong transaction nào đó có giao tiếp
với khách hàn, khi hành động gửi email tới khách
hàng đã thực thi, nếu sau đó có activity nào đó bị lỗi
thì cũng không thể lấy lại được email đã gửi, lúc này
cách tốt nhất để đảm bảo transaction vẫn thực thi tốt
là đợi khách hàng gửi lại email báo là họ đã lỗi.
Tracking
(theo dõi):
Lịch vụ này cho phép bạn theo dõi và ghi lại sự thực
thi của workflow. Dịch vụ tracking dùng khái niệm
tracking profiles và tracking channels để xác định
activity nào cần theo dõi và loại phương tiện lưu trữ là
gì. Lớp trừu tượng TrackingService dùng để quản lý
các profile và channel cho workflow runtime. Thông
thường, người ta hay lưu thông tin đó vào SQL
Server.
SqlTrackingService
Persistence
Một trong những nguyên tắc của workflow là nó cần
phải lưu được trạng thái và có thể chạy trong thời gian
dài. Nguyên tắc này quan trọng vì workflow phải
tương tác với các tác nhân ngoài như người dùng và
ứng dụng khác, các nghiệp vụ này có thể thực hiện
trong khoảng thời gian dài và có những lúc không làm
gì cả do các tác nhân này có thể đang thực hiện lại
quay ra làm việc khác rồi mới tiếp tục quay trở lại với
workflow. Những lúc workflow không làm gì cả trong
khoảng thời gian dài mà nó vẫn tồn tại trong bộ nhớ
sẽ làm tốn tài nguyên máy tính, do vậy WF hỗ trợ cơ
chế cho phép tháo workflow ra khỏi bộ nhớ và lưu ra
phương tiện lưu trữ lâu dài chẳng hạn như cơ sở dữ
liệu. Cơ chế như vậy được gọi là persistence, sẽ được
trình bày kỹ trong bài 6.
SqlWorkflowPersistenceService
Microsoft Vietnam – DPE Team | WF – Bài mở đầu: Giới thiệu về Windows Workflow Foundation 10
Scheduling
Cho phép bạn định nghĩa cách workflow thi hành
trong mối quan hệ với các thread thế nào. Mặc định
WF chạy các workflow theo cơ schế không đồng bộn,
thức là khi workflow khởi động từ ứng dụng chủ, nó
chạy trong một thread riêng biệt và trả về điều khiển
cho ứng dụng chủ ngay lập tức. Điều này rất tốt cho
ứng dụng như winform vì nó làm cho giao diện không
bị “đơ”. Tuy nhiên với các ứng dụng web form hay
web service chạy trên server, thì tốt hơn là khóa
thread của ứng dụng chủ lại đợi cho workflow trả về
điều khiển vì nếu không ứng dụng chủ mà hồi đáp cho
client ngay thì không có giá trị gì hết. Tất cả việc điều
khiển cơ chế thread như vậy được thực hiện bằng dịch
vụ scheduling.
DefaultWorkflowScheduler Service,
ManualWorkflow SchedulerService
Workflow
Loader
Cho phép tạo thể hiện của workflow khi gọi phương
thức CreateWorkflow
DefaultWorkflow LoaderService
Data
Exchange
Quản lý các dịch vụ truyền thông tùy biến
Dịch vụ tùy
biến (của
người dùng)
Tuy các dịch vụ được cung cấp sẵn có chứa rất nhiều
dịch vụ nhưng luôn nảy sinh nhu cầu dùng các dịch
vụ đặc trưng, chẳng hạn lập trình viên nào đó có thể
yêu cầu workflow theo dõi dữ liệu gửi qua web
service có bị lỗi hay không. WF cho phép người dùng
định nghĩa các dịch vụ của riêng họ và được sử dụng
như các dịch vụ chuẩn được cung cấp sẵn trong frame
work
Thừa kế từ lớp
WorkflowRuntimeService
Để dùng một dịch vụ, bạn cần khai báo và “Add” nó vào thể hiện của workflow runtime trước khi chạy
workflow. Đoạn mã sau đây cho ta một ví dụ về dùng dịch vụ Tracking:
private void RunWorkflow()
{
WorkflowRuntime wr = new WorkflowRuntime();
string connectionstring = "Initial Catalog=Tracking;Data
Source=localhost; Integrated Security=SSPI;";
//Out of the Box Tracking Service
Microsoft Vietnam – DPE Team | WF – Bài mở đầu: Giới thiệu về Windows Workflow Foundation 11
wr.AddService(new SqlTrackingService(connectionstring));
wr.CreateWorkflow(typeof(SimpleWorkflow)).Start();
}
2.3. Mô hình xây dựng workflow
Để xây dựng workflow trong WF, người ta có thể tạo “khai báo” workflow bằng một ngôn ngữ dựa trên
XML gọi là XAML, hoặc có thể dùng mã lập trình C# hoặc VB, hoặc kết hợp cả hai cách đó. Sau khi đã xây
dựng được workflow cần biên dịch chúng thành .NET assembly để có thể thực thi được trong môi trường .NET
runtime. Quá trình biên dịch gồm hai công đoạn:
Dịch từ mã khai báo hoặc mã lập trình thành các đoạn mã C#/VB thuần túy bằng công cụ
Workflow Compiler (file wfc.exe).
Dịch từ mã C#/VB sang .NET assembly giống như các ứng dụng .NET truyền thống.
Hình 6. Mô hình xây dựng workflow trong WF
2.4. Các loại workflow trong WF
Windows Workflow Foundation cung cấp hai loại workflow: trình tự (sequential) và máy trạng thái
(state-machine). Mỗi loại có đặc điểm và tập các activity riêng.
Workflow trình tự là loại thông dụng hơn và là ví dụ mà người ta hay nghĩ khi nói đến
workflow. Loại workflow này mô tả một tiến trình có điểm khởi đầu, sau đó thực thi một số các activity
theo thứ tự được định sẵn rồi cuối cùng đi đến điểm kết thúc. Trong workflow trình tự bạn có thể dùng
các logic điều khiển tương tự các ứng dụng truyền thống: if-then, vòng lặp while, điểm khác biệt ở đây là
các logic điều khiển này có thể được thể hiện trực quan và được khai báo chứ không cần lập trình.
Microsoft Vietnam – DPE Team | WF – Bài mở đầu: Giới thiệu về Windows Workflow Foundation 12
Workflow máy trạng thái khác với workflow trình tự ở chỗ nó là sự chuyển đổi linh
hoạt giữa các trạng thái chứ không phải là sự thi hành theo thứ tự định trước. Việc chuyển đổi gây ra bởi
các sự kiện. Workflow loại này bao giờ cũng bắt đầu ở trạng thái khởi đầu, sau đó hoạt động di chuyển
trạng thái và có thể đạt đến trạng thái kết thúc. Workflow máy trạng thái sẽ được trình bày cụ thể riêng ở
bài bảy.
2.5. Công cụ phát triển WF
Hiện tại, WF được tích hợp như là một thành phần (component) phần mềm nằm trong Microsoft.NET 3.0
Người dùng có thể phát triển các ứng dụng WF bằng Visual studio 2008 hoặc Visual studio 2005 có tích hợp bộ
Visutal Studio 2005 Extensions for Windows workflow Foundation. Trong Visual Studio có thể tạo một dự án
loại Workflow bằng ngôn ngữ lập trình C# hoặc VB. Trong dự án workflow chúng ta có thể thiết kế workflow
trực quan bằng công cụ Workflow D