Giao diện
@digiforce-nc/plugin-workflow-javascript
Plugin đăng ký node chạy JavaScript tùy chỉnh trong workflow, mở rộng plugin-workflow. Thực thi code JavaScript trong môi trường sandbox an toàn, cho phép xử lý logic phức tạp không thể cấu hình bằng UI.
Plugin này làm gì?
Node JavaScript cho phép viết và chạy code JS tùy ý trong workflow. Code được thực thi trong sandbox có kiểm soát - có quyền truy cập biến workflow nhưng không truy cập trực tiếp hệ thống file hay network. Kết quả return được lưu vào biến workflow.
Đây là node mạnh nhất cho xử lý logic tùy chỉnh. Khi các node cấu hình (condition, calculation, mapping) không đáp ứng được yêu cầu phức tạp, JavaScript node là giải pháp cuối cùng.
Cấu hình
| Tham số | Kiểu | Mô tả |
|---|---|---|
code | string | Code JavaScript cần thực thi |
timeout | number | Thời gian tối đa chạy (ms), mặc định 5000 |
scope | object | Biến từ workflow context inject vào scope của code |
Input / Output
| Hướng | Dữ liệu | Mô tả |
|---|---|---|
| Input | scope | Các biến workflow được inject vào execution context |
| Input | code | Code JavaScript (hỗ trợ async/await) |
| Output | result | Giá trị return từ code (bất kỳ kiểu) |
| Output | error | Thông tin lỗi nếu code throw exception |
Tính năng chính
| # | Tính năng | Chi tiết |
|---|---|---|
| 1 | Full JavaScript | Viết logic phức tạp: vòng lặp, điều kiện, string manipulation |
| 2 | Sandbox an toàn | Code chạy trong VM sandbox, không truy cập OS |
| 3 | Async/Await | Hỗ trợ code bất đồng bộ |
| 4 | Timeout | Tự động dừng nếu chạy quá lâu |
| 5 | Scope injection | Biến workflow tự động khả dụng trong code |
| 6 | Error handling | Bắt exception và lưu vào biến error |
Trường hợp sử dụng
| # | Kịch bản | Mô tả |
|---|---|---|
| 1 | Transform dữ liệu | Chuyển đổi cấu trúc object phức tạp giữa hai hệ thống |
| 2 | Business logic | Tính giá theo bảng chiết khấu nhiều tầng |
| 3 | String processing | Parse email content, extract thông tin từ text |
| 4 | Data validation | Kiểm tra logic nghiệp vụ phức tạp không thể cấu hình UI |
| 5 | Array processing | Lọc, sắp xếp, nhóm dữ liệu phức tạp từ nhiều nguồn |
API khả dụng trong sandbox
| API | Có sẵn | Ghi chú |
|---|---|---|
Math, Date, JSON | Có | Built-in JavaScript |
String, Array, Object | Có | Prototype methods |
console.log | Có | Ghi vào workflow log |
setTimeout, setInterval | Không | Dùng async/await thay thế |
require, import | Không | Sandbox restriction |
fetch, XMLHttpRequest | Không | Dùng HTTP Request node |
fs, process, child_process | Không | OS access bị chặn |
Lưu ý quan trọng
- Sandbox không có
require,fetch,fs- chỉ xử lý dữ liệu thuần - Code phải return giá trị cuối cùng - giá trị này trở thành result của node
- Timeout mặc định 5 giây - tăng lên nếu xử lý dữ liệu lớn
- Infinite loop sẽ bị kill khi timeout - cẩn thận với while loop
- Kết quả phải serialize được (JSON) - không return function, Symbol, hoặc circular reference
Dependencies
| Package | Vai trò |
|---|---|
@digiforce-nc/plugin-workflow | Workflow engine (peer) |
@digiforce-nc/server | Server framework (peer) |