Triển khai Activiti 5.9 để mô hình hóa quy trình nghiệp vụ bằng BPMN 2.0

Một phần của tài liệu Nghiên cứu ứng dụng kiến trúc SOA trong mô hình ứng dụng doanh nghiệp (Trang 72 - 98)

5. Nhiệm vụ nghiên cứu

4.2. Triển khai Activiti 5.9 để mô hình hóa quy trình nghiệp vụ bằng BPMN 2.0

BPMN 2.0

Sau khi download và cài đặt công cụ Activiti 5.9 ta có thể mô hình hóa các quy trình nghiệp vụ cụ thể. Activiti cho phép ngƣời sử dụng có thể vẽ mô hình các quy trình nghiệp vụ trƣớc sau đó có thể thực thi các quy trình đó một cách tự động. Các luồng dữ liệu, các công việc sẽ đƣợc hệ thống tự động chuyển giao tới các ngƣời sử dụng trong hệ thống theo mô hình nghiệp vụ chúng ta đã xây dựng trƣớc đó.

Ví dụ nhƣ mô hình nghiệp vụ xin nghỉ học của một học sinh: Học sinh gửi đơn xin phép nghỉ học tới giáo viên. Giáo viên nhận đƣợc đơn xin phép của học sinh đó sẽ gửi lại thông báo cho phép học sinh đó đƣợc nghỉ học hoặc không.

Ta có thể sử dụng nhiều phƣơng pháp để mô hình hóa, nhƣng tiện dụng nhất có thể sử dụng trình cắm thêm Activiti dành cho Eclipse.

Sau khi đã cài đặt, ta tiến hành mô hình hóa quy trình sử dụng các ký pháp của BPMN 2.0 trên Eclipse:

73

Hình 4.5 Mô hình hóa quy trình bằng BPMN 2.0 trên Eclipse

Sau khi đã có quy trình đƣợc mô hình hóa sẽ tự động sinh ra file dạng *.bpmn20.xml. Ta sẽ sử dụng file này để thực thi tự động quy trình trên bằng công cụ Activiti Explorer.

Đăng nhập vào Activiti Explorer bằng user thuộc nhóm có quyền “security- role” ( user mặc định là kermit cùng với password tƣơng ứng).

74

Hình 4.6 Đăng nhập bằng quyền quản trị hệ thống

Sau đó chọn Manager  Deployments  Upload new

Hình 4.7 Tải thêm quy trình vào Activiti Explorer

Chúng ta tìm đến file *.bpmn20.xml đã tạo ra lúc trƣớc. Activiti sẽ tự động phân tích nội dung và đƣa quy trình đó vào danh sách các quy trình hiện có. Ngoài

75

ra Activiti tự phân tích và tạo ra file ảnh của quy trình dạng *.png ( trong phần Resources)

Hình 4.8 Màn hình quản lý các quy trình hiện có

Để tiến hành khởi động một quy trình, khi chạy chƣơng trình Activiti Explorer và đăng nhập vào màn hình chính chúng ta chọn menu “Process” (đối với tất cả các user ). Chƣơng trình sẽ hiển thị các quy trình nghiệp vụ mà ta đã mô hình trƣớc đó. Để thực thi các mô hình đó tự động chúng ta nhấp chuột chọn “Start process” tƣơng ứng với quy trình nghiệp vụ mà ta muốn thực thi tự động.

76

Hình 4.9 Màn hình khởi động quy trình đã mô hình hóa bằng BPMN 2.0

4.3. Sử dụng công cụ Activiti tự động hóa một số quy trình nghiệp vụ

4.3.1. Quy trình nghiệp vụ xin nghỉ phép cho giáo viên

77

Nội dung các event, user task chính trong file XinNghiPhep.bpmn20.xml

<startEvent id="yeucau" activiti:initiator="TenGV"> <extensionElements>

<activiti:formProperty id="SoNgayNghi" name="Số ngày nghỉ" type="long" value="1" required="true"/>

<activiti:formProperty id="NgayBatDau" name="Ngày bắt đầu nghỉ (dd-MM-yyy)" datePattern="dd-MM-yyyy hh:mm" type="date" required="true" />

<activiti:formProperty id="LyDoNghi" name="Lý do" type="string" />

</extensionElements> </startEvent>

<sequenceFlow id="flow1" sourceRef="yeucau" targetRef="XuLyYeuCau" />

<userTask id="XuLyYeuCau" name="Xử lý yêu cầu xin nghỉ phép" > <documentation>

