> ## 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.

# Kết nối dữ liệu một chiều (Data Connection one-way)

> Liên kết dữ liệu một chiều bằng Data Connection.

Data Connection one-way là **một Field** dùng để liên kết record theo **một hướng**. Mục tiêu chính là **tham chiếu/hiển thị** hoặc **bàn giao (handoff)** dữ liệu, giúp giảm coupling và giữ rõ ownership.

## Dùng khi nào?

* Cần tham chiếu dữ liệu từ Entity khác để hiển thị hoặc lọc/nhóm
* Cần bàn giao công việc giữa hai bước/nhóm (từ Request → Procurement)
* Cần “kéo” một record nguồn vào app hiện tại để làm việc tiếp (read-mostly)

## Data Connection one-way hoạt động như thế nào?

* Data Connection là **Field** trên một Entity (Entity A)
* Field này liên kết tới record của một Entity khác (Entity B) theo một hướng:
* A **tham chiếu** tới B
* A có thể hiển thị/tra cứu (Lookup) thông tin của B

<Note>
  Data Connection one-way không có nghĩa “không thể cập nhật gì”, mà là **thiết kế vận hành** ưu tiên một hướng ownership để tránh sửa chéo. Quyền sửa dữ liệu nguồn vẫn do app/role sở hữu quyết định.
</Note>

## Trong cùng App vs giữa các App (quan trọng)

### 1) Trong cùng App

Data Connection có thể trỏ trực tiếp tới **Entity trong cùng app** (không cần publish/consume).
Tình huống dùng phổ biến: liên kết Supplier, liên kết Department, liên kết Master data nội bộ.

### 2) Giữa các App

Với liên kết **cross-app**, Data Connection (một chiều) sẽ làm việc thông qua **Connected app (kết nối ứng dụng)** đã được provider chia sẻ.

Thực hành chuẩn:

1. Provider app cấu hình chia sẻ (publish) và/hoặc mở kênh nhận submission
2. Ở consumer app, khi cấu hình Data Connection field, chọn Connected app tương ứng (hệ thống sẽ yêu cầu xác nhận quyền truy cập nếu chưa kết nối)

Liên quan:

* [Cổng dữ liệu (Data source)](/build-apps/integrations/data-sources-overview)
* [Kết nối ứng dụng (Connected app)](/build-apps/integrations/connected-app)

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

1. Xác định record nguồn cần tham chiếu (thuộc Entity/App nào)
2. Nếu cross-app: chốt publish/consume trước (đúng phạm vi field)
3. Tạo Field loại **Data Connection (one-way)** trên Entity đích
4. Thiết kế View để người dùng chọn record liên kết
5. (Tuỳ nhu cầu) tạo **Lookup** để hiển thị các field quan trọng từ record nguồn

Liên quan: [Tra cứu (Lookup)](/build-apps/data-modeling/lookup)

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

* Entity `Purchase Request`
* Entity `Supplier`
* Field `Supplier` trên Purchase Request: Data Connection one-way → Supplier
* Lookup `Supplier name`, `Supplier code` để hiển thị

Kết quả: chọn Supplier một lần, thông tin hiển thị nhất quán.

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

<Note>
  Data Connection thiết lập **liên kết tới record** trong connected app. Nếu cần tham chiếu các field để hiển thị/lọc/nhóm, dùng thêm **Lookup (tham chiếu)**. Với liên kết giữa app, publish/consume tạo connected app (kết nối ứng dụng) cho Data Connection, Lookup và Rollup.
</Note>

* App Purchase Request publish “Approved Requests”
* App Procurement kết nối Connected app theo dữ liệu đã được chia sẻ
* Entity `Procurement Task` có field `Request`: Data Connection one-way → Connected app đã kết nối
* Lookup kéo `Request title`, `Estimated cost`, `Requester`…

Kết quả: Procurement làm việc trên app riêng nhưng vẫn bám đúng dữ liệu chuẩn.

## Lưu ý thiết kế

* Ưu tiên publish/consume + one-way để giữ ownership rõ
* Data Connection là cơ chế **liên kết dữ liệu** (link databases) giữa Entity/App và **không** nhân bản (clone) dữ liệu. Lệch dữ liệu thường xảy ra khi tạo field trùng thông tin hoặc nhập lại thủ công thay vì tham chiếu qua liên kết.
* Chỉ kéo các field cần thiết bằng Lookup (đủ dùng, không kéo tràn)

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

### Không thấy connected app để chọn (cross-app)

* App nguồn chưa publish
* App hiện tại chưa consume
* Chưa được cấp quyền truy cập connected app

### Liên kết được nhưng Lookup trống

* Chưa cấu hình Lookup đúng field nguồn
* Field nguồn không được publish (cross-app)
* Quyền xem record/field nguồn không đủ

## Bước tiếp theo

* Tìm hiểu liên kết hai chiều (khi cần): [Kết nối dữ liệu hai chiều (Data Connection two-way)](/build-apps/data-modeling/data-connection-two-way)
* Kéo dữ liệu hiển thị: [Tra cứu (Lookup)](/build-apps/data-modeling/lookup)
* Quy tắc ownership: [Ownership & chia sẻ dữ liệu (Data ownership & sharing)](/foundations/data-ownership-sharing)
