Chào bạn,
Ở bài học trước, chúng ta đã thảo luận về câu hỏi kiến trúc quan trọng: khi nào và tại sao nên tách các quy tắc nghiệp vụ ra khỏi quy trình BPMN bằng cách sử dụng DMN. Bạn đã thấy rằng DMN giúp cho các quy trình trở nên gọn gàng, dễ bảo trì hơn và cho phép các chuyên gia nghiệp vụ quản lý logic quyết định một cách độc lập.
Bây giờ, đã đến lúc chúng ta chuyển từ "tại sao" sang "làm thế nào". Trong bài học này, bạn sẽ bắt tay vào thực hành. Mục tiêu của chúng ta hôm nay là: Tạo một Bảng Quyết định (Decision Table) trong Camunda Modeler.
Chúng ta sẽ đi qua từng bước, từ việc tạo một file DMN mới, định nghĩa các cột đầu vào và đầu ra, cho đến việc thêm các quy tắc để xây dựng một logic quyết định hoàn chỉnh. Vì bạn có thiên hướng học tập qua thực hành, bài học này được thiết kế để bạn có thể vừa học vừa làm trực tiếp trên Camunda Modeler.
1. Khởi tạo Bảng quyết định trong Camunda Modeler
Giống như BPMN, DMN cũng có công cụ mô hình hóa trực quan riêng. Camunda Modeler hỗ trợ cả hai tiêu chuẩn này một cách mượt mà.
Bước 1: Tạo file DMN mới
Đầu tiên, hãy mở Camunda Modeler và tạo một file DMN mới bằng cách vào File > New File > DMN Diagram.
Bạn sẽ thấy một khung vẽ trống với một phần tử "Decision" mẫu. Đây là Decision Requirements Diagram (DRD), một sơ đồ cấp cao cho thấy các quyết định và sự phụ thuộc lẫn nhau của chúng. Hiện tại, chúng ta chỉ làm việc với một quyết định duy nhất.
Bước 2: Đặt tên và ID cho Quyết định
Click vào khối "Decision". Ở bảng thuộc tính (Properties Panel) bên phải, bạn sẽ thấy hai trường quan trọng:
- Decision ID: Đây là mã định danh kỹ thuật (technical ID) của quyết định. ID này phải là duy nhất và sẽ được dùng trong quy trình BPMN để gọi đến bảng quyết định này. Hãy đặt ID là
dish. - Decision Name: Đây là tên mà người nghiệp vụ đọc và hiểu được. Hãy đặt tên là
Dish.
Bước 3: Chuyển sang Chế độ xem Bảng
Sau khi đặt tên và ID, hãy click vào biểu tượng bảng nhỏ ở góc trên bên trái của khối "Decision" để "drill down" vào chi tiết, nơi chúng ta sẽ xây dựng bảng quyết định của mình.
Để xem toàn bộ quá trình khởi tạo này một cách trực quan, bạn hãy xem video sau.
Tutorial: How to Create DMN Models and Combine Them with BPMN (Video 6)
Video này từ Camunda sẽ hướng dẫn bạn các bước đầu tiên để tạo một file DMN, đặt tên và làm quen với giao diện.
Xem từ 01:34 đến 02:53. Hãy chú ý cách tác giả tạo file DMN mới, đặt tên cho bảng quyết định, và sau đó định nghĩa các cột đầu vào/đầu ra, điều mà chúng ta sẽ thực hiện ngay sau đây.
2. Định nghĩa Đầu vào (Inputs) và Đầu ra (Outputs)
Một bảng quyết định hoạt động giống như một hàm trong lập trình: nó nhận các giá trị đầu vào, xử lý chúng theo các quy tắc, và trả về một kết quả đầu ra.
- Inputs (Đầu vào): Là các cột bên dưới mục "WHEN". Mỗi cột tương ứng với một biến hoặc một mẩu dữ liệu cần thiết để đưa ra quyết định.
- Outputs (Đầu ra): Là các cột bên dưới mục "THEN". Mỗi cột tương ứng với một phần của kết quả quyết định.
Bây giờ, chúng ta sẽ tái tạo lại ví dụ quyết định món ăn dựa vào mùa và số lượng khách.
Bước 1: Cấu hình Cột Đầu vào (Input Columns)
- Double-click vào ô tiêu đề của cột input đầu tiên (mặc định là "Input").
- Label: Đặt tên cho cột là
Season. Đây là nhãn hiển thị cho người đọc. - Input Expression: Đặt là
season. Đây chính là tên của biến quy trình (process variable) mà DMN engine sẽ tìm kiếm khi thực thi. Đây là cầu nối quan trọng giữa BPMN và DMN. - Type: Chọn
stringtừ danh sách thả xuống.
Thực hiện tương tự để thêm cột input thứ hai:
- Click chuột phải vào tiêu đề cột "Season" và chọn
Add Column Left/Right. - Label:
How many guests - Input Expression:
guestCount - Type:
integer
Bước 2: Cấu hình Cột Đầu ra (Output Column)
- Double-click vào ô tiêu đề của cột output (mặc định là "Output").
- Label:
Dish - Output Name:
desiredDish. Đây là tên của biến kết quả sẽ được trả về cho quy trình BPMN. - Type:
string
Hình ảnh sau đây minh họa cách bạn cấu hình một cột đầu vào.