${TenGV} muốn nghỉ ${SoNgayNghi} ngày phép (Lý do: ${LyDoNghi}).

</documentation> <extensionElements>

<activiti:formProperty id="ChoPhep" name="Bạn có cho phép nghỉ" type="enum" required="true">

<activiti:value id="true" name="Cho phép" />

<activiti:value id="false" name="Không cho phép" /> </activiti:formProperty>

<activiti:formProperty id="LyDoChoPhep" name="Lý do" type="string" /> </extensionElements> <potentialOwner> <resourceAssignmentExpression> <formalExpression>bangiamhieu</formalExpression> </resourceAssignmentExpression> </potentialOwner> </userTask>

<sequenceFlow id="flow2" sourceRef="XuLyYeuCau" targetRef="QuyetDinhChoPhep" />

<exclusiveGateway id="QuyetDinhChoPhep" name="Cho phép?" /> <sequenceFlow id="flow3" sourceRef="QuyetDinhChoPhep"

targetRef="ThongBaoChoPhep">

<conditionExpression xsi:type="tFormalExpression">${ChoPhep == 'true'}</conditionExpression>

</sequenceFlow>

<task id="ThongBaoChoPhep" name="Gửi Email thông báo đã cho phép nghỉ" />

<sequenceFlow id="flow4" sourceRef="ThongBaoChoPhep" targetRef="KetThuc1" />

<endEvent id="KetThuc1" />

78

<sequenceFlow id="flow5" sourceRef="QuyetDinhChoPhep" targetRef="SuaYeuCauXinNghi">

<conditionExpression xsi:type="tFormalExpression">${ChoPhep == 'false'}</conditionExpression>

</sequenceFlow>

<userTask id="SuaYeuCauXinNghi" name="Thay đổi yêu cầu nghỉ phép">

<documentation>

Ban giám hiệu không đồng ý cho bạn nghỉ ${SoNgayNghi} ngày.

Lý do: ${LyDoChoPhep} </documentation>

<extensionElements>

<activiti:formProperty id="SoNgayNghi" name="Số ngày nghỉ" value="${SoNgayNghi}" type="long" required="true"/>

<activiti:formProperty id="NgayBatDau" name="Ngày bắt đầu nghỉ (dd-MM-yyy)" value="${NgayBatDau}" datePattern="dd-MM-yyyy hh:mm" type="date" required="true" />

<activiti:formProperty id="LyDoNghi" name="Lý do" value="${LyDoNghi}" type="string" />

<activiti:formProperty id="GuiLaiYeuCau" name="Gửi lại yêu cầu xin nghỉ phép?" type="enum" required="true">

<activiti:value id="true" name="Có" /> <activiti:value id="false" name="Không" /> </activiti:formProperty> </extensionElements> <humanPerformer> <resourceAssignmentExpression> <formalExpression>${TenGV}</formalExpression> </resourceAssignmentExpression> </humanPerformer> </userTask>

Sau khi mô hình hóa quy trình bằng BPMN 2.0, chúng ta đƣa vào hệ thống Activiti Explorer. Trong hệ thống đã đƣợc cài đặt sẵn các user gồm:

Hiệu trƣởng (hieutruong); Hiệu phó 1 (hieupho1); Hiệu phó 2 (hieupho2) nằm trong group Ban giám hiệu (bangiamhieu).

Giáo viên 1(giaovien1); Giáo viên 2 (giaovien2) nằm trong group Giáo viên(giaovien).

Giáo vụ 1 (giaovu1) nằm trong group Giáo vụ (giaovu)

79

Giáo viên 2 muốn xin nghỉ phép 5 ngày để đi công tác Sài Gòn, việc đầu tiên là đăng nhập vào hệ thống.

Hình 4.11 Giáo viên đăng nhập để xin nghỉ phép

Hình 4.12 Màn hình chính Activiti Explorer

Sau khi đã đăng nhập vào hệ thống, chọn Process để tìm quy trình Xin nghỉ phép

80

Chọn quy trình Xin nghỉ phép và bấm nút Start process

Khi đó, một form sẽ hiện ra yêu cầu nhập các thông tin về Số ngày muốn nghỉ, Ngày bắt đầu, lý do xin nghỉ.

Hình 4.14 Hoàn thiện thông tin xin nghỉ

Khi nhập các thông tin xong, Giáo viên 2 sẽ bấm nút Start process.

