Làm quen với 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.

pdf18 trang | Chia sẻ: lylyngoc | Lượt xem: 3103 | Lượt tải: 1download
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