Các hàm Relate và Unrelate
Áp dụng cho: Ứng dụng Canvas Ứng dụng dựa trên mô hình
Liên kết và hủy liên kết bản ghi của hai bảng thông qua mối quan hệ một-nhiều hoặc nhiều-nhiều.
Mô tả
Hàm Relate liên kết 2 bản ghi thông qua mối quan hệ một-nhiều hoặc nhiều-nhiều trong Microsoft Dataverse. Hàm Unrelate ngược với hàm Relate và hủy liên kết.
Đối với mối quan hệ một-nhiều, bảng Nhiều có trường khóa ngoại trỏ đến bản ghi của bảng Một. Relate thiết lập trường này để trỏ đến một bản ghi cụ thể của bảng One, trong khi Unrelate thiết lập trường này thành trống. Nếu trường đã được đặt khi hàm Relate được gọi, thì liên kết hiện có sẽ được thay thế bằng liên kết mới. Bạn cũng có thể đặt trường này bằng cách sử dụng hàm Patch hoặc một công cụ điều khiển Chỉnh sửa biểu mẫu; bạn không cần sử dụng hàm Relate.
Đối với các mối quan hệ nhiều-nhiều, hệ thống liên kết các bản ghi sẽ duy trì một bảng tham gia ẩn. Bạn không thể trực tiếp truy cập vào bảng tham gia này mà chỉ có thể đọc thông qua phép chiếu một-nhiều và thiết lập thông qua các hàm Relate và Unrelate. Cả hai bảng liên quan đều không có khóa ngoại.
Dữ liệu cho bảng mà bạn chỉ định trong đối số đầu tiên sẽ được làm mới để phản ánh thay đổi, nhưng dữ liệu cho bảng mà bạn chỉ định trong đối số thứ hai thì không. Dữ liệu đó phải được làm mới thủ công bằng hàm Refresh để hiển thị kết quả của thao tác.
Các hàm này không bao giờ tạo hoặc xóa bản ghi. Các hàm này chỉ có/không có mối liên hệ với hai bản ghi hiện có.
Bạn chỉ có thể sử dụng các hàm này trong công thức hành vi.
Lưu ý
Các hàm này là một phần của tính năng xem trước và các hàm này chỉ hoạt động khi tính năng Relational data, option sets, and other new features for CDS (Dữ liệu quan hệ, bộ tùy chọn và các tính năng mới khác của CDS) đang bật. Đây là tùy chọn cài đặt cấp ứng dụng, được bật theo mặc định cho các ứng dụng mới. Để bật/tắt tính năng này, chọn Thiết đặt rồi chọn Các tính năng sắp ra mắt. Phản hồi của bạn rất hữu ích đối với chúng tôi - vui lòng cho chúng tôi biết ý kiến của bạn trong diễn đàn cộng đồng Power Apps.
Cú pháp
Liên quan( Table1RelationTable, Table2Record )
- Bảng1Bảng liên quan - Bắt buộc. Đối với bản ghi của Table1, bảng Table2 ghi lại dữ liệu liên quan thông qua mối quan hệ một-nhiều hoặc nhiều-nhiều.
- Table2Record - Bắt buộc. Bản ghi Table2 để thêm vào mối quan hệ.
Không liên quan( Bảng1Bảng liên quan, Bảng2Bản ghi )
- Bảng1Bảng liên quan - Bắt buộc. Đối với bản ghi của Table1, bảng Table2 ghi lại dữ liệu liên quan thông qua mối quan hệ một-nhiều hoặc nhiều-nhiều.
- Table2Record - Bắt buộc. Bản ghi Table2 để xóa khỏi mối quan hệ.
Ví dụ
Hãy coi một bảng Sản phẩm có các mối quan hệ sau đây là đã được xem trong trình xem bảng của cổng thông tin Power Apps:
Tên hiển thị của mối quan hệ | Bảng liên quan | Loại mối quan hệ |
---|---|---|
Đặt trước sản phẩm | Loại đặt trước | Một-nhiều |
Sản phẩm ↔ Liên hệ | Người liên hệ | Nhiều-nhiều |
Sản phẩm và Đặt chỗ có liên quan thông qua mối quan hệ Một-Nhiều. Để liên kết bản ghi đầu tiên của bảng Đặt trước với bản ghi đầu tiên của bảng Sản phẩm:
Relate( First( Products ).Reservations, First( Reservations ) )
Để xóa mối quan hệ giữa các bản ghi này:
Unrelate( First( Products ).Reservations, First( Reservations ) )
Chúng tôi không bao giờ tạo hoặc xóa bản ghi, mà chỉ sửa đổi mối quan hệ giữa các bản ghi.
Sản phẩm và Danh bạ có liên quan với nhau thông qua mối quan hệ Nhiều-nhiều. Để liên kết bản ghi đầu tiên của bảng Danh bạ với bản ghi đầu tiên của bảng Sản phẩm:
Relate( First( Products ).Contacts, First( Contacts ) )
Vì mối quan hệ nhiều-nhiều có tính đối xứng, chúng ta cũng có thể đã làm điều này theo hướng ngược lại:
Relate( First( Contacts ).Products, First( Products ) )
Để xóa mối quan hệ giữa các bản ghi này:
Unrelate( First( Products ).Contacts, First( Contacts ) )
hoặc:
Unrelate( First( Contacts ).Products, First( Products ) )
Hướng dẫn sau đó thực hiện chính xác các thao tác này trên các bảng này bằng cách sử dụng một ứng dụng có các tùy chọn điều khiển Thư viện và Hộp tổ hợp để chọn các bản ghi liên quan.
Những ví dụ này phụ thuộc vào dữ liệu mẫu được cài đặt trong môi trường của bạn. Tạo môi trường dùng thử bao gồm dữ liệu mẫu hoặc thêm dữ liệu mẫu vào môi trường hiện có.
Một-nhiều
Chức năng liên quan
Trước tiên, bạn sẽ tạo một ứng dụng đơn giản để xem và chỉ định lại các lượt đặt trước liên kết với một sản phẩm.
Trên tab Dạng xem, chọn Nguồn dữ liệu.
Trong ngăn Dữ liệu, chọn Thêm dữ liệu> chọn Sản phẩm.
Bảng Sản phẩm là một phần của dữ liệu mẫu được tải ở trên.Trên tab Insert, thêm công cụ điều khiển Gallery trống, dạng dọc.
Nhớ đặt tên cho công cụ điều khiển mà bạn vừa thêm là Gallery1, sau đó di chuyển và thay đổi kích thước của tùy chọn này để lấp đầy phía bên trái của màn hình.
Trên tab Properties (Thuộc tính), đặt thuộc tính Items (Mục) của Gallery1 thành Products (Sản phẩm) và Layout (Bố cục) thành Image and title (Hình ảnh và tiêu đề).
Trong Gallery1, đảm bảo đặt tên cho công cụ điều khiển Label là Title1 rồi đặt thuộc tính Văn bản thành ThisItem.Name.
Chọn màn hình để tránh chèn mục tiếp theo vào Gallery1. Thêm công cụ điều khiển Gallery trống, dạng dọc thứ hai và đặt tên là Gallery2.
Gallery2 sẽ hiển thị các mục đặt chỗ cho bất kỳ sản phẩm nào mà người dùng chọn trong Gallery1.
Di chuyển và thay đổi kích thước Gallery2 để lấp đầy góc phần tư phía trên bên phải của màn hình.
(tùy chọn) Thêm công cụ điều khiển Label ở trên Gallery2, như trong hình tiếp theo.
Trong thanh công thức, đặt thuộc tính Items của Gallery2 thành Gallery1.Selected.Reservations.
Trong ngăn thuộc tính, đặt Layout (Bố cục) của Gallery2 thành Title (Tiêu đề).
Trong Gallery2, hãy thêm công cụ điều khiển Combo box (Hộp tổ hợp), đặt tên là ComboBox1, sau đó di chuyển và thay đổi kích thước của tùy chọn này để tránh chặn các công cụ điều khiển khác trong Gallery2.
Trên tab Properties (Thuộc tính), đặt thuộc tính Items (Mục) của ComboBox1 thành Products (Sản phẩm).
Cuộn xuống phía dưới trên tab Properties (Thuộc tính) rồi đặt thuộc tính Allow multiple selection (Cho phép nhiều lựa chọn) của ComboBox1 thành Off (Tắt).
Trong thanh công thức, đặt thuộc tính DefaultSelectedItems của ComboBox1 thành ThisItem.'Product Reservation'.
Trong Gallery2, đặt thuộc tính OnSelect của NextArrow2 thành công thức sau:
Relate( ComboBox1.Selected.Reservations, ThisItem )
Khi người dùng chọn biểu tượng này, tùy chọn đặt trước hiện tại sẽ thay đổi thành sản phẩm mà người dùng đã chọn trong ComboBox1.
Nhấn F5 để kiểm tra ứng dụng ở chế độ Xem trước.
Với ứng dụng này, người dùng có thể di chuyển tùy chọn đặt trước từ sản phẩm này sang sản phẩm khác. Để đặt trước một sản phẩm, người dùng có thể chọn một sản phẩm khác trong ComboBox1, sau đó chọn NextArrow2 để thay đổi tùy chọn đặt trước.
Chức năng không liên quan
Hiện tại, bạn có thể chuyển mối quan hệ từ bản ghi này sang bản ghi khác, nhưng không thể xóa hoàn toàn mối quan hệ. Bạn có thể dùng hàm Unrelate để ngắt kết nối một bản ghi đặt trước khỏi sản phẩm bất kỳ.
Trên tab Dạng xem, chọn Nguồn dữ liệu.
Trong ngăn Data (Dữ liệu), hãy chọn Add data source (Thêm nguồn dữ liệu)>Microsoft Dataverse>Reservations (Đặt trước)>Connect (Kết nối).
Trong Gallery2, đặt công thức OnSelect của NextArrow2 thành công thức sau:
If( IsBlank( ComboBox1.Selected ), Unrelate( Gallery1.Selected.Reservations, ThisItem ), Relate( ComboBox1.Selected.Reservations, ThisItem ) ); Refresh( Reservations )
Sao chép Gallery2 vào bảng tạm bằng cách chọn mục này rồi nhấn Ctrl-C.
Dán bản sao của Gallery2 vào màn hình này bằng cách nhấn Ctrl-V, sau đó di chuyển bản sao này đến góc phần tư phía dưới bên phải của màn hình.
(tùy chọn) Nếu bạn đã thêm một nhãn ở trên Gallery2, hãy lặp lại 2 bước trước cho nhãn đó.
Nhớ đặt tên cho bản sao của Gallery2 là Gallery2_1 và sau đó đặt thuộc tính Items (Mục) thành công thức sau:
Filter( Reservations, IsBlank( 'Product Reservation' ) )
Một cảnh báo ủy nhiệm xuất hiện, nhưng sẽ không có vấn đề gì với lượng dữ liệu nhỏ trong ví dụ này.
Với những thay đổi này, người dùng có thể xóa lựa chọn trong ComboBox1 cho một người liên hệ nếu người đó không đặt trước sản phẩm. Những người liên hệ chưa đặt trước sản phẩm xuất hiện trong Gallery2_1, tại đây người dùng có thể chỉ định từng người liên hệ cho một sản phẩm.
Nhiều-nhiều
Tạo mối quan hệ nhiều - nhiều
Dữ liệu mẫu không bao gồm mối quan hệ nhiều-nhiều, nhưng bạn sẽ tạo một mối quan hệ giữa bảng Sản phẩm và bảng Danh bạ. Người dùng có thể liên kết từng sản phẩm với nhiều người liên hệ và từng người liên hệ với nhiều sản phẩm.
Từ trang này, chọn Dữ liệu trong thanh điều hướng bên trái, sau đó chọn Bảng.
Thay đổi bộ lọc bảng để bao gồm tất cả các bảng.
Theo mặc định, các bảng mẫu không xuất hiện.
Cuộn xuống, mở bảng Sản phẩm rồi chọn Mối quan hệ.
Chọn Add relationship (Thêm mối quan hệ)>Many-to-many (Nhiều-nhiều).
Chọn bảng Liên hệ cho mối quan hệ.
Chọn Xong>Lưu bảng.
Liên kết và hủy liên kết người liên hệ với một hoặc nhiều sản phẩm
Bạn sẽ tạo một ứng dụng khác giống với ứng dụng đã tạo trước đó trong chủ đề này, nhưng ứng dụng mới sẽ cung cấp mối quan hệ nhiều-nhiều. Mỗi người liên hệ sẽ có thể đặt trước nhiều sản phẩm, chứ không chỉ một sản phẩm.
Trong một ứng dụng trống của máy tính bảng, hãy tạo Gallery1 như mô tả ở quy trình đầu tiên trong chủ đề này.
Thêm một công cụ điều khiển Gallery (Thư viện) khác, đặt tên là Gallery2 rồi di chuyển thư viện này vào góc trên bên phải màn hình.
Ở phần sau trong chủ đề này, bạn sẽ thêm công cụ điều khiển Combo box trong mục Gallery2.
Trong thanh công thức, đặt thuộc tính Items (Mục) của Gallery2 thành Gallery1.Selected.Contacts.
Trên tab Properties (Thuộc tính), đặt Layout (Bố cục) thành Image and title (Hình ảnh và tiêu đề).
Trong Gallery2, đảm bảo đặt tên cho công cụ điều khiển Label là Title2 rồi đặt thuộc tính Văn bản thành ThisItem.'Full Name'.
Văn bản sẽ chỉ xuất hiện trong công cụ điều khiển đó khi bạn hoàn thành quy trình này và chỉ định người liên hệ cho sản phẩm.
Xóa NextArrow2, chèn biểu tượng Cancel (Hủy) rồi đặt tên cho biểu tượng này là icon1.
Đặt thuộc tính OnSelect của biểu tượng Cancel (Hủy) thành công thức sau:
Unrelate( Gallery1.Selected.Contacts, ThisItem )
Trên tab Dạng xem, chọn Nguồn dữ liệu.
Trong ngăn Data (Dữ liệu), hãy chọn Add data source (Thêm nguồn dữ liệu)>Microsoft Dataverse>Contacts (Người liên hệ)>Connect (Kết nối).
Trong phần Gallery2, thêm công cụ điều khiển Combo box rồi đặt tên là ComboBox1. Sau đó, đặt thuộc tính Items (Mục) thành Contacts (Người liên hệ).
Trên tab Properties (Thuộc tính), đặt Allow multiple selection (Cho phép nhiều lựa chọn) thành Off (Tắt).
Chèn biểu tượng Add (Thêm) rồi đặt thuộc tính OnSelect thành công thức sau:
Relate( Gallery1.Selected.Contacts, ComboBox1.Selected )
Với ứng dụng này, giờ đây người dùng có thể tự do liên kết và hủy liên kết nhóm người liên hệ với từng sản phẩm.
Để thêm người liên hệ cho sản phẩm, hãy chọn người liên hệ trong hộp tổ hợp ở cuối màn hình, sau đó chọn biểu tượng Add (Thêm).
Để xóa người liên hệ khỏi sản phẩm, hãy chọn biểu tượng Cancel (Hủy) cho người liên hệ đó.
Không giống như mối quan hệ một - nhiều, mối quan hệ nhiều-nhiều cho phép người dùng liên kết cùng một người liên hệ với nhiều sản phẩm.
Ngược lại: liên kết và không liên kết sản phẩm với nhiều người liên hệ
Mối quan hệ nhiều-nhiều mang tính đối xứng. Bạn có thể mở rộng mẫu để thêm các sản phẩm cho một người liên hệ rồi chuyển giữa hai màn hình để hiển thị mối quan hệ từ một trong hai hướng.
Đặt thuộc tính OnVisible (Hiển thị) của Screen1 (Màn hình 1) thành Refresh( Products ) (Làm mới (Sản phẩm)).
Khi bạn cập nhật mối quan hệ một-nhiều hoặc nhiều-nhiều, chỉ dữ liệu của bảng đối số đầu tiên của cuộc gọi Liên kết hoặc Hủy liên kết được làm mới. Bạn phải làm mới thủ công lệnh gọi thứ hai nếu muốn chuyển giữa các màn hình của ứng dụng này.
Sao chép Screen1.
Bản sao sẽ có tên là Screen1_1 và là cơ sở để xem xét các mối quan hệ từ phía người liên hệ.
Để tạo chế độ xem ngược, hãy thay đổi các công thức này cho công cụ điều khiển của Screen1_1:
- Screen1_1.OnVisible =
Refresh( Contacts )
- Gallery1_1.Items =
Contacts
- Title1_1.Text =
ThisItem.'Full Name'
- Label1_1.Text =
"Selected Contact Products"
- Gallery2_1.Items =
Gallery1_1.Selected.Products
- Title2_1.Text =
ThisItem.Name
- Icon1_1.OnSelect =
Unrelate( Gallery1_1.Selected.Products, ThisItem )
- ComboBox1_1.Items =
Products
- Icon2_1.OnSelect =
Relate( Gallery1_1.Selected.Products, ComboBox1_1.Selected )
Kết quả sẽ rất giống với màn hình trước nhưng tập liên quan đến mối quan hệ từ phía Contacts (Người liên hệ).
- Screen1_1.OnVisible =
Thêm biểu tượng Arrows up down rồi đặt thuộc tính OnSelect thành Navigate( Screen1, None ). Thực hiện tương tự với Screen1 thông qua công thức Navigate( Screen1_1, None ).
Với màn hình mới này, người dùng có thể thêm người liên hệ cho sản phẩm rồi chuyển sang chế độ xem người liên hệ và xem sản phẩm được liên kết. Các mối quan hệ mang tính đối xứng và được chia sẻ giữa 2 màn hình.