Nhƣ trong quy trình xin nghỉ phép, khi quy trình bắt đầu, thông tin xin nghỉ phép sẽ đƣợc kiểm duyệt bởi Ban giám hiệu. Do đó, công việc tiếp theo là của group Ban giám hiệu (bangiamhieu)

81

Hình 4.15 Người quản lý đăng nhập

Hiệu trƣởng/ Ban giám hiệu xét duyệt:

Khi thành viên trong Ban giám hiệu đăng nhập vào hệ thống (ở đây là Hiệu trƣởng)

Trong mục Queued: Tiến trình đang chờ xử lý

Hình 4.16 Màn hình chính Activiti Explorer của người quản lý

Vì Hiệu trƣởng nằm trong 2 nhóm nên sẽ hiển thị công việc xử lý theo từng nhóm:

82 Hiển thị các công việc đang chờ đƣợc nhận xử lý

Hình 4.18 Nhận việc xử lý yêu cầu xin nghỉ phép

Để nhận xử lý công việc này, Hiệu trƣởng bấm vào nút Claim, khi đó công việc sẽ đƣợc chuyển sang Inbox.

83

Hình 4.19 Xử lý yêu cầu và hoàn thành

Nếu BGH không đồng ý, kèm thêm lý do, giaovien2 sẽ nhận đƣợc công việc là thay đổi yêu cầu của mình.

Hình 4.20 Nhận lại yêu cầu thay đổi

84

Hình 4.21 Gửi lại yêu cầu

Tiếp theo quy trình, BGH lại nhận đƣợc một yêu cầu xin nghỉ mới

Hình 4.22 GV gửi lại yêu cầu đã sửa

85

4.3.2. Quy trình nghiệp vụ xin miễn giảm học phí

Hình 4.23 Quy trình nghiệp vụ xin miễn giảm học phí

Nội dung các event và user task chính trong file XinMienGiamHocPhi.bpmn20.xml <startEvent id="HSYeuCau" activiti:initiator="TenHS">

<extensionElements>

<activiti:formProperty id="HotenHS" name="Họ tên đầy đủ" type="string" required="true"/>

<activiti:formProperty id="Lop" name="Lớp" type="string" required="true"/>

<activiti:formProperty id="NgaySinh" name="Ngày sinh" datePattern="dd-MM-yyyy hh:mm" type="date" required="true" /> <activiti:formProperty id="Doituong" name="Đối tượng miễn giảm" type="string" required="true" />

</extensionElements> </startEvent>

<userTask id="GVCNXuLyHSYeuCau" name="GVCN Xử lý yêu cầu xin miễn giảm học phí" >

<documentation>

Học sinh ${HotenHS} tại lớp ${Lop} muốn xin miễn giảm học phí theo diện đối tượng ${Doituong}.

</documentation> <extensionElements>

<activiti:formProperty id="GVCNDuyet" name="GVCN Duyệt" type="enum" required="true">

<activiti:value id="true" name="Duyệt" />

<activiti:value id="false" name="Không Duyệt" /> </activiti:formProperty>

<activiti:formProperty id="LyDoGVCNDuyet" name="Lý do" type="string" />

86

<activiti:formProperty id="TenGVDuyet" name="Họ tên GVCN duyệt" type="string" required="true"/>

</extensionElements> <potentialOwner> <resourceAssignmentExpression> <formalExpression>GVCN</formalExpression> </resourceAssignmentExpression> </potentialOwner> </userTask>

<userTask id="BGHXuLyGVYeuCau" name="BGH Xử lý yêu cầu xin miễn giảm học phí" >

<documentation>

Học sinh ${HotenHS} tại lớp ${Lop} muốn xin miễn giảm học phí theo diện đối tượng ${Doituong} (Đã được GVCN ${TenGVDuyet} phê duyệt với lý do: ${LyDoGVCNDuyet}).

</documentation> <extensionElements>

<activiti:formProperty id="BGHDuyet" name="BGH Duyệt" type="enum" required="true">

<activiti:value id="true" name="Duyệt" />

<activiti:value id="false" name="Không Duyệt" /> </activiti:formProperty>

<activiti:formProperty id="LyDoBGHDuyet" name="Lý do" type="string" /> </extensionElements> <potentialOwner> <resourceAssignmentExpression> <formalExpression>bangiamhieu</formalExpression> </resourceAssignmentExpression> </potentialOwner> </userTask>

Sau khi mô hình hóa quy trình bằng BPMN 2.0, chúng ta đƣa vào hệ thống Activiti Explorer.

Quy trình thực hiện nhƣ sau:

