Relate 和 Unrelate 函式
適用於: 畫布應用程式
模型導向應用程式
透過一對多或多對多關聯性建立兩個資料表的 Relate 和 Unrelate 記錄。
描述
在 Microsoft Dataverse 中透過一對多或多對多關聯性使用 Relate 函式連接兩個記錄。 Unrelate 函式會顛倒過程並移除連結。
在一對多關聯中,Many 資料表具有指向 One 資料表記錄的外部索引鍵欄位。 Relate將此欄位設為指向 One 資料表的特定記錄,而 Unrelate 會將此欄位設為空白。 如果在呼叫 Relate 時已設定該欄位,則會失去現有的連結,由新連結取而代之。 您也可以使用 Patch 函式或 Edit form 控制項來設定此欄位;您不需要使用Relate 函式。
如果是多對多關聯,則連結這些記錄的系統會維持隱藏的聯合資料表。 您無法直接存取此聯結資料表;它只能透過一對多投影進行讀取,並透過 Relate 和 Unrelate 函式來設定。 相關資料表都不具有外部索引鍵。
您在第一個引數中指定之資料表的資料會重新整理,以反映變更,但您在第二個引數中指定的資料表資料將不會發生變化。 必須使用 Refresh 函式手動重新整理該資料才能顯示運算結果。
這些函式永遠不會建立或刪除記錄。 它們只會建立關聯或取消關聯兩個已存在的記錄。
您可以只在 行為公式 內使用這些函式。
Note
這些函式是預覽功能的一部分,而且只有在啟用 Relational data, option sets, and other new features for CDS 功能時才可以使用它們的行為。 這是預設會針對新的應用程式啟用的應用程式層級設定。 若要找到此功能開關,請選取設定,然後選取即將推出的功能。 您的意見反應對我們而言至關重要,請告訴我們您對 Power Apps 社群論壇的想法。
語法
Relate(Table1RelatedTable、Table2Record)
- Table1RelatedTable - 必要。 對於 Table1 的記錄,Table2 的資料表記錄透過一對多或多對多關聯相關聯。
- Table2Record - 必要。 要新增至關聯的 Table2 記錄。
Unrelate(Table1RelatedTable、Table2Record)
- Table1RelatedTable - 必要。 對於 Table1 的記錄,Table2 的資料表記錄透過一對多或多對多關聯相關聯。
- Table2Record - 必要。 從關聯移除的 Table2 記錄。
範例
考慮具有以下關聯的產品資料表,如 Power Apps 入口網站的資料表檢視器所示:
關聯顯示名稱 | 相關資料表 | 關聯性類型 |
---|---|---|
產品預留 | 保留 | 一對多 |
產品 ↔ 聯絡人 | 連絡人 | 多對多 |
Products 和 Reservations 是透過一對多關聯所相關。 若要將保留資料表的第一筆記錄與產品資料表的第一筆記錄相關聯,請執行以下動作:
Relate( First( Products ).Reservations, First( Reservations ) )
若要移除這些記錄之間的關聯:
Unrelate( First( Products ).Reservations, First( Reservations ) )
只要我們建立或移除記錄,就只會修改記錄之間的關聯。
Products 和 Contacts 是透過多對多關聯所相關。 若要將連絡人資料表的第一筆記錄與產品資料表的第一筆記錄相關聯,請執行以下動作:
Relate( First( Products ).Contacts, First( Contacts ) )
因為多對多關聯都是對稱的,所以我們也可在相反方向執行此動作:
Relate( First( Contacts ).Products, First( Products ) )
若要移除這些記錄之間的關聯:
Unrelate( First( Products ).Contacts, First( Contacts ) )
or:
Unrelate( First( Contacts ).Products, First( Products ) )
接下來的逐步說明會使用具有Gallery和Combo box控制項的應用程式,對這些資料表執行這些作業,以選擇所涉及的記錄。
這些範例是根據您環境中安裝的範例資料而定。 建立包括範例資料的試用環境 或 將範例資料新增至現有的環境。
一對多
Relate 函式
您會先建立一個簡單的應用程式,以檢視和重新指派與產品相關聯的保留。
建立 空白的平板電腦應用程式。
在檢視表索引標籤上,選取資料來源。
在資料窗格中,選取新增資料 > 選取產品。
「產品」資料表是上述載入範例資料的一部分。在Insert 索引標籤上,新增具有空白垂直 Gallery 控制項。
確保剛剛新增的控制項已命名為 Gallery1 ,然後移動該控制項並調整它的大小,以填充畫面的左側。
在 Properties 索引標籤上 ,將 Gallery1 的 Items 屬性設為 Products,並將其 Layout 為 Image and title。
在 Gallery1 中,確定 Label 控制項的名稱為 Title1,然後將其Text屬性設為 ThisItem.Name。
選取畫面,避免將下一項插入 Gallery1。 新增第二個空白垂直 Gallery 控制項,並確定它已命名為 Gallery2。
Gallery2 將會顯示使用者在 Gallery1 中所選的任何產品的預留空間。
移動和調整 Gallery2 大小以填充畫面的右上象限。
(非必要) 在 Gallery2 控制項上方新增藍色標籤 Label 控制項,如下一個圖形所示。
在公式列中,將 Gallery2 的 Items 屬性設為 Gallery1.Selected.Reservations。
在屬性窗格中,將 Gallery2 的控制項的 Layout 設為 Title。
在 Gallery2 中,新增一個 Combo box 控制項,確保它已命名為 ComboBox1,然後移動該控制項並調整其大小,避免封鎖 Gallery2 中的其他控制項。
在 Properties 索引標籤上,將 ComboBox1 的 Items 屬性設為 Products。
在 Properties 索引標籤中向下捲動,並將 ComboBox1 的 Allow multiple selection 屬性設為 Off。
在公式列中,將 ComboBox1的 DefaultSelectedItems 屬性設為 ThisItem.'Product Reservation'。
在 Gallery2 中,將 NextArrow2 的 OnSelect 屬性設為此公式:
Relate( ComboBox1.Selected.Reservations, ThisItem )
當使用者選取此圖示時,目前的保留變更為使用者在 ComboBox1 中選取的產品。
在預覽模式中按 F5 測試應用程式。
透過此應用程式,使用者可以將保留從一個產品移至另一個產品。 如果是某個產品的保留,使用者可以在 ComboBox1 中選取不同的產品,然後選取 NextArrow2 來變更該保留。
Unrelate 函式
此時,您可以將關聯從一個記錄移至另一個記錄,但是不能移除完全關聯。 您可以使用 Unrelate函式,從任何產品斷開保留記錄。
在 View 索引標籤上,選取 Data sources。
在 Data 窗格中,選取 Add data source>Microsoft Dataverse>Reservations>Connect。
在 Gallery2 中,將 NextArrow2 的 OnSelect 公式設為此公式:
If( IsBlank( ComboBox1.Selected ), Unrelate( Gallery1.Selected.Reservations, ThisItem ), Relate( ComboBox1.Selected.Reservations, ThisItem ) ); Refresh( Reservations )
選取下列公式,然後按下 Ctrl-C,將 Gallery2 複製到剪貼簿。
按下 Ctrl-V 將 Gallery2 的重複資料黏貼到相同畫面,然後將它移至畫面右下部的象限。
(非必要) 如果您在 Gallery2上新增標籤,請針對該標籤重複前兩個步驟。
請確定 Gallery2 的複本已命名 Gallery2_1,然後將其 Items 屬性設定為此公式:
Filter( Reservations, IsBlank( 'Product Reservation' ) )
將會顯示委派警告,但在此範例中並不會考慮少量的資料。
有了這些變更,使用者就可以在 ComboBox1 中清除連絡人的選擇 (如果該人尚未保留產品)。 未預訂產品的連絡人會顯示在 Gallery2_1 中,使用者可將每個連絡人指派給產品。
多對多
建立多對多關聯
範例資料不包含多對多關聯,但您會在「產品」資料表與「連絡人」資料表之間建立一個關聯。 使用者可將每一種產品關聯至多個連絡人,並將每個連絡人關聯至一個以上的產品。
在此頁面中,選取左側瀏覽列中的資料,然後選取資料表。
變更資料表篩選以包括所有資料表。
根據預設,不會顯示範例資料表。
向下捲動,開啟產品資料表,然後選取關聯。
選取 Add relationship>Many-to-many。
選取關聯的連絡人資料表。
選取完成>儲存資料表。
將連絡人與一或多個產品建立關聯和取消關聯
您將建立另一個類似於本主題先前建立的應用程式,但是新的應用程式將提供多對多關聯。 每一個連絡人都可以保留多個產品,而不只是一個。
在平板電腦空白應用程式中,建立 Gallery1 做為本主題描述的 第一個程序。
新增另一個空白垂直 Gallery 控制項,確定它已命名為 Gallery2,然後將它移至畫面的右上角。
稍後在此主題中,您將在 Gallery2 下新增一個 Combo box 控制項。
在公式列中,將 Gallery2 的 Items 屬性設為 Gallery1.Selected.Contacts。
在 Properties 索引標籤上,將 Layout 設定為 Image and title。
在 Gallery2 中,確定 Label 控制項的名稱為 Title2,然後將其Text屬性設為 ThisItem.Name。
直到您完成此程式並將連絡人指派給產品,才會顯示該控制項中的文字。
刪除 NextArrow2,插入 Cancel 圖示,並確定它已命名為 icon1。
將 Cancel 圖示的 OnSelect 屬性設為此公式:
Unrelate( Gallery1.Selected.Contacts, ThisItem )
在 View 索引標籤上,選取 Data sources。
在 Data 窗格中,選取 Add data source>Microsoft Dataverse>Contacts>Connect。
在Gallery2底下,新增一個 Combo box控制項,確定它已命名為 ComboBox1,然後將其 Items 屬性設定為 Contacts。
在 Properties 索引標籤上,將 Allow multiple selection 設定為 Off。
插入 Add 圖示,並將其 OnSelect 屬性設定為以下公式:
Relate( Gallery1.Selected.Contacts, ComboBox1.Selected )
透過此應用程式,使用者現在可以將一組連絡人自由建立關聯並取消關聯到每個產品。
若要將連絡人新增至產品,請在畫面底部的組合方塊中選取連絡人,然後選取 Add 圖示。
若要從產品中移除連絡人,請選取該連絡人的 Cancel 圖示。
不像一對多、多對多關聯可讓使用者將相同的連絡人與多個產品關聯。
相反:使用多個連絡人與產品建立關聯和取消關聯
多對多關聯是對稱的。 您可以擴充範例,以將產品新增至連絡人,然後在兩個畫面之間翻轉,以顯示這兩個方向間的關聯顯示方式。
將 Screen1 的 OnVisible 屬性設為 Refresh( Products )。
當您更新一對多或多對多關聯時,只會重新整理 Relate 或 Unrelate 呼叫的第一個引數資料表的資料。 如果您想要在此應用程式的畫面之間翻過來,必須手動更新第二個。
重複 Screen1。
重複資料會命名為 Screen1_1,而形成從聯絡人側看關聯的基礎。
若要建立反向查看,請在 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 )
結果看起來與先前的畫面非常類似,但會出現在來自 Contacts 側的關聯。
- Screen1_1.OnVisible =
插入 Arrows up down 圖示,並將其 OnSelect 屬性設定為 Navigate( Screen1, None )。 使用公式 Navigate( Screen1_1, None ),在 Screen1上執行相同的動作。
透過這個新的畫面,使用者可以新增連絡人至產品,然後翻到連絡人的視圖,並查看相關的產品。 關聯在兩個畫面之間對稱並共用。