PowerApps의 Patch 함수Patch function in PowerApps

데이터 원본레코드를 하나 이상 수정 또는 생성하거나 데이터 원본 외부의 레코드를 병합합니다.Modifies or creates one or more records in a data source, or merges records outside of a data source.

Patch 함수를 사용하여 복잡한 상황(예: 사용자 상호 작용이 필요하지 않거나 여러 화면에 걸쳐 있는 양식을 사용하는 업데이트를 수행하는 경우)의 레코드를 수정합니다.Use the Patch function to modify records in complex situations, such as when you perform updates that require no user interaction or use forms that span multiple screens.

덜 복잡한 상황에서는 편집 양식 컨트롤을 사용하여 데이터 원본의 레코드를 보다 쉽게 업데이트할 수 있습니다.In less complex situations, you can use the Edit form control to update records in a data source more easily. 편집 양식 컨트롤을 추가하면 사용자에게 양식을 제공하여 채운 다음 데이터 원본에 변경 내용을 저장합니다.When you add an Edit form control, you provide users with a form to fill in and then save the changes to a data source. 자세한 내용은 데이터 폼 이해를 참조하세요.For more information, see Understand data forms.

개요Overview

데이터 원본의 레코드를 하나 이상 수정하려면 Patch 함수를 사용합니다.Use the Patch function to modify one or more records of a data source. 특정 필드의 값은 다른 속성에 영향을 주지 않고 수정됩니다.The values of specific fields are modified without affecting other properties. 예를 들어 다음 수식은 Contoso라는 고객의 전화 번호를 변경합니다.For example, this formula changes the phone number for a customer named Contoso:

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

레코드를 생성하려면 PatchDefaults 함수와 함께 사용합니다.Use Patch with the Defaults function to create records. 이 동작을 사용하여 레코드를 만들고 편집할 수 있는 단일 화면을 만듭니다.Use this behavior to build a single screen for both creating and editing records. 예를 들어 다음 수식은 Contoso라는 고객의 레코드를 만듭니다.For example, this formula creates a record for a customer named Contoso:

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

데이터 원본으로 작업하지 않더라도 Patch를 사용하여 둘 이상의 레코드를 병합할 수 있습니다.Even if you're not working with a data source, you can use Patch to merge two or more records. 예를 들어 다음 수식은 Contoso의 전화 번호와 위치를 식별하는 두 개의 레코드를 하나로 병합합니다.For example, this formula merges two records into one that identifies both the phone number and the location for Contoso:

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

설명Description

데이터 원본의 레코드 수정 또는 만들기Modify or create a record in a data source

이 함수를 데이터 원본과 함께 사용하려면 데이터 원본을 지정한 다음 기본 레코드를 지정합니다.To use this function with a data source, specify the data source, and then specify a base record:

  • 레코드를 수정하려면 데이터 원본에서 기본 레코드를 가져와야 합니다.To modify a record, the base record needs to have come from a data source. 기본 레코드는 갤러리의 Items 속성을 통해 오거나 컨텍스트 변수에 있거나 다른 경로를 통해 올 수 있습니다.The base record may have come through a gallery's Items property, been placed in a context variable, or come through some other path. 다만, 기본 레코드를 데이터 원본으로 다시 추적할 수 있어야 합니다.But you should be able to trace the base record back to the data source. 레코드에는 수정을 위해 다시 레코드를 찾는 데 도움이 되는 추가 정보가 포함되기 때문에 중요합니다.This is important as the record will include additional information to help find the record again for modification.
  • 레코드를 만들려면 Defaults 함수를 사용하여 기본값으로 기본 레코드를 만듭니다.To create a record, use the Defaults function to create a base record with default values.

그런 다음 기본 레코드의 속성 값을 재정의하는 새 속성이 포함된 변경 레코드를 하나 이상 지정합니다.Then specify one or more change records, each of which contains new property values that override property values in the base record. 변경 레코드는 인수 목록의 처음부터 끝까지 순서대로 처리되며, 이후 속성 값이 이전 속성 값보다 우선합니다.Change records are processed in order from the beginning of the argument list to the end, with later property values overriding earlier ones.

Patch의 반환 값은 사용자가 수정하거나 만든 레코드입니다.The return value of Patch is the record that you modified or created. 레코드를 만든 경우, 반환 값에는 데이터 원본이 자동으로 생성한 속성이 포함될 수 있습니다.If you created a record, the return value may include properties that the data source generated automatically.

데이터 원본을 업데이트할 때 하나 이상의 문제가 발생할 수 있습니다.When you update a data source, one or more issues may arise. Errors 함수를 사용하여 데이터 원본 작업의 설명과 같이 문제를 식별하고 검사합니다.Use the Errors function to identify and examine issues, as Working with Data Sources describes.

