Chào bạn,
Trong bài học trước, chúng ta đã khám phá cách làm cho các quy trình trở nên "thông minh" hơn bằng cách sử dụng các loại Start Event và End Event khác nhau. Bạn đã học cách khởi tạo quy trình theo lịch trình (Timer Event), dựa trên thông điệp từ hệ thống khác (Message Event), và cách kết thúc quy trình với các kết quả nghiệp vụ cụ thể như báo lỗi (Error Event) hay gửi đi một thông điệp.
Những sự kiện này định nghĩa cách một quy trình bắt đầu và kết thúc. Hôm nay, chúng ta sẽ đi sâu vào "trái tim" của nhiều quy trình nghiệp vụ: những công việc cần đến sự can thiệp của con người. Chúng ta sẽ tìm hiểu về một trong những thành phần cơ bản và quan trọng nhất của BPMN: User Task.
Mục tiêu của bài học này là giúp bạn có thể thêm một User Task vào quy trình và cấu hình các thuộc tính cơ bản của nó. Cụ thể, bạn sẽ học cách tạo một nhiệm vụ cho người dùng và chỉ định chính xác ai là người phải thực hiện nhiệm vụ đó. Đây là kỹ năng nền tảng để tự động hóa bất kỳ quy trình nào liên quan đến phê duyệt, xem xét, hay nhập liệu thủ công.
1. User Task là gì?
User Task là một tác vụ trong quy trình được thiết kế để một người dùng (con người) thực hiện. Khi luồng xử lý của quy trình đi đến một User Task, process engine sẽ tạo ra một nhiệm vụ trong danh sách công việc (task list) của một người hoặc một nhóm người và tạm dừng luồng đó lại. Quy trình sẽ chỉ tiếp tục khi người dùng đó hoàn thành nhiệm vụ.
Với kinh nghiệm của một developer, bạn có thể hình dung User Task như một điểm dừng (breakpoint) trong code của bạn, nơi chương trình tạm ngưng để chờ đợi input từ giao diện người dùng (UI). Process engine sẽ thay bạn quản lý toàn bộ trạng thái "chờ đợi" này một cách bền bỉ và an toàn.
Trong Camunda Modeler, User Task có biểu tượng hình chữ nhật với một hình người nhỏ ở góc trên bên trái.
2. Thêm và Cấu hình User Task trong Modeler
Bây giờ, hãy bắt tay vào thực hành. Chúng ta sẽ thêm một User Task vào một quy trình đơn giản.
Bước 1: Thêm một Task vào Sơ đồ
Hãy mở Camunda Modeler và tạo một sơ đồ BPMN mới (hoặc xóa các phần tử trong sơ đồ cũ để chỉ còn Start Event và End Event).
Để thêm một task vào giữa, bạn có thể chọn biểu tượng hình chữ nhật (activity shape) từ thanh công cụ bên trái và kéo nó vào giữa Start và End Event.

Sau khi thêm, bạn có thể nối các mũi tên từ Start Event đến task mới, và từ task mới đến End Event. Hãy nhấp đúp vào task và đặt tên cho nó, ví dụ: "Phê duyệt yêu cầu".
Bước 2: Chuyển đổi thành User Task
Task bạn vừa tạo là một task chung chung (Abstract Task). Để chỉ định rằng đây là công việc cho người dùng, chúng ta cần thay đổi loại của nó.
- Nhấp vào task "Phê duyệt yêu cầu".
- Một menu ngữ cảnh sẽ xuất hiện, hãy nhấp vào biểu tượng cờ lê (wrench icon).
- Trong danh sách các loại task, chọn User Task.
Bạn sẽ thấy biểu tượng hình người xuất hiện ở góc trên bên trái của task.
Để xem minh họa nhanh về thao tác này, bạn có thể xem đoạn video ngắn sau.
Tutorial: How to Create a BPMN Diagram in Camunda 8 Using Modeler
Video này từ Camunda minh họa cách thay đổi loại của các task khác nhau trong Modeler. Hãy chú ý đến thao tác chọn task, nhấp vào biểu tượng cờ lê và chọn 'User Task'.
Xem từ 08:42 đến 09:00. Bạn sẽ thấy tác giả thay đổi task 'Decide on the application' thành một User Task.
Bước 3: Cấu hình thuộc tính Assignee
Đây là bước quan trọng nhất của bài học. Sau khi đã có một User Task, làm thế nào để engine biết ai sẽ thực hiện nó? Câu trả lời nằm ở Properties Panel.
Nếu bạn chưa thấy Properties Panel, hãy nhấp vào thanh "Properties Panel" ở cạnh phải của cửa sổ Modeler.
Với User Task "Phê duyệt yêu cầu" đang được chọn, hãy tìm đến mục Assignee trong tab General.