Học sinh 1 muốn làm hồ sơ xin miễn giảm học phí, việc đầu tiên là đăng nhập vào hệ thống

87

Hình 4.24 Học sinh đăng nhập vào hệ thống

Trong màn hình cá nhân, vào mục Process và khởi động quy trình Xin miễn giảm học phí:

Hình 4.25 Chọn quy trình Xin miễn giảm học phí

88

Hình 4.26 Điền đầy đủ thông tin vào form khởi động

Sau khi bấm nút Start process, quy trình đƣợc bắt đầu.

Hình 4.27 Quy trình đã được khởi động

89

Hình 4.28 GVCN nhận phần việc của mình

Để xử lý, GVCN bấm vào nút Claim. Khi đó công việc sẽ chuyển vào Inbox của GVCN. GVCN sẽ điền vào form bên dƣới để hoàn thành phần nhiệm vụ của mình trong quy trình. Có thể tải thêm tài liệu đính kèm trong phần Related content.

Hình 4.29 GVCN Xử lý công việc

Bƣớc cuối trong quy trình là Ban giám hiệu duyệt:

90

Hình 4.30 Quy trình chuyển tiếp công việc đến BGH

Thông tin đƣợc mô tả cụ thể qua từng bƣớc của quy trình. Để xử lý, Hiệu phó 1 bấm vào nút Claim.

Hình 4.31 BGH Xử lý công việc

Bƣớc cuối của quy trình, Hiệu phó quyết định Duyệt và hoàn thành công việc của mình.

91

4.3.3. Quy trình đề nghị thanh toán Dạy trung tâm

Hình 4.32 Quy trình đề nghị thanh toán tiền dạy trung tâm

Một vài event và user task chính trong quy trình:

<startEvent id="ThanhToanTrungTam" name="Start" activiti:initiator="IDGV">

<extensionElements>

<activiti:formProperty id="TenGV" name="Tên Giáo viên" type="string" required="true"></activiti:formProperty>

<activiti:formProperty id="TenTrungTam" name="Tên Trung tâm" type="string" required="true"></activiti:formProperty> <activiti:formProperty id="MonHoc" name="Môn"

type="string" required="true"></activiti:formProperty>

<activiti:formProperty id="SoTiet" name="Số tiết đã thực hiện" type="long" required="true"></activiti:formProperty>

<activiti:formProperty id="Lop" name="Lớp dạy" type="string" required="true"></activiti:formProperty> <activiti:formProperty id="TuNgay" name="Từ ngày" type="date" datePattern="dd-MM-yyyy"

required="true"></activiti:formProperty>

<activiti:formProperty id="DenNgay" name="Đến ngày" type="date" datePattern="dd-MM-yyyy"

required="true"></activiti:formProperty> </extensionElements>

</startEvent>

<userTask id="GiaoVuXuLy" name="Giáo vụ xử lý yêu cầu" activiti:candidateGroups="giaovu">

<documentation>Giáo viên ${TenGV} yêu cầu thanh toán tiền dạy trung tâm ${TenTrungTam}.

Thời gian: Từ ${TuNgay} đến ${DenNgay} Môn học: ${MonHoc}

Lớp: ${Lop}

92 <extensionElements>

<activiti:formProperty id="ChuyenDaoTao" name="Đồng ý chuyển Đào tạo" type="enum" required="true">

<activiti:value id="true" name="Đồng ý"></activiti:value>

<activiti:value id="false" name="Chưa đủ thông tin"></activiti:value>

</activiti:formProperty>

<activiti:formProperty id="GiaoVuLyDo" name="Lý do" type="string" required="true"></activiti:formProperty> </extensionElements>

</userTask> <userTask id="usertask1" name="Giáo vụ yêu cầu nhập lại" activiti:candidateUsers="${IDGV}">

<documentation>Yêu cầu của bạn bị trả về.

Lý do đưa ra của Giáo vụ: ${GiaoVuLyDo}</documentation> <extensionElements>

<activiti:formProperty id="TenGV" name="Tên Giáo viên" type="string" required="true"></activiti:formProperty>

<activiti:formProperty id="TenTrungTam" name="Tên Trung tâm" type="string" required="true"></activiti:formProperty> <activiti:formProperty id="MonHoc" name="Môn"

type="string" required="true"></activiti:formProperty>

<activiti:formProperty id="SoTiet" name="Số tiết đã thực hiện" type="long" required="true"></activiti:formProperty>