관련 함수에는 전체 레코드를 바꾸는 데 사용할 수 있는 Update 함수와 레코드를 만드는 데 사용할 수 있는 Collect 함수가 있습니다.Related functions include the Update function, which you can use to replace an entire record, and the Collect function, which you can use to create a record. UpdateIf 함수를 사용하여 조건에 따라 여러 레코드의 특정 속성을 수정할 수 있습니다.You can use the UpdateIf function to modify specific properties of multiple records based on a condition.

데이터 원본의 레코드 집합 수정 또는 만들기Modify or create a set of records in a data source

Patch를 사용하면 단일 호출로 여러 레코드를 만들거나 수정할 수 있습니다.Patch can also be used to create or modify multiple records with a single call.

단일 기본 레코드를 전달하는 대신 기본 레코드 테이블을 두 번째 인수에 제공할 수 있습니다.Instead of passing a single base record, a table of base records can be provided in the second argument. 변경 기록은 테이블에도 제공되며, 기본 레코드와 일대일 대응합니다.Change records are provided in a table as well, corresponding one-for-one with the base records. 각 변경 테이블의 레코드 수는 기본 테이블의 레코드 수와 동일해야 합니다.The number of records in each change table must be the same as the number of records in the base table.

이 방식으로 Patch를 사용하는 경우 반환 값 역시 기본 레코드와 변경 레코드가 일대일 대응하는 레코드가 있는 테이블입니다.When using Patch in this manner, the return value is also a table with each record corresponding one-for-one with the base and change records.

데이터 원본 외부에서 레코드 병합Merge records outside of a data source

병합할 둘 이상의 레코드를 지정합니다.Specify two or more records that you want to merge. 레코드는 인수 목록의 처음부터 끝까지 순서대로 처리되며, 이후 속성 값이 이전 속성 값보다 우선합니다.Records are processed in order from the beginning of the argument list to the end, with later property values overriding earlier ones.

Patch는 병합된 레코드를 반환하고 데이터 원본의 인수 또는 레코드를 수정하지는 않습니다.Patch returns the merged record and doesn't modify its arguments or records in any data sources.

구문Syntax

데이터 원본의 레코드 수정 또는 만들기Modify or create a record in a data source

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

  • DataSource – 필수 항목입니다.DataSource – Required. 수정할 레코드를 포함하거나 만들려는 레코드가 포함될 데이터 원본입니다.The data source that contains the record that you want to modify or will contain the record that you want to create.
  • BaseRecord – 필수 항목입니다.BaseRecord – Required. 수정하거나 만들 레코드입니다.The record to modify or create. 데이터 원본에서 레코드를 받으면 레코드가 발견되고 수정됩니다.If the record came from a data source, the record is found and modified. Defaults의 결과가 사용되면 레코드가 생성됩니다.If the result of Defaults is used, a record is created.
  • ChangeRecord(s) – 필수 항목입니다.ChangeRecord(s) – Required. BaseRecord에서 수정할 속성이 포함된 하나 이상의 레코드입니다.One or more records that contain properties to modify in the BaseRecord. 변경 레코드는 인수 목록의 처음부터 끝까지 순서대로 처리되며, 이후 속성 값이 이전 속성 값보다 우선합니다.Change records are processed in order from the beginning of the argument list to the end, with later property values overriding earlier ones.

데이터 원본의 레코드 집합 수정 또는 만들기Modify or create a set of records in a data source

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

  • DataSource – 필수 항목입니다.DataSource – Required. 수정할 레코드를 포함하거나 만들려는 레코드가 포함될 데이터 원본입니다.The data source that contains the records that you want to modify or will contain the records that you want to create.
  • BaseRecordTable – 필수 항목입니다.BaseRecordTable – Required. 수정하거나 만들 레코드 테이블입니다.A table of records to modify or create. 데이터 원본에서 레코드를 받으면 레코드가 발견되고 수정됩니다.If the record came from a data source, the record is found and modified. Defaults의 결과가 사용되면 레코드가 생성됩니다.If the result of Defaults is used, a record is created.
  • ChangeRecordTable(s) – 필수 항목입니다.ChangeRecordTable(s) – Required. BaseRecordTable의 각 레코드에 대해 수정할 속성이 포함된 하나 이상의 레코드 테이블입니다.One or more tables of records that contain properties to modify for each record of the BaseRecordTable. 변경 레코드는 인수 목록의 처음부터 끝까지 순서대로 처리되며, 이후 속성 값이 이전 속성 값보다 우선합니다.Change records are processed in order from the beginning of the argument list to the end, with later property values overriding earlier ones.

