Theo phiên bản mới nhất là BPMN 2.0 thì có thể chia các kí pháp hay các phần tử sử dụng trong BPMN thành 5 loại cơ bản :
Flow Objects (Flow Node): Các thành phần xác định luồng thực thi của quy trình
Connection Objects: Các thành phần liên kết các Flow Objects
Swimlanes: Thành phần phân nhóm
Data: Các thành phần mô tả tài nguyên và dữ liệu cho quy trình
Artifacts: Bổ sung ngữ nghĩa
Các phần tử này sẽ liên kết với nhau theo những quy tắc riêng để xác định được một mô hình quy trình (sau đây gọi là process) dưới dạng trực quan như hình minh họa dưới đây. Mô hình này sẽ chỉ ra những con đường hay trình tự mà theo đó các process có thể được đi từ điểm bắt đầu đến điểm kết thúc, qua các điểm nút.
Các Flow Objects đóng vai trò là các điểm nút. Connection Object đóng vai trò liên kết giữa các điểm nút. Swimlanes có chức năng phân chia các điểm nút thành các nhóm. Artifacts có chức năng bổ sung ý nghĩa cho các phần tử trong process, có thể bằng cách nhóm chúng lại hoặc thêm các chú thích dạng text đi kèm. Còn Data mô tả các tài nguyên mà process sử dụng đến trong suốt quá trình nó được thực thi.
Để mô tả rõ hơn về các phần tử trong BPMN, ta làm quen với khái niệm
process instance. Process instance được hiểu là một luồng thực thi thực sự của process đi qua các điểm nút và các liên kết (Connection Object) theo một con
đường hay trình tự nào đó từ điểm bắt đầu đến điểm kết thúc của process.
2.1.2.1 Các đối tượng luồng (Flow Objects - Flow Node)
Flow Objects là các điểm nút trong process, ở đó nó định nghĩa các hành vi
mà process instance phải thực hiện trước khi theo các liên kết để chuyển tiếp sang
điểm nút khác. Flow Objects bao gồm các loại sau:
a. Event
Là đối tượng mô tả những sự kiện “xảy ra” trong suốt quá trình process diễn ra. Có các loại sự kiện như: Start Event, End Event (hay Stop Event) và Intermediate Event được kí hiệu bằng các kí pháp như hình minh họa 2-2. Start Event là nơi bắt đầu cho một process và End Event là nơi kết thúc một process.
Intermediate Event là các sự kiện xảy ra trong khi process đang diễn ra và có tác
động tới process. VD: sự kiện công dân nộp bổ sung hồ sơ trong quy trình giải
quyết thủ tục hành chính
Hình 2-2: (Start - Intermediate - End) Event [7]
Ở giữa các đường tròn của Event để chừa các khoảng trắng để đưa vào các kí hiệu bổ sung nhằm phân biệt các loại sự kiện. Có các loại kí hiệu bổ sung như Message – sự kiện gửi hoặc nhận thông điệp, Timer – sự kiện xảy ra sau khi kết thúc một khoảng thời gian nào đó định trước (bộ đếm giờ) hay Error – sự kiện lỗi:
Hình 2-3: Các kí hiệu bổ sung cho Event [7]
b. Activity
Activity định nghĩa các công việc hoặc nhóm các công việc được thực thi trong một process để có thể hoàn thành process đó. Activity mà không thể chia nhỏ hơn gọi là một Task. Ngược lại, nếu Activity bao gồm một chuỗi các Activity nhỏ hơn thì đó được gọi là một sub-process. Sub-process tương đương với một process xét theo khía cạnh cấu trúc
Hình 2-4: Task và Sub-process [7]
Activity có thể được thực thi (implement) bởi những người tham gia quy trình (participants) dưới một vai trò (role) nào đó, hoặc tự động thực thi bởi hệ thống (Automatic Activity) hoặc gọi đến một dịch vụ (Service) nào đó theo mô hình kiến trúc SOA. Mỗi Activity đều có một Activity Handler giúp định nghĩa đối tượng sẽ thực thi Activity đó.
Gateway là đối tượng được sử dụng để rẽ nhánh, kết hợp hoặc chia nhánh các luồng của một process. Tùy thuộc vào chức năng hội tụ hay phân kì của Gateway
mà nó sẽ có một hay nhiều “đường vào” và một hay nhiều “đường ra”. “Đường vào” và “đường ra” chính là các liên kết hay các Connection Object (sẽ được trình bày ở phần sau).
Exclusive Gateway và Inclusive Gateway định hướng cho luồng process dựa trên các điều kiện được xác định trên mỗi “đường ra”. Các Gateway này sẽ làm nhiệm vụ xét các điều kiện trên các đường ra. Nếu điều kiện trên đường ra được thỏa mãn thì process sẽ được chuyển tiếp khỏi Gateway theo “đường ra” đó. Với
Inclusive Gateway thì cho phép chọn nhiều hơn một đường ra, tức là các điều kiện ở các đường ra không loại trừ nhau. Ngược lại, Exclusive Gateway chỉ cho phép duy nhất một đường ra có điều kiện thỏa mãn, tức là các điều kiện loại trừ lẫn nhau. Cả 2 loại Gateway này đều cần đến một loại đường ra đặc biệt gọi là default để khi
không có điều kiện nào thỏa mãn thì process instance sẽ đi ra theo đường này
Complex Gateway cũng tương tự như Exclusive và Inclusive Gateway, có các đường ra có điều kiện và một đường ra default. Điểm khác giữa Complex Gateway và 2 loại kia là bản thân nó cũng chứa 1 điều kiện để kết hợp các process instance đến từ các đường vào. Điều kiện đó cũng giúp nó xác định các đường ra phù hợp.
Event-based Gateway là Gateway mà mỗi đường ra của nó đều liên kết tới một Event nào đó. Và cuối cùng là Parallel Gateway, là loại Gateway đơn giản nhất. Nếu là Parallel Gateway phân kì thì nó sẽ tự động sinh ra các bản sao của process instance ở đường vào và chuyển tiếp mỗi process instance đó đến các đường ra của
Hình 2-5: Các loại Gateway [7] 2.1.2.2 Các đối tượng kết nối (Connection Objects)
Connection Objects là các đối tượng sử dụng để liên kết giữa phần tử còn lại của process (giữa các Flow Object với nhau hay giữa Flow Object và Artifacts)
a. Sequence Flow
Là loại liên kết được dùng để kết nối giữa các Flow Object với nhau. Mũi tên chỉ hướng đi của process instance khi đi qua Sequence Flow. Mỗi Sequence Flow
có “nguồn” và “đích” đều là các Flow Object
Kí pháp trên hình 1.6 là kí pháp cơ bản nhất dùng cho Sequence Flow. Trong Sequence Flow có thể chia ra thành các loại nhỏ hơn là Unconditional Flow và Conditional Flow. Conditional Flow là loại Sequence Flow có định nghĩa điều kiện.
Nếu Conditional Flow đi ra từ một Gateway thì nó sử dụng kí pháp cơ bản như hình 2-7, nhưng nếu nó đi ra từ một Activity thì buộc phải sử dụng kí pháp sau đây:
Hình 2-7: Conditional Flow [7]
Default Flow là Sequence Flow đặc biệt sử dụng trong các Gateway hoặc Activity có các “đường ra” là các Conditional Flow. Nó thuộc loại Unconditional Flow nhưng lại sử dụng kí pháp như sau:
Hình 2-8: Default Flow [7]
b. Association
Dùng để liên kết các Artifact với các Flow Object. Kí pháp của Association là đường thẳng nét đứt. Trong trường hợp cần thể hiện hướng ta sử dụng mũi tên ở đầu
Hình 2-9: Association [7] 2.1.2.3 Swimlanes
Swimlane dùng để phân nhóm các Flow Object. Có 2 loại Swimlane là Pool và Lane. Pool chỉ ra ranh giới, phạm vi của process. Tất cả các đối tượng nằm bên trong Pool của một process đều thuộc về process đó. Trong một process có nhiều
process để hoàn thành process đó. Lane sẽ chia các Flow Object thành các nhóm
theo từng vai trò này. Những công việc thuộc về cùng một vai trò sẽ thuộc cùng một Lane. a. Pool Hình 2-10: Pool [7] b. Lanes Hình 2-11: Lane [7] c. Ví dụ về Pool và Lane
Trong ví dụ dưới đây, process bao gồm 3 vai trò (role) là bộ phận nhân sự, ban tuyển dụng và bộ phận kế toán. Những người tham gia vào process (participants) sẽ đóng một trong 3 vai trò này và sẽ chỉ thực hiện những công việc được chỉ ra là dành cho họ. Ví dụ bộ phận nhân sự sẽ chỉ thực hiện việc tìm kiếm ứng viên theo tiêu chí của ban tuyển dụng và ta có thể thấy Activity “Find Candidates” nằm trên Lane của bộ phận nhân sự.
Hình 2-12: Minh họa Pool và Lane [13] 2.1.2.4 Data
Data Object là các đối tượng cung cấp các tài nguyên cần thiết cho process.
Data Object có thể thể hiện một đối tượng đơn lẻ hoặc một tập các đối tượng. Đối với cả process thì Data Input và Data Output cung cấp thông tin như nhau
Hình 2-13: Các loại Data Object [7] 2.1.2.5 Artifacts
Artifacts được sử dụng để cung cấp thêm thông tin cho các phần tử của
a. Group
Dùng để nhóm các phần tử thuộc cùng 1 loại (category) hoặc cùng phục vụ 1 mục đích nào đó. Tên loại được đặt bằng tên Group
Hình 2-14: Group [7]
b. Text Annotation
Được dùng để chú thích, thường gắn kèm với các phần tử mà nó chú thích, cung cấp các thông tin bổ sung dạng text giúp người đọc dễ hiểu về mô hình hơn
Hình 2-15: Text Annotation [7] 2.2 Metamodel của mô hình BPM[4][7]
Metamodel của BPM bao gồm các lớp mô tả cho các phần tử của BPMN (Activity, Sequence Flow, Gateway…) và quan hệ (association, composition, aggregation) giữa chúng. Tất cả các phần tử của BPMN đều xây dựng dựa trên một phần tử cơ bản hay nói cách khác là đều kế thừa từ một lớp cơ bản nhất là BaseElement.
Phần tử quan trọng trong các mô hình BPM là FlowNode và SequenceFlow. Cả 2 đều là lớp con của FlowElement – lớp mô tả các đối tượng tạo nên luồng thực thi của một process. Quan hệ Source và Target chỉ ra quan hệ của 2 phần tử trên. SequenceFlow có nhiệm vụ chỉ ra hướng di chuyển của process instance từ một
FlowNode (đóng vai trò source) đến một FlowNode (đóng vai trò target). Một FlowNode có thể có nhiều incoming hoặc outgoing SequenceFlow. FlowNode giống như các nút hay các đỉnh còn SequenceFlow là các cạnh của một đồ thị có hướng.
Các FlowElement sẽ thuộc về một container nào đó (composition FlowContain), có thể là một process hoặc một sub-process. Các sub-process cũng
thuộc về process cha của nó (composition SubProc). Trong một process cụ thể thì sub-process được coi như một Activity nhưng xét về mặt cấu trúc thì nó không khác gì một process thế nên nó kế thừa từ cả 2 lớp Activity và FlowElementContainer.
Trong một process hoặc sub-process có các Lane (composition LaneContain)
để phân nhóm các FlowNode. Một Lane có thể chứa nhiều FlowNode nhưng không thể chứa SequenceFlow, tức là các SequenceFlow có thể đi qua ranh giới giữa các Lane. Đó cũng chính là lí do mà Lane không phải là lớp con của FlowElementContainer hay FlowElement. Mỗi FlowNode sẽ chỉ thuộc về một Lane duy nhất (aggregation NodeContain).
Association boundaryActivityEvent được dùng để mô tả liên kết giữa Activity và BoundaryEvent. BoundaryEvent là loại Event gắn liền với mỗi Activity và xét về mặt kí pháp thì nó được đặt trên viền bao của Activity để mô tả các Event xảy ra trong quá trình Activity đó được thực thi
Khái niệm cần lưu ý nữa là enumeration GatewayDirection. Enumeraion này quy định tính chất phân kì hay hội tụ hay kết hợp của Gateway:
Unspecified: không có ràng buộc, có thể có nhiều incoming SequenceFlow hoặc ko, có thể có nhiều outgoing SequenceFlow hoặc không
Converging: Phải có nhiều incoming SequenceFlow (>1) và không nhiều hơn 1 outgoing SequenceFlow
Diverging: Phải có nhiều outgoing SequenceFlow (>1) nhưng có không nhiều hơn 1 incoming SequenceFlow
H ìn h 2 -16 : M eta mod el c ơ b ản c ho c ác mô h ìn h B P M
Chương 3. KIỂM TRA TÍNH HỢP LỆ CỦA MÔ HÌNH TIẾN TRÌNH NGHIỆP VỤ BPMN
Trong chương này chúng ta sẽ đặc tả BPM metamodel bằng ngôn ngữ đặc tả của USE đồng thời mô tả một số ràng buộc cơ bản và quan trọng cho BPM metamodel bằng OCL. Tiếp đó, chúng tôi thử nghiệm phương pháp với mô hình tiến trình nghiệp vụ cho quy trình vay vốn tín dụng.
3.1 Biểu diễn metamodel của mô hình tiến trình nghiệp vụ với USE
Trong phần này ta tập trung vào việc đặc tả BPM metamodel bằng ngôn ngữ của USE – ngôn ngữ đặc tả dạng text. BPM metamodel ở đây không đề cập đến tất cả các phần tử của BPMN mà sẽ chỉ đề cập đến những phần tử có ảnh hưởng trực tiếp đến quá trình thực thi một process (sự rẽ nhánh, hội tụ, chỉ định các đối tượng tham gia process, xử lý các sự kiện xảy ra trong tiến trình của process…). Dựa vào cú pháp (mục 1.3.5) và mô tả (mục 2.2) ở các phần trước ta có thể đặc tả cho BPM metamodel như sau.
3.1.1 Khai báo đặc tả BPM metamodel
Khai báo mô hình trong USE được bắt đầu bằng từ khóa model... Ví dụ:
model BPM
3.1.2 Khai báo Enumeration GatewayDirection
Enumeration GatewayDirection định nghĩa tính chất hội tụ hay phân kì hay kết hợp của Gateway:
enum GatewayDirection
{Unspecified,Converging,Diverging,Mixed}
Unspecified: không xác định
Converging: Gateway hội tụ (có nhiều incoming SequenceFlow (>1) và không nhiều hơn 1 outgoing SequenceFlow)
Diverging: Gateway phân kì (có nhiều outgoing SequenceFlow (>1) nhưng có không nhiều hơn 1 incoming SequenceFlow)
Mixed: Gateway kiểu kết hợp (có nhiều (>1) outgoing và nhiều (>1) incoming SequenceFlow)
3.1.3 Khai báo và định nghĩa các lớp
Các lớp được định nghĩa theo biểu đồ lớp đã chỉ ra ở mục 2.2
class BaseElement attributes
id : String -- thuộc tính để định danh các phần tử
operations end
class FlowElement < BaseElement attributes
name : String -- đặt tên cho các phần tử
operations end
class FlowElementContainer < BaseElement attributes
operations end
class Lane < BaseElement attributes
name : String
--tên cho Lane (thường là tên của role --mà nó thể hiện)
operations end
class FlowNode < FlowElement attributes
operations end
class SequenceFlow < FlowElement attributes
selected : Boolean
-- mang giá trị “true” nếu process instance --đi qua nó
operations end
class ConditionSequenceFlow < SequenceFlow attributes
condition : Boolean
-- mang giá trị “true” nếu điều kiện của nó
-- được thỏa mãn
operations end
class UnconditionSequenceFlow < SequenceFlow attributes
operations end
class Activity < FlowNode attributes
operations end
class Event < FlowNode attributes
operations end
class Gateway < FlowNode attributes
gatewayDirection : GatewayDirection -- chỉ ra tính chất phân kì hay hội tụ
operations end
class Process < FlowElementContainer attributes
operations end
class SubProcess < FlowElementContainer, Activity attributes isTransaction : Boolean triggeredByEvent : Boolean completionCondition : String operations end
class Task < Activity attributes
implementation : String
-- chỉ ra phương thức thực thi của Task operationRef: String
-- tên của operation được tham chiếu đến operations
end
class StartEvent < Event attributes
operations end
class IntermediateEvent < Event attributes
operations end
attributes operations end
class BoundaryEvent < IntermediateEvent attributes
operations end
class EndEvent < Event attributes
operations end
class InclusiveGateway < Gateway attributes
default : UnconditionSequenceFlow
-- chỉ ra SequenceFlow đóng vai trò default
operations end
class ExclusiveGateway < Gateway attributes
default : UnconditionSequenceFlow
-- chỉ ra SequenceFlow đóng vai trò default
operations end
class ParallelGateway < Gateway attributes
operations end
class ComplexGateway < Gateway attributes
-- điều kiện kết hợp các process instance của --Gateway
default : UnconditionSequenceFlow -- chỉ ra SequenceFlow đóng vai trò default
waitingForStart : Boolean activationCount : Integer operations
end
3.1.4 Khai báo và định nghĩa các quan hệ giữa các lớp
Các quan hệ cũng được mô tả như trong biểu đồ lớp ở mục 2.2.
3.1.4.1 Composition FlowContain
Tất cả các FlowElement đều thuộc về một container chứa chúng. Container đó có thể là process hoặc sub-process. Các FlowElement không được vượt ra ngoài
ranh giới của container chứa nó.
composition FlowContain between
FlowElementContainer[1] role container FlowElement[0..*] role flowElements end
3.1.4.2 Composition SubProc
Một sub-process về mặt cấu trúc cũng là một process nhưng nó nằm trong một
process khác và đóng vai trò như một Activity trong process đó. Một process có thể
có nhiều sub-process.
composition SubProc between Process[1] role parentProcess
SubProcess[0..*] role subProcesses end
3.1.4.3 Composition LaneContain
Trong các FlowElementContainer như process và sub-process có định nghĩa ra các Lane để phân nhóm các FlowNode. Lane thường dùng để thể hiện các vai trò (role) tham gia vào process đó và thường thì tên của Lane cũng chính là tên vai trò mà nó thể hiện.
composition LaneContain between
FlowElementContainer[1] role flowElementContainer Lane[0..*] role lanes
end
3.1.4.4 Aggregation NodeContain
Mỗi FlowNode chỉ thuộc về một Lane xác định.
aggregation NodeContain between Lane[1] role lane
FlowNode[0..*] role flowNodeRefs end
3.1.4.5 Association Target
Quan hệ Target mô tả quan hệ giữa SequenceFlow và FlowNode đích mà nó