Sự khác biệt của Workflow Tham khảo thêm thêm chapter 1 Pro WF 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 t
Trang 1TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ PHẦN MỀM
KHÓA LUẬN TỐT NGHIỆP
NGHIÊN CỨU WORKFLOW SYSTEM VÀ XÂY DỰNG HỆ THỐNG QUẢN LÝ TÀI LIỆU QUA MẠNG (STUDY WORKFLOW SYSTEM AND BUILDING AN ONLINE DOCUMENT MANAGEMENT SYSTEM)
Giáo viên hướng dẫn: TS NGÔ THANH HÙNG
Sinh viên thực hiện:
1.LÊ CAO THÙY
2.PHẠM CÔNG THƯỞNG
Lớp: CNPM01
Khóa: 01
Tp.Hồ Chí Minh, Tháng 03 năm 2011
Trang 2Trong hơn 10 năm trở lại đây Chưa khi nào quá trình tin học hóa lại diễn ra mạnh mẽ và bùng nổ đến như vậy Nó len lỏi ăn sâu và anh hưởng đến hầu hết các lĩnh vực, ngành nghề trong xã hội, cuộc sống Và cũng từ đó, chưa bao giờ các kĩ sư lập trình viên lại có vai trò quan trọng đến cuộc sống như vậy Họ đưa đến cuộc sống những sản phẩm ứng dụng vô cùng hữu ích phục vụ công việc, cuộc sống, con người
Đi đôi với việc xây dựng ứng dụng thì công việc bảo trì phát triển sản phẩm và vô cùng cần thiết Thế nhưng với lối lập trình truyền thống chúng ta thường giải quyết các logic, trình tự công việc bằng một mớ mã (code) phức tạp, hỗn độn và thiếu chuyên nghiệp Thông thường chỉ những người trực tiếp phát triển mới có thể hiểu rõ, và điều này gây rất nhiều khó khăn cho việc phát triển và bảo trì sau này
Vậy làm sao để giải quyết vấn đề trên? Workflow System chính là giải pháp Với giải pháp Workflow mọi logic công việc đều sẽ được giải quyết dưới dạng mô hình hóa Thay
vì biểu diễn bằng mớ mã phức tạp thì giờ đây được thay bằng những mô hình trực quan hơn, dễ hình dung hơn, dễ nắm bắt hơn…Rất hữu ích cho việc nắm bắt và bảo trì sau này Với yêu cầu cấp thiết đó, Nhóm chúng tôi quyết định nghiên cứu đề tài này từ cơ bản nhất chính là:Windows Workflow Foundation Một căn nhà tốt là một căn nhà có nèn móng vững vàng, chắc chắn Việc nắm rõ kiến thức nền tốt sẽ giúp bạn dễ dàng phát triển
về sau hơn
Mặt dù đã dành rất nhiều thời gian và công sức để nghiên cứu nhưng chắc chắn chúng tôi
sẽ không tránh mắc phải những thiếu sót Rất mong được nhận ý kiến đống góp từ các Thầy (Cô) và các bạn
Tp HCM, Ngày 29 tháng 03 năm 2011
Lê Cao Thùy Phạm Công Thưởng
Trang 3Chúng em xin chân thành cảm ơn Khoa Công Nghệ Phần Mềm, Trường Đại học Công Nghệ Thông Tin ĐHQG Tp.HCM đã cho phép và tạo điều kiện cho chúng em thực hiện
đề tài tốt nghiệp này
Chúng em xin chân thành cảm ơn thầy Ngô Thanh Hùng đã tận tình hướng dẫn, chỉ bảo chúng em trong suốt quá trình thực hiện đề tài này Qua sự hướng dẫn của Thầy, chúng
em không chỉ học được nhiều kiến thức bổ ích mà còn học được ở thầy phương pháp nghiên cứu khoa học, thái độ và tinh thần làm việc nghiêm túc, có trách nhiệm
Chúng em cũng xin chân thành cảm ơn các Thầy (Cô) trong Khoa Công nghệ phần mềm
đã trang bị cho chúng em những kiến thức bổ ích trong suốt quá trình học tập tại trường Những kiến thức ấy đã giúp chúng em rất nhiều trong quá trình làm đề tài và cũng là hành trang cho chúng em tự tin, vững bước vào đời
Chúng con xin ghi nhớ công ơn của Ba, Mẹ Ba Mẹ đã luôn là chỗ dựa vững chắc, luôn là niềm động viên giúp chúng con vượt qua những khó khan trong cuộc sống
Và cuối cùng, Chúng tôi cũng xin chân thành cảm ơn các bạn sinh viên CNPM01 đã đồng hành và giúp đỡ với chúng tôi trong thời gian qua
Mặc dù đã cố gắng hoàn thành luận văn với tất cả nổ lực của bản thân, nhưng chắc chắn chúng em không tránh khỏi những sai sót, chúng em rất mong được quí Thầy (Cô) tận tình chỉ bảo Một lần nữa chúng em xin gửi đén tất cả mọi người lời cảm ơn chân thành nhất
Tp HCM, Ngày 29 Tháng 03 Năm 2011
Lê Cao Thùy Phạm Công Thưởng
Trang 4Document management system is very necessary for most enterprises and organizations
It supports all activities with documents such as creating, deleting, modifying and sharing
or “flowing” them between the members of organization
In this thesis we will mention some features of workflow system Then we will propose
an architecture of a system for managing most of activities with document in a faculty as mentioned above The system was built on Workflow Foundation in Visual Studio 2010 The users work with files stored on a distributed file server through a web interface
Trang 5(Của giảng viên hướng dẫn)
………
………
………
………
………
………
………
………
………
………
………
………
………
Tp HCM, Ngày Tháng Năm 2011
Giảng viên hướng dẫn
TS.Ngô Thanh Hùng
Trang 6NHẬN XÉT (Của giảng viên phản biện)
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
Tp.HCM, Ngày tháng năm 2011
Giảng viên phản biện
Ths.Phan Nguyệt Minh
Trang 7CHƯƠNG 1: MỞ ĐẦU 1
1.1.Lý do chọn đề tài 1
1.2.Tính cấp thiết của đề tài 1
1.3.Khái quát mục tiêu và ứng dụng được xây dựng 2
CHƯƠNG 2-CƠ SỞ LÝ THUYẾT WORKFLOW FOUNDATION 5
2.1.Vài nét khái quát 5
2.1.1.WorkFlow là gì? 5
2.1.2.Giới thiệu Window Workflow Foundation 8
2.2.Xây dựng Workflow 15
2.2.1.Mô hình lập trình WF 15
2.2.2.Các cách viết WF 18
2.3 Khám phá Workflow Activity 29
2.3.1.Giới thiệu tổng quan về Activity 29
2.3.2.Các Activity thông dụng 30
2.4.Activity tùy biến 34
2.4.1.Tại sao nên xây dựng activity tùy biến? 34
2.4.2.Xây dựng Activity tùy biến 35
2.4.3 Các thành phần Activity 42
2.5.Tháo và nạp các thể hiện của Workflow 46
2.5.1.Đảm bảo tính lâu dài của các Workflow 47
2.5.2.Giới thiêu về dịch vụ SqlWorkflowPersistenceService 48
2.5.3.Cài đặt khả năng tháo và nạp thể hiện workflow (xem thêm WF_Lesion 5) 48
2.6.Workflow máy trạng thái 48
2.6.1.Giới thiệu Workflow máy trạng thái 48
2.6.2.Ví dụ workflow máy trạng thái (tham khảo thêm trong WF_Lession 7) 52
2.7.Luật trong Workflow 52
2.7.1.Khái quát luật trong WF 52
2.7.2.Các luật trong WF 52
2.8.Workflow và WebService 54
Trang 82.8.2 Xuất workflow dưới dạng Web service 56
2.9 Workflow trong SharePoint 67
2.9.1.Tìm hiểu Human Workflow 68
2.9.2.Tìm hiểu System workflow 69
2.9.3.Các giai đoạn và các Workflow mặc định trong SharePoint 70
2.9.4.Các công cụ hỗ trợ Workflow trong SharePoint 72
CHƯƠNG 3- THIẾT KẾ VÀ CÀI ĐẶT 74
3.1.Thiết kế cơ sở dữ liệu 74
3.1.1.Sơ đồ luồng dữ liệu (Flow Data Diagram- FDD) 74
3.1.2.Các bảng thực thể và thuộc tính 75
3.1.3 Sơ đồ quan hệ dữ liệu và logic 78
3.1.4 Sơ đồ UseCase 81
3.2.Thiết kế ứng dụng 83
3.2.1.Biểu đồ lớp 83
3.2.2.Sơ đồ tuần tự (Sequence Diagram) 85
3.3.Workflow được thiết kế cho ứng dụng 89
3.3.1 Workflow Add_Folder 89
3.3.2 Workflow Syn 90
3.4.Thiết kế giao diện 91
3.4.Cài đặt 93
3.4.1.Cài đặt cơ sở dữ liệu 93
CHƯƠNG 4- KẾT LUẬN 104
4.1.Kết quả đạt được 104
4.1.1 Những mặt đạt được: 104
4.1.2.Những hạn chế: 104
4.2 Hướng phát triển 104
DANH MỤC TÀI LIỆU THAM KHẢO 106
Trang 9Hình 1.1Các chức năng ứng dụng 3
Hình 2.1 Mô hình xây dựng workflow trong WF 6
Hình 2.2 Ví dụ WorkFlow trinh tự 7
Hình 2.3 WorkFlow máy trạng thái 8
Hình 2.4 Vị trí WF trong NET 3.0 Hình 2.5 Kiến trúc của WF 9
Hình 2.6 Kiến trúc WF 16
Hình 2.7 Thiết kế workflow bằng Workflow Designer trong Víual Studio 17
Hình 2.8 Những lập trình viên liên quan đến WF 18
Hình 2.9 Quy trình xây dựng workflow trong WF 18
Hình 2.10 Tạo project FirstCodeWFApplication 19
Hình 2.11 Thiết kế workflow 20
Hình 2.12 Hộp thoại chọn luật cho activity While 21
Hình 2.13 Soạn luật 21
Hình 2.14 Workflow hoàn thiện với các activity của nó 22
Hình 2.15 Luật cho nhóm bên phải của activity IfElse 23
Hình 2.16 Tạo Project FirstXAMLWFApplication 25
Hình 2.17 Tạo Workflow với mã XAML 26
Hình 2.18 Thiết kế workflow MyWorkflow 26
Hình 2.19 Logic thực thi activity Replicator 32
Hình 2.20 Tạo dự án CompositionWorkflowExample 36
Hình 2.21 Tạo dự án HelloWorldActivityLibrary 37
Hình 2.22 Thiết kế HelloWorldActivity 38
Hình 2.23 Activity HelloWorldActivity hiển thị bên cạnh các activity khác trong toolbox 39
Hình 2.24 Dùng activity HelloWorldActivity trong workflow1 39
Hình 2.25 Kêt qủa chạy ứng dụng CustomActivity 40
Hình 2.26 Tạo dự án DerivationWorkflowExample 40
Hình 2.27 Tạo dự án WriteConsoleActivity 41
Hình 2.28 Cấu hình activity WriteConsoleActivity 42
Hình 2.29 Chạy ứng dụng DerivationWorkflowExample 42
Hình 2.30 Tác dụng của các thành phần Validator và Designer 46
Hình 2.31 Tháo và nạp thể hiện trong workflow 47
Hình 2.32 Example state machine workflow 49
Hình 2.33 Quan hệ giữa các activity của workflow máy trạng thái 50
Hình 2.34 Nhiều trạng thái cùng xử lý một sự kiện 51
Trang 10Hình 2.37 Tạo dự án SimpleWorkflowWebService 58
Hình 2.38 Màn hình thiết kế workflow SimpleWorkflowWebSevice 60
Hình 2.39 Workflow sau khi có thêm activity While 64
Hình 2.40 Màn hình thiết kế workflow StatefulWorkflowWebService 66
Hình 2.41 Human Workflow 69
Hình 2.42 Ví dụ System Workflow 69
Hình 3.1 Sơ đồ quan hệ dữ liệu 79
Hình 3.2 Sơ đồ Logic 81
Hình 3.3 Sơ đồ UseCase 82
Hình 3.4 Sơ đồ lớp 1 83
Hình 3.5 Sơ đồ lớp 2 84
Hình 3.6 Sơ đồ tuần tự QL đăng nhập 85
Hình 3.7 Sơ đồ tuần tự QL tài khoản 86
Hình 3.8 Sơ đồ tuần tự QL Thư mục 87
Hình 3.9 Sơ đồ tuần tự QL tập tin 88
Hình 3.10 Mô Hình Workflow Syn 90
Hình 3.11 Giao diện chính của ứng dụng 1 91
Hình 3.12 Giao diện chính của ứng dụng 2 92
Hình 3.13Giao diện với menu 92
Hình 3.14 Giao diện phân quyền 93
Hình 3.15 Giao diện thêm mới một tài liệu 93
Trang 11Bảng 1-1 Mô tả chi tiết các UseCase 4
Bảng 2-1 Bảng mô tả các dịch vụ trong WF 12
Bảng 2-2 Các thuộc tính của Activity 29
Bảng 2-3 Các phương thức của Activity 30
Bảng 2-4 Các phương thức của WorkflowInstance 48
Bảng 2-5Các biểu thức luật thường dùng 54
Bảng 2-6 Các thuộc tính quan trong của Activity InvokeWebService 55
Bảng 3-1 Bảng AllowDownload 75
Bảng 3-2Bảng DocumentType 75
Bảng 3-3 Bảng File_Log 75
Bảng 3-4 Bảng FileInfo_T 75
Bảng 3-5 Bảng Folder_View 76
Bảng 3-6 Bảng FileRoles 77
Bảng 3-7Bảng Folder_T 77
Bảng 3-8 Bảng RootFolder 77
Bảng 3-9 Bảng Group_T_Role 78
Bảng 3-10 Bảng User_T_role 78
Trang 12CHƯƠNG 1: MỞ ĐẦU
1.1.Lý do chọn đề tài
Về phương diện của một sinh viên khoa công nghệ phần mềm nói riêng và của lập trình viên nói chung, chúng ta dễ dàng nhận thấy rằng phương pháp lập trình truyền thống chúng ta đang sử dụng là khá phức tạp và chưa được chuyên nghiệp hóa Điều này được thể hiện khi muốn biểu diễn một logic ứng dụng hay một qui trình tác vụ của một công việc gì đó thường được biểu diễn bằng một mớ mã hỗn độn và phức tạp Chính điều này gây trở ngại lớn cho việc kiểm tra tính logic ứng dụng cũng như bảo trì, phát triển ứng dụng sau này
Vấn đề được đặt ra là làm sao để biểu diễn một cách trực quan những logic, qui trinh ứng dụng này? Workflow System chính là một giải pháp Nó 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 ứng dụng Thay vì biểu diễn logic ứng dụng của bản bằng một mớ code phức tạp, thì việc khai báo logic đó bằng workflow là đơ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à cả thay đổi nó khi đang chạy Điều này thật tuyệt, và hơn hết nó giúp ta học được một phương pháp lập trình mới, đơn giản hơn, logic hơn và đồng thời chuyên nghiệp hơn
Hơn nữa, ứng dụng cho khoa (cũng tương tự như ứng dụng văn phòng) là một ứng dụng có khá nhiều tác vụ và luồng công việc, nên có thể nói đây là một mảnh đất màu
mỡ để ta áp dụng những gì tìm hiểu và nghiên cứu được từ cơ sở lý thuyết đem vào thực tiễn
1.2.Tính cấp thiết của đề tài
Workflow là một dạng lập trình khai báo (khác với lập trình bằng mã lệnh truyền thống) đơn giản hơn, logic hơn đồng thời cũng chuyên nghiệp hơn Việc áp dụng workflow vào lập trình sau này sẽ giúp cho lập trình viên nói chung và sinh viên Công nghệ phần mềm của Trường chúng ta nói riêng sẽ ngày càng chuyên nghiệp hơn, đẳng cấp hơn Đây chính là cơ sở khác biệt khi đi xin việc và làm việc sau này
Theo tìm hiểu và lấy yêu cầu thực tế của nhóm Nhóm nhận thấy việc trao đổi thông tin qua lại giữa văn phòng khoa với sinh viên, giữa sinh viên với sinh viên còn nhiều bất cập Trên hết việc chia sẻ tài liệu học tập của giữa sinh viên với sinh viên… Thời khóa biểu, các loại đơn, thông báo …giữa văn phòng khoa với sinh viên vẫn còn quá phức tạp
Việc xây dựng một Explorer trên mạng giữa sinh viên với văn phòng khoa là hết sức cần thiết và cấp bách Nên cần được thực hiện Đây chính là ứng dụng mà nhóm quyết định xây dựng
Trang 131.3.Khái quát mục tiêu và ứng dụng đƣợc xây dựng
Nghiên cứu tìm hiểu và nắm bắt Workflow System từ cơ bản nhất dựa trên Workflow Foundation trên nền NET 3.0 đến Workflow system ở mức cao hơn là Workflow System trong SharePoint 2010 Qua đó hi vọng có thể truyền tải đến Thầy (Cô) và các bạn những kiến thức về Workflow rõ ràng nhất, xúc tích nhất, từ đó có thể vận dụng
nó dễ dàng trong lập trình hiện tại và sau này
Từ kiến thức tìm hiểu cũng như nhu cầu cấp thiết đặt ra Nhóm sẽ nỗ lực xây dựng hệ thống quản lý tài liệu (Explorer) trực tuyến phục vụ cho nhu cầu của Khoa Các tính năng dự kiến gồm:
Thêm mới một tài liệu
Cắt/dan một tài liệu
Thay đổi tên một tài liệu
Xóa một hay nhiều tài liệu
Làm tươi (Refresh) dữ liệu
Di chuyển đến thư mục cha
Di chuyển tài liệu
Tìm kiếm tài liệu
Đồng bộ tài liệu: Đồng bộ dữ liệu giữa ổ cứng và database
Theo dõi lịch sử tài liệu: Các version bản của tài liệu
Phân quyền trên tài liệu
Quản lý [Check out]hoặc [Check in]tài liệu
Download tài liệu
Chỉ mục thông tin tài liệu
Quản lý version tài liệu
Các chức năng trên được mô tả trực quan trong usecase diagram sau:
Trang 14Hình 1.1Các chức năng ứng dụng
Chi tiết của các Usecase được mô tả chi tiết trong bảng sau:
Trang 15Bảng 1-1 Mô tả chi tiết các UseCase
QLPhanQuyen Quản lý việc cấp quyền cho User
DiChuyenTapTin Di chuyển tập tin
Trang 16CHƯƠNG 2-CƠ SỞ LÝ THUYẾT WORKFLOW FOUNDATION 2.1.Vài nét khái quát
2.1.1.WorkFlow là gì?
Là người phát triển, công việc của chúng ta là để giải quyết vấn đề thật sự trong công việc Các loại và phức tạp của các vấn đề sẽ khác nhau rộng rãi tùy theo tính chất của công việc Nhưng bất kể sự phức tạp của bất kỳ vấn đề nào đó, chúng ta có xu hướng để giải quyết vấn đề trong cùng một cách: chúng ta chia vấn đề thành các bộ phận quản lý được Những bộ phận được chia thành các nhiệm vụ nhỏ hơn, và cứ như vậy
Cuối cùng khi chúng ta đã đạt đến một điểm mà tại đó mỗi công việc có một độ lớn thực sự để hiểu và quản lý, chúng ta xác định lại các bước cần thiết để hoàn thành nhiệm vụ Các bước luôn luôn có một thứ tự liên kết với chúng Nó đại diện cho một chuỗi những chỉ dẫn riêng biệt sẽ mang lại những hành vi mong đợi chỉ khi chúng được thực hiện theo đúng thứ tự
Workflow đơn giản chỉ là trật tự của một loạt các bước thực hiện hiện một số mục đích được xác định theo mọt bộ quy tắc Theo định nghĩa đó, những gì chúng
ta vừa mô tả là một Worflow
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
Sự khác biệt của Workflow (Tham khảo thêm thêm chapter 1 Pro WF )
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ả 2 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 Complier (file wfc.exe)
Trang 17 Dịch từ mã C# /VB sang NET assembly giống như các ứng dụng NET truyền thống
Hình 2.1 Mô hình xây dựng workflow trong WF
Các loại workflow trong WF:
Có 2 loại
Workflow trình tự (Sequential Workflow) 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 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
Trang 18Hình 2.2 Ví dụ WorkFlow trinh tự
Workflow máy trạng (State machine Workfow)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
Trang 19Hình 2.3 WorkFlow máy trạng thái 2.1.2.Giới thiệu Window Workflow Foundation
Nếu Workflow quan trọng thì tại sao ta lại sử dụng Windows Workflow Foundation
(WF)? Microsoft đã cung cấp cho nền tảng này để đơn giản hóa và nâng cao việc phát triển NET của bạn Nó không phải là một ứng dụng độc lập Nó là nền tảng phần mềm được thiết kế để cho phép các ứng Workflow trong các ứng dụng của bạn Bất kể loại ứng dụng bạn đang phát triển , có nhiều vấn đề ứng dụng trong WF mà bạn có thể tận dụng
Lý do sử dụng WF: (Tham khảo thêm Pro_WF chapter1)
2.1.2.1.Kiến trúc của Windows Workflow Foundation
Trang 20Như đã 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 còn có một số mô hình lập trình mới như là WCF, WPF, CardSpace
Hình 2.4 Vị trí WF trong NET 3.0 Hình 2.5 Kiến trúc của WF
WF là một mô hì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 2.5 một workflow trong WF được cấu 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 dung.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ưa 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, webservice
2.1.2.2.Môi trường phát triển WF
Windows Workflow Foundation là một phần của NET 3.0.Các môi trường phát
Add-in cho Visual Studio 2005.Visual Studio 2008 hiện nay bao gồm tích hợp hỗ trợ cho WF (không có add-in), và.NET 3.5 bao gồm một số tính năng mới WF như hỗ trợ cho các dịch vụ công việc
Để phát triển các ứng dụng bằng cách sử dụng Windows Workflow Foundation, bạn
sẽ cần phải cài đặt một thiết lập tối thiểu của các phần mềm Các yêu cầu tối thiểu như
Trang 21 Visual Studio 2008 Professional, Standard, or Team System
The NET 3.5 runtime (được cài đặt cùng với Visual Studio 2008)
Sự kết hợp giữa VS 2008 với NET 3.5 sẽ cho phép bạn sử dụng tất cả các tính năng mới nhất WF Ngoài ra, bạn vẫn có thể sử dụng Visual Studio 2005 và NET 3.0 cho
WF phát triển Tuy nhiên, nếu làm vậy , bạn sẽ bị giới hạn khi sử dụng các tính năng gốc của WF.Các yêu cầu tối thiểu đối với WF khi sử dụng Visula Stdio và NET 3.0 là:
Visual Studio 2005 Enterprice, Professional, or Standard
The NET 3.0 runtime
Một phiên bản được chỉ định của Windows SDK hỗ trợ WF
The WF add-in đến Visual Studio
2.1.2.3.Thƣ viện lớp và Framework
Các thư viện lớp bao gồm các lớp cơ sở và các interface mà bạn tận dụng khi xây dựng các ứng dụng workflow Chúng là những khối xây dựng mà bạn sử dụng và mở rộng khi xây sựng ứng dụng
Với một vài ngoại lệ, tất cả các lớp liên quan đến WorkFlow đều được tổ chức tại một trong những namespace System.Workflow Bản sau cung cấp tổng quan những không gian tên có trong WF
System.Workflow.Activities Bao gồm các activities chuẩn và
những lớp liên quan để hình thành các khối xây dựng một Workflow
System.Workflow.Activities.Rules Bao gồm những điều kiện và
hành động được dùng để định nghĩa các qui tắc
System.Workflow.ComponentModel Bao gồm những lớp cơ sở chính
và interface được sử dụng bởi những lớp trong namespace khác
System.Workflow.ComponentModel.Compiler Bao gồm các lớp được sử dụng để
biên dịch WorkFlow
System.Workflow.ComponentModel.Designer Cho phép bạn mở rộng hành vi
thiết kế của activities và WorkFlow
System.Workflow.ComponentModel.Serialization Bao gồm các lớp được sử dụng
trong suốt Workflow tuần tự và
Trang 22không tuần tự
System.Workflow.Runtime Bao gồm các lớp quản lý môi
trường runtime trong Workflow
System.Workflow.Runtime.Configuration Bao gồm các lớp dùng để cấu
hình Workflow Runtime
System.Workflow.RuntimeDebugEngine Bao gồm các lớp liên quan dến
chạy debug Workflow
System.Workflow.Runtime.Hosting Bao gồm các lớp liên quan đến
việc lưu trữ Workflow runtime như core service
System.Workflow.Runtime.Tracking Bao gồm các lớp được sử dụng
bởi tracking service
System.ServiceModel Bắt đầu với NET 3.5 tên miền
không gian này có một vài lớp được sử dụng bởi WF không gian này thuộc về Windows Communication Foundation (WCF), nhưng nó bao gồm các lớp học (ví dụ: WorkflowServiceHost) được sử dụng để khám phá Workflow như WCF service
2.1.2.4 Các dịch vụ chạy (runtime service) trong WF
Trang 23Cá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) 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ụ:
Transaction được định nghĩa là một nhóm các 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
DefaultWorkflowTransactionService (mặc định)
TransactionService
Trang 24SharedConnectionWorkflow-đó nó một số 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à Dủable-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
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 dung 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
TrackingService dung
để 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ì worlflow phải tương tác với các tác nhân ngoài
SqlWorkflowPersistenceService
Trang 25dụng khác, các nghiệp
vụ này có thể 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 tai trong bộ nhiứ 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ế chư vậy được gọi là persistence
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ơ chế không đồng bộ, 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 webservice chạy trên server, thì tốt hơn là khá 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ư
DefaultWorkflowSheduler Service, ManualWorkflow ShedulerService
Trang 26vậy được thực hiện bằng dich vụ scheduling
Workflow Loader Cho phép tạo thể hiện
của workflow khi gọi phương thức Create Workflow
Default Workflow 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 webservice có bị lỗi hay không.WF cho phép người dung đị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 framework
2.2.1.1.Các Activity
Activity là đơn vị thực thi cơ bản của chương trình WF Có thể nói nó giống vai trò của các control trong Winform
Các activity đều thừa kế từ lớp System.Workflow.ComponentModel.Activity Phương
thức Excecute của nó được override để định nghĩa logic thực thi, phương thức này
Trang 27Các activity phân làm hai loại: activity được cung cấp sẵn (out-of-the-box) nằm trong thư viện chuẩn BAL (Base Activity Library) và activity tùy biến của người dùng (custom) Do người dùng có thể tự định nghĩa các activity của mình nên workflow rất mềm dẻo, hầu như có thể làm bất cứ chuyện gì tương tự như phong cách lập trình truyền thống (viết mã lệnh)
Khi người định nghĩa một activity, WF cho phép hai lựa chọn:
Activity cơ bản: chỉ thừa kế từ lớp Activity và override phương thức Execute
Activity phức hợp: chứa các activity khác Visual Studio trợ giúp cho chúng ta
định nghĩa activity dễ dàng Có thể thiết kế Activity rất trực quan
2.2.1.2.Tổ chức chạy WF
Như đã giới thiệu , kiến trúc của WF quy định mọi WF đều phải chạy trên môi trường
WF runtime (hình), đó là thư viện tạo môi trường thực thi cho WF Thực chất các WF không thể tự nó chạy độc lập giống như các ứng dụng *.exe cổ điển được mà nó phải được tổ chức chạy trên một phạm vi ứng dụng nền CLR nào đó như là winform, web form WF runtime thực thi các workflow và quản lý trạng thái của WF trong suốt thời gian sống của WF
Hình 2.6 Kiến trúc WF 2.2.1.3.Công việc của nhà lập trình phát triển WF
Cách đơn giản nhất để tạo và sửa các workflow WF là bằng trình thiết kế Workflow (Workflow Designer) Mặc định trình thiết kế này nằm trong Visual Studio – chứa các mẫu project để tạo các workflow dạng tuần tự hoặc máy trạng thái… Bằng cách kéo thả các activity vào vùng thiết kế và thiết lập các thuộc tính của chúng, các nhà phát triển có thể tạo và sửa workflow một cách dễ dàng Cách tiếp cận này tương tự như khi chúng ta làm các ứng dụng Windows Forms hay Windows Presentation Foundation
Trang 28Hình 2.7 Thiết kế workflow bằng Workflow Designer trong Víual Studio
Trong môi trường lập trình chuyên nghiệp, có những nhóm lập trình viên được phân công chỉ tập trung làm những lĩnh vực nhỏ, rồi mới ghép các sản phẩm từ các nhóm đó với nhau thành hệ thống lớn Với WF, chúng ta có thể phân ra ba loại nhóm lập trình viên:
Lập trình viên chuyên phát triển các ứng dụng chủ, đây là các ứng dụng truyền thống trên nền NET, vì thế lập trình viên không cần có hiểu biết sâu sắc và không cần thao tác trực tiếp với WF
Lập trình viên chuyên tạo ra các Activity: nhiệm vụ tạo ra các “viên gạch” cho workflow
Workflow Deviloper: Gắn kết các activity với nhau, cấu hình chúng để tạo nên workflow hoàn thiện Nhóm lập trình viên này không phải dùng nhiều đến mã lập trình mà chủ yếu tương tác với trình Workflow Designer
Trang 29Hình 2.8 Những lập trình viên liên quan đến WF
2.2.2.Các cách viết WF
Để tạo ra các workflow trong WF chúng ta có thể sử dụng mã lệnh của ngôn ngữ C#, VB.NET hoặc dùng ngôn ngữ khai báo XAML Thông thường chúng ta hay kết hợp
cả hai cách trên
Hình 2.9 Quy trình xây dựng workflow trong WF
Trong ví dụ này chúng ta đưa ra hai ví dụ xây dựng workflow bằng hai phương pháp
đó với cùng một bài toán hết sực đơn giản: đếm từ 0 đến 10 và hiển thị số đó là chẵn hay lẻ Logic của bài toán trên thể hiện bằng mã chương trình bình thường như sau:
Trang 30Khởi động Visual Studio, tạo một dự án mới chọn ngôn ngữ Visual C# với workflow
và chọn template là Sequential Workflow Console Application Đặt tên dự án là FirstCodeWFApplication
Hình 2.10 Tạo project FirstCodeWFApplication
Trang 31Mặc định Visual Studio tạo cho chúng ta một workflow tên là workflow1 và ngôn ngữ của nó là lệnh C# (Workflow1.cs – xem trong Solution Explorer) Visual Studio cũng tạo sẵn file program.cs là WF runtime của workflow1 Mở Toolbox (Ctrl+W, X), kéo activity while vào vùng thiết kế của workflow, đặt giữa điểm khởi đầu (mầu xanh) và điểm kết thúc (mầu đỏ), chúng ta thấy workflow có hình như sau:
Hình 2.11 Thiết kế workflow
Bạn có thể thấy hình dấu chấm than đỏ, đó là Visual Studio báo cho chúng ta rằng activity while của chúng ta chưa hợp lệ vì chưa được thiết lập điều kiện lặp Bây giờ hãy thêm một thuộc tính private cho lớp workflow trước đã:
Trang 32Hình 2.12 Hộp thoại chọn luật cho activity While
Click vào nét “New” để vào hộp thoại “Rule Condition Editor” và soạn điều kiện kết thúc cho vòng while giống như hình dưới
Hình 2.13 Soạn luật
Chọn OK hai lần, chúng ta đã thiết lập xong vòng while
Trang 33Tiếp tục trở lại với màn hình thiết kế workflow, hãy thêm một activity dạng IfElse vào trong whileActivity1, sau đó thêm hai Code activity vào hai nhánh của IfElse Giờ đây workflow của chúng ta thể hiện như sau hình sau:
Hình 2.14 Workflow hoàn thiện với các activity của nó
Tương tự như activity while, activity IfElse cũng cần thiết lập các điều kiện Chúng ta lại thêm luật và gán cho nhánh bên trái của IfElse (từ cửa sổ Properties ->chọn Condition -> Rule Condition Editor) (hình dưới)
Trang 34Hình 2.15 Luật cho nhóm bên phải của activity IfElse
Việc tiếp theo của chúng ta là viết mã cho các code Activity1 và codeActivity2 Hãy click đúp chuột vào các code Activity đó và thêm các đoạn mã như sau:
private void codeActivity1_ExecuteCode(object sender, EventArgs e)
Trang 35Và cuối cùng, sửa một chút file Program.cs để chúng ta có thẻ xem được kết quả hoạt động của workflow Thêm dòng System.Console.Read(); vào cuối hàm Main
Sau khi hoàn tất bấm F5 để xem kết quả:
Hình-Kết quả chạy ứng dựng workflow chỉ sử dụng mã lập trình
2.2.2.2.Xây dựng workflow sử dụng mã XAML
Trong Visual Studio, hãy tạo một dự án mới, ở phần thiết lập, tương tự như ứng dụng bằng mã ở phần 2.1, chọn template là Sequential Workflow Console Application, đặt tên dự án là FirstXAMLWFApplication
Trang 36Hình 2.16 Tạo Project FirstXAMLWFApplication
Mặc định, dự án Workflow bao gồm file mã nguồn định nghĩa workflow, vì chúng ta muốn làm việv với XAML, hãy xóa file workflow1 đi Sau đó thay thế bằng file định nhĩa workflow bằng XAML: chuột phải vào Solution Explorer, chọn 'Add New Item' sau đó chọn 'Sequential Workflow with Code Separation' file 'Code Separation'
Trang 37Hình 2.17 Tạo Workflow với mã XAML
Hãy sửa tên file vừa tạo ra thành MyWorkflow.xoml Cần phải chú ý là file *.oml chính là file định nghĩa workflow bằng XAML
Thiết kế workflow tương tự như trên:
Hình 2.18 Thiết kế workflow MyWorkflow
Trang 38Hãy mở file MyWorkflow.xoml, chúng ta thấy bản chất nó là 1 file XAML, mọi thành phần của workflow đều có thể được viết bằng ngôn ngữ xml, khá đơn giản kể cả cho những người không chuyên về kỹ thuật lập trình
<SequentialWorkflowActivity x:Class="FirstXAMLWFApplication.MyWorkflow" x:Name="MyWorkflow" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/workflow">
Trang 39Sau đó, tương tự như phần 2.2.2.1, hãy tiết lập các luật và cho các activity While và IfElse xong Thiết lập mã cho các activity Code1 và Code2
Sửa lại file chủ Program.cs như sau để gọi workflow chạy:
waitHandle.WaitOne();
System.Console.Read();
}
Trang 40}
}
Kết quả chạy tương tự như phần 2.2.2.1
2.3 Khám phá Workflow Activity
2.3.1.Giới thiệu tổng quan về Activity
Activity (hành động) đối với các workflow trong Windows Workflow Foundation
(WF) cũng giống như các khối logic trong một khối xếp hình, tức là nó là đơn vị cơ bản của workflow Một tiến trình nghiệp vụ có thể được chia thành nhiều phần được gọi là các tác vụ nhỏ Mỗi tác vụ nhỏ đó thường tập trung vào một công việc cụ thể,
và người ta dùng thuật ngữ Activity để chỉ các tác vụ nhỏ đó trong workflow
Các đối tượng activity trong các workflow là các đối tượng của các lớp thừa kế từ lớp
System.Workflow.ComponentModel.Activity Thư viện các activity cơ bản (BAL)
cung cấp khá nhiều activity rất hữu ích và có nhiều tính năng rất hay được sử dụng Tất nhiên khi cần có các activity thực thi những chức năng đặc biệt, người dùng cũng
có thể tạo các activity của riêng họ gọi là Activity tùy biến (Custom Acitivity)
Để hiểu rõ hơn về Activity, phần sau đây là bảng thống kê các thuộc tính và phương thức của lớp Activity:
Bảng 2-2 Các thuộc tính của Activity
Description Các miêu tả của người dùng về Activity
Enabled Giá trị thể hiện rằng liệu thể hiện của nó
được cho phép thực thi và phê chuẩn (valudation)hay không
ActivityExecutionResult của lần gần nhất chạy thể hiện của nó (Giá trị có thể là: Canceled, Compensated, Faulted,None hoặc Succeeded)
ExecutionStatus Cho phép đọc trạng thái của Workflow
dưới dạng một trong các giá trị của ActivityExecutionStatus (Canceling, Closed, Compensating, Executing, Faulting, and Initialized)
Name Cho phép thiết lập hoặc đọc tên thể hiện
của activity này
Parent Lấy (tham chiếu) đến activity mà chứa
activity này
WorkflowInstanceld Tham chiếu đến định danh workflow liên