<activiti:formProperty id="Lop" name="Lớp dạy" type="string" required="true"></activiti:formProperty> <activiti:formProperty id="TuNgay" name="Từ ngày" type="date" datePattern="dd-MM-yyyy"

required="true"></activiti:formProperty>

<activiti:formProperty id="DenNgay" name="Đến ngày" type="date" datePattern="dd-MM-yyyy"

required="true"></activiti:formProperty> </extensionElements>

</userTask>

<userTask id="usertask2" name="Đào tạo xử lý" activiti:candidateGroups="QLDaoTao">

<documentation>Giáo viên ${TenGV} yêu cầu thanh toán tiền dạy trung tâm ${TenTrungTam}.

Thời gian: Từ ${TuNgay} đến ${DenNgay} Môn học: ${MonHoc}

Lớp: ${Lop}

Số tiết: ${SoTiet}</documentation> <extensionElements>

<activiti:formProperty id="KiemTra" name="Kiểm tra đối chiếu với thời khóa biểu, lịch dạy" type="enum" required="true"> <activiti:value id="true" name="Dạy đúng,

đủ"></activiti:value>

<activiti:value id="false" name="Có sai sót"></activiti:value>

</activiti:formProperty>

<activiti:formProperty id="DaoTaoLyDo" name="Lý do" type="string"></activiti:formProperty>

93 </extensionElements>

</userTask>

<userTask id="usertask4" name="Đào tạo yêu cầu nhập lại" activiti:candidateUsers="${IDGV}">

<documentation>Yêu cầu của bạn bị trả về.

Lý do đưa ra của phụ trách Đào tạo: ${DaoTaoLyDo}</documentation> <extensionElements>

<activiti:formProperty id="TenGV" name="Tên Giáo viên" type="string" required="true"></activiti:formProperty>

<activiti:formProperty id="TenTrungTam" name="Tên Trung tâm" type="string" required="true"></activiti:formProperty> <activiti:formProperty id="MonHoc" name="Môn"

type="string" required="true"></activiti:formProperty>

<activiti:formProperty id="SoTiet" name="Số tiết đã thực hiện" type="long" required="true"></activiti:formProperty>

<activiti:formProperty id="Lop" name="Lớp dạy" type="string" required="true"></activiti:formProperty> <activiti:formProperty id="TuNgay" name="Từ ngày" type="date" datePattern="dd-MM-yyyy"

required="true"></activiti:formProperty>

<activiti:formProperty id="DenNgay" name="Đến ngày" type="date" datePattern="dd-MM-yyyy"

required="true"></activiti:formProperty> </extensionElements>

</userTask>

Quy trình đƣợc thực hiện nhƣ sau:

Giáo viên cần đề nghị thanh toán đăng nhập vào hệ thống và chọn quy trình

Hình 4.33 GV chọn quy trình Thanh toán Dạy trung tâm

Tại màn hình khởi động quy trình, ngƣời yêu cầu sẽ phải nhập một số thông tin cần thiết liên quan:

94

Hình 4.34 GV nhập các thông tin để tiến hành thanh toán

Sau khi khởi động quy trình, các thông tin này sẽ đƣợc hệ thống gửi đến giáo vụ để soát, đối chứng lần 1:

Hình 4.35 Công việc xuất hiện trong hàng chờ của giáo vụ

95

Hình 4.36 Giáo vụ xử lý yêu cầu

Trong trƣờng hợp này, giáo viên đã gửi thiếu file điểm nên giáo vụ đã yêu cầu gửi lại. Giáo viên sẽ nhận đƣợc yêu cầu này và hoàn thành:

96

Để đính kèm tài liệu, chọn dấu + ở Related content. Sau đó chọn tài nguyên là web link hay file có trong máy:

Hình 4.38 Tải lên tài nguyên đính kèm

Sau đó bấm vào Complete Task để chuyển lại yêu cầu cho giáo vụ.

Giáo vụ sẽ nhận lại yêu cầu, và đã có thêm file mềm nhƣ yêu cầu (ở khu vực Related content):

97

Sau khi giáo vụ đã hoàn thành việc của mình, quy trình tiếp tục với phần việc cuả quản lý đào tạo:

Hình 4.40 Quản lý đào tạo nhận việc

Quản lý đào tạo sẽ hoàn thành việc kiểm tra, đối chiếu và đồng ý phê duyệt để Thủ quỹ thanh toán:

98

Một phần của tài liệu Nghiên cứu ứng dụng kiến trúc SOA trong mô hình ứng dụng doanh nghiệp (Trang 72 - 98)