修改或建立資料來源中的一或多筆記錄,或合併資料來源外的記錄。

在複雜情況下,使用 Patch 函式來修改記錄,例如,當您執行的更新不需要使用者互動或使用跨多個畫面的表單時。

在較不複雜的情況下,您可以使用編輯表單控制項,更輕鬆地更新資料來源中的記錄。 當您新增編輯表單控制項時,會提供一張表單,供使用者填寫,然後將變更儲存至資料來源。 如需詳細資訊,請參閱了解資料表單

概觀

使用 Patch 函式來修改資料來源的一或多筆記錄。 會修改特定欄位的值,而不影響其他屬性。 例如,此公式會變更名為 Contoso 的客戶的電話號碼︰

Patch( Customers, First( Filter( Customers, Name = "Contoso" ) ), { Phone: “1-212-555-1234” } )

使用 PatchDefaults 函式來建立記錄。 使用此行為可建置單一畫面來建立和編輯記錄。 例如,此公式會建立名為 Contoso 的客戶的記錄:

Patch( Customers, Defaults( Customer ), { Name: “Contoso” } )

即使您不使用資料來源,也可以使用 Patch 合併兩筆或多筆記錄。 例如,此公式會將兩筆記錄合併為一筆記錄,以識別 Contoso 的電話號碼和位置:

Patch( { Name: "Contoso", Phone: “1-212-555-1234” }, { Name: "Contoso", Location: “Midtown” } )

說明

修改或建立資料來源中的記錄

若要使用此函式與資料來源,請指定資料來源,然後指定基底記錄︰

  • 若要修改一筆記錄,基底記錄必須來自資料來源。 基底記錄可能會通過資源庫的 Items 屬性、已放入內容變數,或透過其他的路徑。 但是,您應該能夠追蹤回資料來源的基底記錄。 這十分重要,因為該記錄將包含其他資訊以協助您再次找到要修改的記錄。

  • 若要建立一筆記錄,請使用 Defaults 函式來使用預設值建立基底記錄。

然後指定一或多筆變更記錄,其中每一筆皆包含在基底記錄中覆寫屬性值的新屬性值。 變更記錄會依引數清單開頭到結尾的順序處理,並以新的屬性值覆寫舊的屬性值。

Patch 的傳回值是您修改或建立的記錄。 如果您建立一筆記錄,傳回的值可能包含資料來源自動產生的屬性。

當您更新資料來源時,可能會發生一或多個問題。 使用 Errors 函式來識別及檢查問題,如使用資料來源所描述。

相關的功能包括 Update 函式,可用來取代整個記錄,以及 Collect 函式,可用來建立一筆記錄。 您可以使用 UpdateIf 函式,根據條件修改多筆記錄的特定屬性。

修改或建立資料來源中的一組記錄

Patch 也可用來建立或修改透過單一呼叫的多筆記錄。

可在第二個引數中提供基底記錄的資料表,而不是傳遞單一基底記錄。 還會在資料表中提供變更記錄,以基底記錄對應一對一。 每個變更資料表中的記錄數目必須與基底資料表中的記錄數目相同。

以這種方式使用 Patch 時,傳回值也是包含每個記錄對應一對一與基底和變更記錄的資料表。

合併資料來源外部的記錄

指定您想要合併的兩筆或多筆記錄。 記錄會依引數清單開頭到結尾的順序處理,並以新的屬性值覆寫舊的屬性值。

Patch 會傳回合併的記錄,且不會修改其引數或任何資料來源中的記錄。

語法

修改或建立資料來源中的記錄

Patch( DataSource, BaseRecord, ChangeRecord1 [, ChangeRecord2, … ])

  • DataSource – 必要項目。 包含您想要修改之記錄或將包含您想要建立之記錄的資料來源。

  • BaseRecord – 必要項目。 要修改或建立的記錄。 如果記錄來自資料來源,則已找到並修改記錄。 如果使用了 Defaults 的結果,會建立記錄。

  • ChangeRecord(s) – 必要項目。 包含要在 BaseRecord中修改之屬性的一或多筆記錄。 變更記錄會依引數清單開頭到結尾的順序處理,並以新的屬性值覆寫舊的屬性值。

修改或建立資料來源中的一組記錄

Patch( DataSource, BaseRecordsTable, ChageRecordTable1, [, ChangeRecordTable2, … ] )

  • DataSource – 必要項目。 包含您想要修改之記錄或將包含您想要建立之記錄的資料來源。

  • BaseRecordTable – 必要項目。 要修改或建立的記錄資料表。 如果記錄來自資料來源,則已找到並修改記錄。 如果使用了 Defaults 的結果,會建立記錄。

  • ChangeRecordTable(s) – 必要項目。 包含要針對 BaseRecordTable 的每一筆記錄修改之屬性的一個或多個記錄資料表。 變更記錄會依引數清單開頭到結尾的順序處理,並以新的屬性值覆寫舊的屬性值。

合併記錄

Patch( Record1, Record2 [, …] )

  • Record(s) - 必要項目。 至少兩筆您想要合併的記錄。 記錄會依引數清單開頭到結尾的順序處理,並以新的屬性值覆寫舊的屬性值。

範例

修改或建立記錄 (在資料來源中)

在這些範例中,您會修改或建立資料來源中的記錄,名為 IceCream,其中包含在此資料表中的資料,並在識別碼資料行中自動產生值:

公式 說明 結果
Patch( IceCream,
First( Filter( IceCream, Flavor = "Chocolate" ) ), { Quantity: 400 } )
修改 IceCream 資料來源中的記錄︰
  • 要修改之記錄的識別碼資料行包含值 1。 (Chocolate 記錄具有該識別碼。)
  • 數量資料行中的值會變更為 400
{ ID: 1, Flavor: "Chocolate", Quantity: 400 }

IceCream 資料來源中的 Chocolate 項目已修改。
Patch( IceCream, Defaults( IceCream ), { Flavor: “Strawberry” } ) 建立 IceCream 資料來源中的記錄︰
  • 識別碼資料行包含資料來源自動產生的值 3
  • 數量資料行包含 0,這在 IceCream 資料來源中為該資料行的預設值,做為 Defaults 函式所指定。
  • Flavor 資料行包含值 Strawberry
{ ID: 3, Flavor: “Strawberry”, Quantity: 0 }

IceCream 資料來源中的 Strawberry 項目已建立。

在上述公式進行評估之後,資料來源最後會顯示這些值︰

合併資料 (資料來源的外部)

公式 說明 結果
Patch( { Name: "James", Score: 90 }, { Name: "Jim", Passed: true } ) 合併資料來源外部的兩筆資料:
  • 每一筆記錄的名稱資料行中的值不相符。 結果包含較接近引數清單結尾記錄中的值 (Jim),而不是較接近開始記錄中的值 (James)。
  • 第一筆記錄包含的資料行 (Score) 不存在於第二筆記錄。 結果會包含該資料行與其值 (90)。
  • 第二筆記錄包含的資料行 (Passed) 不存在於第一筆記錄。 結果會包含該資料行與其值 (true)。
{ Name: "Jim", Score: 90, Passed: true }