레코드 병합Merge records

Patch( Record1, Record2 [, …] )Patch( Record1, Record2 [, …] )

  • Record(s) - 필수 항목입니다.Record(s) - Required. 병합할 둘 이상의 레코드입니다.At least two records that you want to merge. 레코드는 인수 목록의 처음부터 끝까지 순서대로 처리되며, 이후 속성 값이 이전 속성 값보다 우선합니다.Records are processed in order from the beginning of the argument list to the end, with later property values overriding earlier ones.

Examples

레코드 수정 또는 만들기(데이터 원본 내부)Modify or create a record (in a data source)

이 예제에서는 다음 테이블의 데이터를 포함하는 IceCream이라는 데이터 원본에서 레코드를 수정하거나 생성하고 ID 에 값을 자동으로 생성합니다.In these examples, you'll modify or create a record in a data source, named IceCream, that contains the data in this table and automatically generates the values in the ID column:

수식Formula 설명Description 결과Result
Patch( IceCream,
First( Filter( IceCream, Flavor = "Chocolate" ) ), { Quantity: 400 } )
Patch( IceCream,
First( Filter( IceCream, Flavor = "Chocolate" ) ), { Quantity: 400 } )
IceCream 데이터 원본의 레코드를 수정합니다.Modifies a record in the IceCream data source:
  • 수정할 레코드의 ID 열에는 값 1이 포함됩니다.The ID column of the record to modify contains the value of 1. (Chocolate 레코드가 이 ID를 갖습니다.)(The Chocolate record has that ID.)
  • Quantity 열의 값이 400으로 변경됩니다.The value in the Quantity column changes to 400.
{ ID: 1, Flavor: "Chocolate", Quantity: 400 }{ ID: 1, Flavor: "Chocolate", Quantity: 400 }

IceCream 데이터 원본의 Chocolate 항목이 수정되었습니다.The Chocolate entry in the IceCream data source has been modified.
Patch( IceCream, Defaults( IceCream ), { Flavor: “Strawberry” } )Patch( IceCream, Defaults( IceCream ), { Flavor: “Strawberry” } ) IceCream 데이터 원본에 레코드를 만듭니다.Creates a record in the IceCream data source:
  • ID 열에는 데이터 원본이 자동으로 생성한 값 3이 있습니다.The ID column contains the value 3, which the data source generates automatically.
  • Quantity 열에는 Defaults 함수가 지정한 대로 IceCream 데이터 원본의 해당 열에 대한 기본값인 0이 있습니다.The Quantity column contains 0, which is the default value for that column in the IceCream data source, as the Defaults function specifies.
  • Flavor 열에는 Strawberry라는 값이 있습니다.The Flavor column contains the value of Strawberry.
{ ID: 3, Flavor: “Strawberry”, Quantity: 0 }{ ID: 3, Flavor: “Strawberry”, Quantity: 0 }

IceCream 데이터 원본에 Strawberry 항목이 생성되었습니다.The Strawberry entry in the IceCream data source has been created.

이전 수식이 계산된 후 데이터 원본은 다음 값으로 끝납니다.After the previous formulas have been evaluated, the data source ends with these values:

레코드 병합(데이터 원본 외부)Merge records (outside of a data source)

수식Formula 설명Description 결과Result
Patch( { Name: "James", Score: 90 }, { Name: "Jim", Passed: true } )Patch( { Name: "James", Score: 90 }, { Name: "Jim", Passed: true } ) 데이터 원본 외부의 두 레코드를 병합합니다.Merges two records outside of a data source:
  • 각 레코드의 Name 열 값은 일치하지 않습니다.The values in the Name column of each record don't match. 결과에는 인수 목록의 시작에 더 가까운 레코드의 값(James) 대신 인수 목록의 끝에 더 가까운 레코드의 값(Jim)이 포함됩니다.The result contains the value (Jim) in the record that's closer to the end of the argument list instead of the value (James) in the record that's closer to the start.
  • 첫 번째 레코드에 두 번째 레코드에 없는 열(Score)이 포함되어 있습니다.The first record contains a column (Score) that doesn't exist in the second record. 결과에는 이 열이 해당하는 값(90)과 함께 포함됩니다.The result contains that column with its value (90).
  • 두 번째 레코드에 첫 번째 레코드에 없는 열(Passed)이 포함되어 있습니다.The second record contains a column (Passed) that doesn't exist in the first record. 결과에는 이 열이 해당하는 값(true)과 함께 포함됩니다.The result contains that column with its value (true).
{ Name: "Jim", Score: 90, Passed: true }{ Name: "Jim", Score: 90, Passed: true }