GPortal – Generic Portal

Đặt lịch Demo miễn phí

Giới thiệu

Không có nền tảng nào có thể giúp giải mọi bài toán, nhưng chúng ta có thể loại bỏ các bước lặp đi lặp lại, đưa người dùng vào trung tâm phát triển, giúp việc xây dựng phần mềm quản lý chỉ còn vài ngày, thậm chí vài giờ.

GPortal được sinh ra với mục tiêu giúp doanh nghiệp xây dựng phần mềm quản lý nhanh chóng – gọn nhẹ – dễ tích hợp AI – và hầu như không cần viết code.

GPortal cũng tích hợp toàn diện với nền tảng tự động hoá N8N, giúp việc xây dựng workflow trở nên đơn giản và mạnh mẽ.

Như vậy, chúng tôi xác định giá trị mang lại:


No/Low-code – Chúng tôi làm điều đó như thế nào?

Hầu hết phần mềm quản lý đều xoay quanh việc tạo – sửa – xoá – tìm kiếm các đối tượng quản lý (entity) khác nhau.

Ví dụ:

Các đối tượng quản lý này đều có các logic khác nhau.

Ví dụ:

Vậy, nếu chúng ta có giao diện đầy đủ để tuỳ chỉnh (config) các đối tượng quản lý (entity), ta hoàn toàn có thể loại bỏ các bước lập trình, xây dựng database, API...

Tương ứng, chúng ta sẽ cần 4 bước để có phần mềm quản lý cho riêng bạn

  1. Tạo đối tượng cần quản lý.
  2. Thiết lập các thuộc tính, logic cho đối tượng cần quản lý.
  3. Nhập liệu, thêm - xoá - sửa - tìm kiếm cho đối tượng cần quản lý.
  4. Sử dụng N8N, với các node dành riêng cho GPortal để xây dựng workflow và làm tự động quy trình quản lý

📷 Các bước thực hiện trên GPortal:

Step build 1

📷 Nhập liệu, tìm kiếm đối tượng quản lý:

Input entity

📷 Xây dựng workflow:

Step build 2

📷 (Trường hợp nâng cao) Tạo thêm trang quản lý:

Custom view

📷 (Trường hợp nâng cao) Tạo thêm trang quản lý Với AI:

Generate view with AI

Từ điển

Chúng tôi không tạo ra bất kỳ kiến trúc hay design pattern mới.

Điều chúng tôi làm là giúp bạn áp dụng những cấu trúc quen thuộc một cách dễ dàng hơn, trực quan hơn.

Thuật ngữGiải thích
Entity (Đối tượng quản lý)Là loại dữ liệu bạn muốn quản lý. Ví dụ: sản phẩm, khách hàng, nhân viên. Tương tự như một bảng trong database.
Attribute / Field (Thuộc tính)Thông tin cụ thể của entity. Ví dụ: name, email, birthDay. "Field" và "Attribute" có nghĩa giống nhau.
Field Type (Kiểu dữ liệu)Xác định dạng dữ liệu của thuộc tính: string, number, date, enum, reference, embedded document, v.v.
Validation (Kiểm tra hợp lệ)Hàm kiểm tra dữ liệu trước khi lưu. Trả về true/false. Ví dụ: email phải có "@", số lượng > 0.
Computation (Tính toán tự động)Hàm tự động sinh ra giá trị dựa trên các thuộc tính khác. Ví dụ: tạo mã nhân viên từ name + birthDay.
Workflow (Luồng tự động hoá)Các hành động tự động xảy ra khi có sự kiện. Ví dụ: kiểm tra tồn kho, gửi email, tạo công việc tiếp theo.
Required (Bắt buộc nhập)Thuộc tính không được phép bỏ trống khi nhập dữ liệu.
Function (Hàm)Đoạn mã JavaScript được sử dụng trong Validation hoặc Computation để xử lý logic tuỳ chỉnh.

Entity Configuration – Tạo đối tượng quản lý không cần sửa database hay API

Entity Configuration là nơi dùng để tuỳ chỉnh các đối tượng, bao gồm:

📷 Entity config overview:

Entity config overview

Ví dụ: Tạo entity teamMember

Giả sử bạn muốn quản lý thông tin thành viên nhóm (teamMember) với 3 thuộc tính:

Bạn chỉ cần mở trang Config Entity và khai báo các field.

📹 Video tạo teamMember:

Create teamMember entity

Sử dụng & quản lý dữ liệu (Manage Entity)

Sau khi cấu hình, bạn có thể:

📹 Video nhập liệu:

Input value for entity

Cấu hình thuộc tính (Field Configuration)

Mỗi đối tượng (entity) đều chứa một tập thuộc tính (field), và với mỗi thuộc tính, bạn có thể thiết lập:

Thuộc tínhGiải thích
Field nameTên thuộc tính, được sử dụng trong hệ thống và API.
View nameTên hiển thị cho người dùng trong giao diện.
DescriptionMô tả ý nghĩa hoặc mục đích của thuộc tính.
Field typeKiểu dữ liệu của thuộc tính (string, number, date, enum, reference, v.v.).
RequiredXác định thuộc tính có bắt buộc nhập hay không.
Use ValidationCho biết thuộc tính có sử dụng hàm kiểm tra hợp lệ (validation function) hay không.
Read OnlyThuộc tính chỉ được xem, không thể chỉnh sửa.
System FieldThuộc tính đặc biệt của hệ thống, không thể xoá và đôi khi không thể sửa.

📷 Ảnh giao diện:

Attribute config

📹 Validation – Hàm được thực thi để xác định giá trị có hợp lệ hay không:

Custom validation

📹 Computation – Hàm được thực thi để tính toán ra giá trị:

Custom computation

Kiểu dữ liệu cho thuộc tính (Field Types)

Mỗi thuộc tính đều có thể tuỳ chỉnh kiểu dữ liệu, đảm bảo tính chặt chẽ và tối ưu trong quản lý dữ liệu.

Kiểu dữ liệu cơ bản

KiểuMô tảVí dụ
stringChuỗi ký tự"Nguyễn Văn A", "Active"
numberSố25, 1200000
dateNgày/giờ ISO 8601"2025-11-23T10:30:00Z"
richTextChuỗi ký tự dài, HTMLdùng cho các đoạn văn bản dài, markdown hoặc HTML

📹 Field types supported:

Field types supported

Kiểu dữ liệu nâng cao

Tương tự lập trình, GPortal hỗ trợ các kiểu dữ liệu sau:

KiểuMô tảVí dụ
enumDanh sách giá trị cố định"status": "Active" với tập giá trị ["Active", "Inactive", "Pending"]
referenceLiên kết đến entity khác"customerId": "CUS-00123" trỏ đến entity Customer
array referenceLiên kết nhiều entity"tagIds": ["TAG-1", "TAG-2"]
embedded documentObject nhiều thuộc tính"address": { "street": "12 Lê Lợi", "city": "Huế" }
array embedded documentsDanh sách object"items": [ { "name": "SP A", "qty": 2 }, { "name": "SP B", "qty": 1 } ]

Ví dụ kiểu dữ liệu nâng cao

Enum

Dùng để chứa một tập hằng số.

Enum gồm: key – name – color.

Giả sử cần tạo thuộc tính role để xác định vai trò của thành viên: junior, senior, leader.

Cách thiết lập:

  1. Field type: chọn enum
  2. Nhập key cho enum
  3. Nhập name và color cho từng giá trị

📹 Demo:

Demo enum field

Reference

Dùng để chứa key trỏ đến một entity khác.

Ví dụ: cần thêm thuộc tính team để biết thành viên thuộc team nào.

Cách thiết lập:

  1. Field type: Reference
  2. Entity referenced: chọn entity team

📹 Demo:

Demo reference

Array Reference

Dùng để chứa một tập key, trỏ đến nhiều entity khác.

Ví dụ: tạo thuộc tính projects để biết thành viên tham gia các dự án nào.

Cách thiết lập:

  1. Field type: Array Reference
  2. Entity referenced: team (hoặc entity phù hợp)

📹 Demo:

Demo array reference

Embedded Document

Dùng để lưu object.

Ví dụ: thuộc tính address gồm street và city.

Cách thiết lập:

  1. Field type: Embedded Document
  2. Entity referenced: Address

📹 Demo:

Demo embedded document

Array Embedded Documents

Dùng để lưu danh sách object.

Ví dụ: thuộc tính workHistory để lưu quá trình làm việc.

Cách thiết lập:

  1. Field type: Array Embedded Document
  2. Entity referenced: workHistory

📹 Demo:

(updating)


Business Rules – Custom Validation & Computation

Hệ thống cho phép khai báo hàm kiểm tra và tính toán tự động khi dữ liệu thay đổi.

Ví dụ


Custom validation

Custom validation là hàm chạy mỗi khi dữ liệu thay đổi.

Hàm phải trả về:

Ví dụ: kiểm tra email có chứa ký tự @.

Cách dùng:

  1. Chọn Use Validation
  2. Viết hàm validation
  3. Nhập thông báo lỗi tại Validation Message On Failure

📹 Demo:

Demo Custom validation

Custom Computation

Computation chạy khi giá trị của các thuộc tính phụ thuộc (dependencies) thay đổi.

Ví dụ: tạo thuộc tính code = name + birthDay.

Cách dùng:

  1. Field type: Computation
  2. Viết hàm computation
  3. Chọn dependencies: name và birthDay

📹 Demo:

Demo Custom computation

📦 Cách chúng tôi lưu trữ entity

Mỗi entity khi lưu trữ sẽ được bao bọc trong một cấu trúc chuẩn, gồm:

{
  "name": "Tên entity, ví dụ: teamMember",
  "version": "Phiên bản schema của entity, mặc định là 0",
  "value": "Object chứa toàn bộ dữ liệu (các thuộc tính) của entity"
}

🔍 Giải thích nhanh


📘 Ví dụ

Giả sử entity teamMember có dữ liệu:

name: "Nguyen Van A"
email: "nguyenVanA@gmail.com"
role: "leader"

Thì khi lưu trữ, hệ thống sẽ ghi:

{
  "name": "teamMember",
  "version": 0,
  "value": {
    "name": "Nguyen Van A",
    "email": "nguyenVanA@gmail.com",
    "role": "leader"
  }
}

Workflow – Tự động hoá công việc

Phần mềm quản lý hiện đại không chỉ CRUD.

Quan trọng hơn là tự động hoá vận hành.

Các nhu cầu phổ biến:


Ví dụ thực tế về quy trình

Doanh nghiệp bán hàng

Doanh nghiệp dịch vụ

Công ty đào tạo


Bộ node N8N dành cho GPortal

Chúng tôi cung cấp đầy đủ node N8N để tương tác với dữ liệu GPortal.

Bộ API Node

Hỗ trợ đầy đủ CRUD, gọi API để thao tác entity.

N8N API Nodes

Create a new entity Node

Được sử dụng để tạo đối tượng quản lý (entity), có thể sử dụng như tool Agent.

📄 Bảng dữ liệu mô tả đối số

Đối sốKiểu dữ liệuMô tảHỗ trợ expressionVí dụ
entityNamestringTên đối tượng (entity) dùng để xác định loại dữ liệu cần truy vấn. Cho phép sử dụng biểu thức để lọc linh hoạt.✔️"Product*", "FAQ Guide", "/^User/"
entityDataobjectDữ liệu đối tượng được tạo hoặc dữ liệu dùng để lọc. Chấp nhận các biểu thức để so khớp theo thuộc tính.✔️{ "status": { "$eq": "active" } }, { "category": "support" }, { "price": { "$gte": 1000 } }

📘 Request payload tương ứng

{
  "entityName": "Support*",
  "entityData": {
    "category": { "$eq": "guide" },
    "status": { "$in": ["active", "published"] }
  }
}

demo:

N8N Create Node

Update an entity

Được sử dụng để chỉnh sửa đối tượng quản lý (entity), có thể sử dụng như tool Agent.

📄 Bảng mô tả đối số

Đối sốKiểu dữ liệuMô tảHỗ trợ expression
entityIdstring / number / objectID của đối tượng cần cập nhật. Có thể dùng expression để chọn nhiều ID hoặc chọn theo điều kiện.✔️
entityDataobjectDữ liệu cần update vào đối tượng.

📘 Request payload tương ứng

{
  "entityId": { "$in": ["101", "102", "103"] },
  "entityData": {
    "status": "active",
    "updatedAt": "2025-01-10T10:00:00Z"
  }
}

demo

N8N Update Node

Delete an entity

Được sử dụng để xoá đối tượng quản lý (entity), có thể sử dụng như tool Agent.

📄 Bảng mô tả đối số

Đối sốKiểu dữ liệuMô tảHỗ trợ expression
entityIdstring / number / objectID của đối tượng cần xoá. Có thể dùng expression để xoá nhiều ID hoặc xoá theo điều kiện.✔️

📘 Request payload tương ứng

{
  "entityId": { "$in": ["A01", "A02", "A03"] }
}

demo

N8N Delete Node

Get many entities

Được sử dụng để tìm kiếm thông tin nhiều đối tượng quản lý, có thể sử dụng như API tool.

📄 Bảng mô tả đối số Search API

Đối sốKiểu dữ liệuMô tảHỗ trợ expression
searchParametersobjectĐiều kiện tìm kiếm theo dạng MongoDB query object (so sánh, regex, in, range…).✔️
limitnumberSố lượng dữ liệu cần trả về.
entityNamestringTên đối tượng (entity) cần tìm kiếm.✔️

📘 Request Payload tương ứng

{
  "searchParameters": {
    "status": { "$eq": "active" },
    "category": { "$in": ["guide", "support"] }
  },
  "limit": 10,
  "entityName": "SupportArticle"
}

demo

N8N Get Many Entities Node

Bộ điều khiển UI Nodes

Nhận tín hiệu điều khiển UI từ workflow.

Control UI Nodes

Demo:


Query Embedding Vector Node

Truy vấn vector embedding phục vụ AI chatbot và semantic search.

Mỗi đối tượng, khi được tạo với lựa chọn sử dụng vector embedding, sẽ được lưu cùng với vector embedding và hỗ trợ việc semantic search (tìm kiếm theo ngữ nghĩa).

Tham sốKiểu dữ liệuBắt buộcMô tả chức năng
queryStringstring✔️Chuỗi văn bản cần chuyển thành vector embedding để thực hiện tìm kiếm theo ngữ nghĩa.
limitnumber✔️Số lượng kết quả tối đa cần trả về sau khi xếp hạng độ tương đồng vector.
numCandidatesnumberSố lượng ứng viên ban đầu để hệ thống mở rộng phạm vi tìm kiếm (dùng cho ANN search).
entityNamestringTên loại đối tượng (entity) để lọc trong kho dữ liệu.
Query Vector Embedding

Demo:

Demo Query Vector Embedding