Trường Assignee dùng để chỉ định username của người sẽ chịu trách nhiệm cho task này. Khi quy trình chạy đến đây, task sẽ xuất hiện trong danh sách công việc của người đó.
3. Thực hành: Xây dựng quy trình Phê duyệt và Kiểm thử với Tasklist
Lý thuyết là vậy, giờ chúng ta sẽ áp dụng vào một kịch bản hoàn chỉnh. Tài liệu của Camunda cung cấp một hướng dẫn rất chi tiết và thực tế, chúng ta sẽ làm theo các bước trong đó.
Add a User Task to the Process | docs.camunda.org
Tài liệu chính thức của Camunda có một hướng dẫn rất hay về việc thêm User Task vào quy trình thanh toán. Chúng ta sẽ thực hiện theo các bước này để xây dựng và cấu hình User Task đầu tiên của mình.
Hãy đọc và làm theo hướng dẫn trong hai phần đầu tiên: 'Add a User Task' và 'Configure a User Task'. Bạn sẽ tạo một quy trình với User Task tên là 'Approve Payment' và gán nó cho người dùng 'demo'.
Như bạn vừa đọc và thực hành, các bước chính bao gồm:
- Tạo không gian và thêm một activity mới.
- Đặt tên là
Approve Payment. - Thay đổi loại thành User Task.
- Trong Properties Panel, đặt giá trị cho trường Assignee là
demo.
Lưu ý: demo là một người dùng mặc định được tạo sẵn khi bạn khởi tạo dự án Spring Boot với Camunda. Chúng ta sẽ dùng tài khoản này để kiểm thử. Trong hướng dẫn có một phần là Configure a basic form, bạn có thể tạm thời bỏ qua phần này. Chúng ta sẽ tìm hiểu về Forms trong một bài học sau (Module 10).
Bây giờ, làm thế nào để xem kết quả? Chúng ta cần triển khai quy trình và sử dụng một công cụ gọi là Camunda Tasklist.
Add a User Task to the Process | docs.camunda.org
Bây giờ, chúng ta sẽ triển khai quy trình này lên engine và xem nó hoạt động như thế nào trong thực tế. Hãy tiếp tục với hướng dẫn để xem cách triển khai và làm việc với task trong Camunda Tasklist.
Hãy đọc và làm theo hướng dẫn trong các phần 'Deploy the Process' và 'Work on the Task'. Chú ý các bước để triển khai từ Modeler và sau đó đăng nhập vào Tasklist để xem và hoàn thành task.
Sau khi làm theo hướng dẫn, bạn đã trải nghiệm một chu trình hoàn chỉnh:
- Thiết kế: Mô hình hóa quy trình trong Camunda Modeler.
- Triển khai (Deploy): Gửi mô hình quy trình đến Camunda Engine đang chạy trong dự án Spring Boot của bạn.
- Khởi tạo (Instantiate): Bắt đầu một phiên bản mới của quy trình.
- Thực thi: Engine chạy đến User Task và tạo một nhiệm vụ cho user
demo. - Làm việc (Work): Bạn đăng nhập vào Tasklist với tài khoản
demo/demotạihttp://localhost:8080/camunda/app/tasklist/. - Hoàn thành (Complete): Bạn sẽ thấy task "Approve Payment", nhận nó và nhấn "Complete". Lúc này, engine sẽ tiếp tục chạy luồng xử lý cho đến khi kết thúc.
Camunda Tasklist là một ứng dụng web có sẵn, cung cấp giao diện cho người dùng cuối để xem và tương tác với các nhiệm vụ được gán cho họ.
4. Các thuộc tính Gán việc (Assignment) quan trọng
Trong thực tế, việc gán task cho một người duy nhất không phải lúc nào cũng linh hoạt. BPMN và Camunda cung cấp thêm các cách gán việc khác. Hãy quay lại Properties Panel của User Task. Ngay bên dưới Assignee, bạn sẽ thấy:
- Candidate Users: Một danh sách các
username(cách nhau bởi dấu phẩy) có khả năng thực hiện task này. Ví dụ:john, mary, peter. Bất kỳ ai trong số họ cũng có thể thấy task và "claim" (nhận) nó để xử lý. Sau khi một người đã claim, task sẽ biến mất khỏi danh sách của những người khác. - Candidate Groups: Gán task cho một hoặc nhiều nhóm người dùng (ví dụ:
accounting,sales). Bất kỳ thành viên nào của các nhóm này đều có thể claim và thực hiện task. Đây là cách phổ biến nhất để phân phối công việc trong một đội ngũ.
Trong bài học này, chúng ta chỉ tập trung vào Assignee để hiểu khái niệm cơ bản. Chúng ta sẽ khám phá sâu hơn về Candidate Users/Groups ở Module 10, khi bạn xây dựng giao diện quản lý task của riêng mình.
Tổng kết bài học
Hôm nay, bạn đã học được một trong những kỹ năng cốt lõi nhất khi làm việc với Camunda:
- User Task là một tác vụ do con người thực hiện, làm tạm dừng quy trình cho đến khi được hoàn thành.
- Bạn có thể thêm và chuyển đổi một task thành User Task trong Camunda Modeler bằng vài cú nhấp chuột.
- Thuộc tính
Assigneetrong Properties Panel được dùng để gán một task cho một người dùng cụ thể. - Camunda Tasklist là ứng dụng web mặc định để người dùng xem và hoàn thành các task được gán cho mình.
- Bạn đã biết về sự tồn tại của
Candidate UsersvàCandidate Groupscho các kịch bản phân công công việc linh hoạt hơn.
Xem trước bài học tiếp theo
Chúng ta đã biết cách mô hình hóa các công việc cần sự can thiệp của con người. Nhưng sức mạnh lớn nhất của BPM là tự động hóa. Vậy những tác vụ không cần con người thì sao? Ví dụ như gọi một đoạn code Java, tính toán dữ liệu, hay gọi một REST API?
Trong bài học tiếp theo, chúng ta sẽ tìm hiểu về "người anh em" của User Task, đó là Service Task. Bạn sẽ học cách "Thêm Service Task và cấu hình loại thực thi (implementation type)", mở ra cánh cửa để tích hợp logic nghiệp vụ tự động vào quy trình của mình.