Bỏ qua, đến nội dung

Câu hỏi thường gặp (FAQ) — Hello (Plugin mẫu)

Câu hỏi chung

Plugin này có dùng được trong production không?

Không nên. Plugin hello là template/boilerplate để developer học cách phát triển plugin. Nó không cung cấp chức năng nghiệp vụ nào. Hãy dùng làm điểm khởi đầu rồi phát triển plugin riêng.

Làm sao tạo plugin mới từ Hello?

  1. Copy thư mục plugin-hello sang tên plugin mới
  2. Đổi tên package trong package.json
  3. Đổi tên class PluginHelloServer / PluginHelloClient
  4. Xoá các widget mẫu và thay bằng logic riêng
  5. Đăng ký plugin vào ứng dụng

Có bao nhiêu loại widget có thể đăng ký?

Plugin mẫu minh hoạ 3 loại chính:

LoạiBase classMục đích
BlockBlockWidget, DataBlockWidget, CollectionBlockWidget, FilterBlockWidgetKhối giao diện hiển thị dữ liệu
ActionActionWidget, PopupActionWidgetNút hành động (submit, delete, popup...)
FieldFieldWidgetComponent hiển thị/chỉnh sửa trường dữ liệu

BlockSceneEnum có những giá trị gì?

SceneMô tảVí dụ
manyHiển thị danh sách nhiều bản ghiBảng danh sách, grid
oneHiển thị chi tiết một bản ghiTrang chi tiết
newTạo bản ghi mớiForm tạo mới
selectChọn bản ghiPopup chọn record
oamOne-and-many (chi tiết + danh sách con)Master-detail layout

ActionSceneEnum có những giá trị gì?

SceneMô tảVí dụ
collectionAction cho cả collectionNút "Create", "Import"
recordAction cho từng recordNút "Edit", "Delete" trên dòng
allAction cho mọi contextNút tuỳ chỉnh

Câu hỏi kỹ thuật

Sự khác biệt giữa BlockWidget, DataBlockWidget, và CollectionBlockWidget?

  • BlockWidget: Block đơn giản nhất, không có data source. Phù hợp cho block tĩnh (markdown, HTML).
  • DataBlockWidget: Có data source nhưng không gắn với collection cụ thể. Phù hợp cho block lấy data từ API tuỳ chỉnh.
  • CollectionBlockWidget: Gắn với một collection và tự tạo resource. Phù hợp cho CRUD block.
  • FilterBlockWidget: Block dùng để lọc dữ liệu cho block khác.

DisplayItemWidget vs EditableItemWidget vs FilterableItemWidget khác gì?

WidgetMục đíchBinding mẫu
DisplayItemWidgetHiển thị giá trị (chỉ đọc)Hello1FieldWidgetinput
EditableItemWidgetCho phép chỉnh sửa giá trịHello2FieldWidgetinput
FilterableItemWidgetCho phép dùng trong bộ lọcHello2FieldWidgetinput

Phương thức bindWidgetToUI(widgetName, uiTypes) gắn widget với loại UI field (VD: input, textarea, select).

Lifecycle method nào nên đặt logic gì?

MethodNên dùng cho
beforeLoad()Đăng ký ACL rules, middleware, hooks trên database
load()Import collections, đăng ký resource actions, cấu hình chính
install()Seed data ban đầu (chỉ chạy lần đầu)
afterEnable()Logic cần chạy khi admin bật plugin (VD: khởi tạo kết nối)
afterDisable()Dọn dẹp khi admin tắt plugin
remove()Xoá sạch dữ liệu khi gỡ plugin

Plugin cần những peer dependencies nào?

Tối thiểu:

json
{
  "peerDependencies": {
    "@digiforce-nc/client": "9.x",
    "@digiforce-nc/server": "9.x"
  }
}

Thêm @digiforce-nc/database nếu plugin có collection, @digiforce-nc/test nếu cần viết test.