Bạn có thể tham khảo tài liệu hướng dẫn từng bước của Camunda để xem lại các thao tác này.
Create a DMN Decision Table | docs.camunda.org
Tài liệu này cung cấp hướng dẫn chi tiết bằng văn bản và hình ảnh về cách cấu hình các cột đầu vào và đầu ra.
Đọc các mục "Configure the Input Expression and the Output Name" và "Configure the Type of the Input and Output". Hãy đặc biệt chú ý đến sự phân biệt giữa 'Label' và 'Input Expression'/'Output Name'.
3. Thêm các Quy tắc Nghiệp vụ (Rules)
Sau khi đã có cấu trúc, giờ là lúc chúng ta đưa "bộ não" vào cho bảng quyết định bằng cách thêm các quy tắc. Mỗi hàng trong bảng là một quy tắc.
Quy tắc 1: Nếu là mùa Thu, món ăn sẽ là Sườn Nướng.
- Click vào nút
+(Add Rule) ở dưới cùng của bảng để thêm một hàng mới. - Trong cột "Season", nhập
"Fall". (Lưu ý dấu ngoặc kép cho kiểu dữ liệustring). - Trong cột "How many guests", để trống. Một ô input để trống có nghĩa là "bất kỳ giá trị nào cũng được chấp nhận" cho quy tắc này.
- Trong cột "Dish", nhập
"Spareribs".

