> ## Documentation Index
> Fetch the complete documentation index at: https://learn.cleeksy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Tra cứu (Lookup)

> Tham chiếu dữ liệu từ nguồn liên kết bằng Lookup.

Lookup (tra cứu) là một **computed field** dùng để “kéo lên” (hiển thị) giá trị từ record liên kết. Lookup giúp tránh nhập trùng dữ liệu và giúp View/Workflow có đủ thông tin để xử lý.

## Dùng khi nào?

* Cần hiển thị thông tin từ record liên kết mà không muốn nhập lại
  (ví dụ: hiển thị `Supplier name` trên Purchase Request)
* Cần dùng thông tin “tham chiếu” để lọc/nhóm trong View
  (ví dụ: nhóm Purchase Request theo Department của Requester)
* Cần đưa một vài field từ record liên kết vào màn hình làm việc hằng ngày

## Lookup hoạt động như thế nào?

Lookup cần một “đường liên kết” tới record nguồn. Trong Cleeksy, đường liên kết thường là:

* **Data Connection field** (liên kết record theo quan hệ)
* Hoặc một **Sub-entity (bảng con)** nếu thiết kế dữ liệu theo cấu trúc phân cấp (tuỳ bài toán)

Lookup sau đó chọn **field nguồn** để hiển thị (text, number, date…).

<Note>
  Lookup là field **chỉ đọc**. Giá trị thay đổi khi record nguồn thay đổi; Lookup không phải nguồn dữ liệu chuẩn.
</Note>

## Điều kiện tiên quyết (quan trọng)

### 1) Lookup trong cùng App

* Data Connection liên kết trực tiếp giữa các Entity trong app
* Lookup kéo dữ liệu từ Entity được liên kết

### 2) Lookup giữa các App

* App nguồn **publish** dữ liệu
* App hiện tại **consume** → tạo **connected app (kết nối ứng dụng)**
* Sau đó Data Connection mới có thể trỏ tới connected app đó, và Lookup mới kéo được field

Liên quan: [Chia sẻ dữ liệu (Publish/Consume)](/build-apps/integrations/publish-consume-overview)

## Cách cấu hình (khung thao tác)

1. Tạo **Data Connection field** (hoặc cấu trúc Sub-entity phù hợp)
2. Tạo field mới loại **Lookup**
3. Chọn:

* “Nguồn liên kết” (Data Connection/Sub-entity)
* “Field cần tra cứu” (field nguồn)

4. Kiểm tra hiển thị ở View và quyền truy cập (nếu cần)

## Ví dụ 1: Trong cùng App (Supplier trên Purchase Request)

* Entity: `Purchase Request`
* Entity: `Supplier`
* Field `Supplier` trên Purchase Request: **Data Connection** trỏ tới Supplier
* Field `Supplier name` trên Purchase Request: **Lookup** từ `Supplier → Name`

Kết quả: người dùng chỉ cần chọn Supplier, các thông tin liên quan hiển thị tự động.

## Ví dụ 2: Giữa các App (Purchase Request → Procurement)

Bối cảnh:

* App Purchase Request publish các request đã Approved
* App Procurement consume để tạo connected app “Approved Purchase Requests”

Thiết kế trong app Procurement:

* Field `Request`: Data Connection trỏ tới Connected app đã được kết nối
* Lookup `Request title`, `Estimated cost`, `Requester`… từ field `Request`

Kết quả: Procurement làm việc trên app của mình nhưng vẫn nhìn thấy thông tin chuẩn từ app nguồn.

## Lưu ý thiết kế và hiệu năng

* Ưu tiên Lookup cho **vài field quan trọng** phục vụ thao tác; tránh kéo “tất cả mọi thứ”
* Nếu cần tổng hợp trên nhiều record liên quan → cân nhắc [Tổng hợp (Rollup)](/build-apps/data-modeling/rollup)
* Nếu cần tính toán dựa trên nhiều field → cân nhắc [Công thức (Formula)](/build-apps/data-modeling/formula)

## Khắc phục sự cố

### Lookup trống dù đã liên kết

* Record chưa chọn liên kết (Data Connection đang rỗng)
* Field nguồn chưa được publish (đối với cross-app)
* App tiêu thụ chưa consume đúng connected app
* Quyền truy cập không đủ để xem record/field nguồn

### Lookup không đúng như kỳ vọng

* Đang tra cứu nhầm field nguồn
* Field nguồn thay đổi nhưng chưa được cập nhật theo quy tắc vận hành (ownership chưa rõ)

Tham khảo: [Ownership & chia sẻ dữ liệu (Data ownership & sharing)](/foundations/data-ownership-sharing)

## Bước tiếp theo

* Tổng hợp nhiều record: [Tổng hợp (Rollup)](/build-apps/data-modeling/rollup)
* Tính toán từ nhiều field: [Công thức (Formula)](/build-apps/data-modeling/formula)
* Liên kết dữ liệu: [Kết nối dữ liệu một chiều (Data Connection one-way)](/build-apps/data-modeling/data-connection-one-way)