Quy tắc 2: Nếu là mùa Đông và có hơn 8 khách, món ăn sẽ là Bò Nướng.
- Thêm một quy tắc mới.
- Trong cột "Season", nhập
"Winter". - Trong cột "How many guests", nhập
> 8. Bạn có thể sử dụng các toán tử so sánh như>,<,>=,<=trực tiếp trong các ô. Đây là một phần của ngôn ngữ FEEL (Friendly Enough Expression Language). - Trong cột "Dish", nhập
"Roastbeef".
Quy tắc 3: Nếu là mùa Xuân và ít hơn hoặc bằng 4 khách...
Hãy tự mình thêm các quy tắc sau vào bảng:
| Mô tả quy tắc | Season | How many guests | Dish |
|---|---|---|---|
| Mùa Đông, <= 8 khách | "Winter" |
<= 8 |
"Stew" |
| Mùa Xuân, <= 4 khách | "Spring" |
<= 4 |
"Dry aged Gourmet Steak" |
| Mùa Xuân, > 4 khách | "Spring" |
> 4 |
"Steak" |
| Mùa Hè | "Summer" |
- (để trống) |
"Light Salad and a nice Steak" |
Để xem cách thêm các quy tắc phức tạp hơn, bao gồm cả việc sử dụng toán tử và để trống ô, video sau sẽ rất hữu ích.
All About DMN, Part 1: The Basics
Video này trình bày chi tiết cách thêm các quy tắc vào bảng quyết định, sử dụng nhiều loại dữ liệu và biểu thức điều kiện khác nhau.
Xem từ 06:18 đến 10:03. Chú ý cách tác giả thêm các quy tắc với điều kiện khác nhau: so sánh bằng, so sánh lớn hơn/nhỏ hơn, và đặc biệt là cách xử lý khi một ô input được để trống (nghĩa là không quan tâm đến giá trị của đầu vào đó).
4. Hit Policy - Một cái nhìn sơ lược
Khi bạn tạo bảng, bạn có thể nhận thấy một chữ cái ở góc trên cùng bên trái của bảng (mặc định là U). Đây là Hit Policy.
Hit Policy xác định điều gì sẽ xảy ra nếu các biến đầu vào thỏa mãn nhiều hơn một quy tắc.
U- Unique: Chỉ một quy tắc duy nhất được phép khớp. Nếu có nhiều hơn một quy tắc khớp, engine sẽ báo lỗi. Đây là chế độ mặc định và an toàn nhất khi bắt đầu.F- First: Engine sẽ duyệt các quy tắc từ trên xuống dưới và trả về kết quả của quy tắc đầu tiên mà nó khớp. Thứ tự của các quy tắc trở nên rất quan trọng.C- Collect: Thu thập kết quả từ tất cả các quy tắc khớp và trả về một danh sách.
Trong ví dụ về món ăn của chúng ta, các quy tắc được thiết kế để không trùng lặp, vì vậy Unique là lựa chọn phù hợp. Chúng ta sẽ tìm hiểu sâu hơn về các loại Hit Policy khác nhau và cách sử dụng chúng trong bài học tiếp theo.
5. Lưu Bảng quyết định
Cuối cùng, đừng quên lưu công việc của bạn.
Vào File > Save File As... và lưu bảng quyết định với tên dish-decision.dmn.
File .dmn thực chất là một file XML tuân theo tiêu chuẩn DMN 1.3 của OMG. Bạn có thể mở nó bằng một trình soạn thảo văn bản để xem cấu trúc bên trong nếu tò mò.
Tổng kết
Trong bài học này, bạn đã thực hành các bước cơ bản nhưng cốt lõi để tạo ra một bảng quyết định DMN:
- Khởi tạo: Tạo một file DMN mới trong Camunda Modeler, đặt
Decision IDvàDecision Name. - Định nghĩa cấu trúc: Thêm các cột đầu vào (inputs) và đầu ra (outputs), và quan trọng là liên kết chúng với các biến quy trình thông qua
Input ExpressionvàOutput Name. - Thêm logic: Xây dựng các quy tắc (rules) bằng cách điền các điều kiện và kết quả tương ứng vào các hàng của bảng.
- Nhận biết Hit Policy: Hiểu sơ bộ về khái niệm Hit Policy và vai trò của nó.
Bạn đã xây dựng thành công "bộ não" cho một quyết định nghiệp vụ. Bảng quyết định này giờ đây đã sẵn sàng để được tích hợp và gọi từ một quy trình BPMN.
Xem trước bài học tiếp theo
Như đã đề cập, Hit Policy là một khái niệm rất mạnh mẽ trong DMN. Trong bài học tiếp theo, chúng ta sẽ đi sâu vào chủ đề này: Cấu hình Hit Policy để xác định kết quả của bảng quyết định. Bạn sẽ học cách sử dụng các chính sách như First và Collect để giải quyết các bài toán nghiệp vụ phức tạp hơn, nơi mà thứ tự quy tắc hoặc việc có nhiều kết quả là điều mong muốn.