Función Patch en Power Apps

Modifica ou crea un ou varios rexistros nunha orixe de datos ou fusiona rexistros fóra dunha orixe de datos.

Use a función Patch para modificar rexistros en situacións complexas. Por exemplo, cando fai actualizacións que non requiren interacción do usuario ou utiliza formularios que abranguen varias pantallas.

Para actualizar rexistros nunha orixe de datos máis facilmente para cambios sinxelos, use o control Editar formulario no seu lugar. Cando engade un control Editar formulario, proporcionas aos usuarios un formulario para cubrir e logo gardar os cambios nunha orixe de datos. Para obter máis información, consulte Comprender os formularios de datos.

Visión xeral

Use a función Patch para modificar un ou máis rexistros dunha orixe de datos. Os valores de campos específicos modifícanse sen afectar a outras propiedades. Por exemplo, esta fórmula cambia o número de teléfono dun cliente chamado Contoso:

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

Use Patch coa función Defaults para crear rexistros. Use este comportamento para crear unha pantalla única para crear e editar rexistros. Por exemplo, esta fórmula crea un rexisrto para un cliente chamado Contoso:

Patch( Customers, Defaults( Customers ), { Name: "Contoso" } )

Mesmo se non está a traballar cunha orixe de datos, pode usar Patch para fusionar dous ou máis rexistros. Por exemplo, esta fórmula fusiona dous rexistros nun que identifica tanto o número de teléfono como a localización de Contoso:

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

Descripción

Modificar ou crear un rexistro nunha orixe de datos

Para usar esta función cunha orixe de datos, especifique a orixe de datos e, a continuación, especifique un rexistro base:

  • Para modificar un rexistro, o rexistro base debe proceder dunha orixe de datos. O rexistro de base puido pasar pola propiedade Elementos dunha galería, ser colocado nunha variable de contexto ou pasar por algún outro camiño. Pero pode rastrexar o rexistro base ata a orixe de datos. Isto é importante, xa que o rexistro incluirá información adicional para axudar a atopar o rexistro de novo para a súa modificación.
  • Para crear un rexistro, use a función Defaults para crear un rexistro base con valores predeterminados.

A continuación, especifique un ou varios rexistros de cambios, cada un dos cales contén novos valores de propiedade que anulan os valores da propiedade no rexistro base. Os rexistros de cambios son procesados en orde dende o comezo da lista de argumentos ata o final, os valores de propiedades posteriores anulan aos anteriores.

O valor de retorno de Patch é o rexistro que modificou ou creou. Se creou un rexistro, o valor de devolución pode incluír propiedades que o orixe de datos xerou automaticamente. Non obstante, o valor de devolución non proporciona un valor para os campos dunha entidade relacionada.

Por exemplo, vostede usa Set(MyAccount, Patch(Accounts, First(Account), 'Account Name': "Example name"); e logo MyAccount.'Primary Contact'.'Full Name'. Non pode obter un nome completo neste caso. Pola contra, para acceder aos campos dunha entidade relacionada, use unha busca separada como:

LookUp(Accounts, Account = MyAccount.Account).'Primary Contact'.'Full Name'

Cando actualice un haorixe de datos, pode aparecer un ou varios problemas. Use a función Errors para identificar e examinar cuestións, como Traballar con fontes de datos describe.

As funcións relacionadas inclúen a función Update para substituír un rexistro enteiro e a función Collect para crear un rexistro. Use a función UpdateIf para modificar propiedades específicas de varios rexistros en función dunha condición.

Modificar ou crear un conxunto de rexistros nunha orixe de datos

Patch tamén se pode usar para crear ou modificar varios rexistros cunha única chamada.

En lugar de pasar un único rexistro base, pódese proporcionar unha táboa de rexistros base no segundo argumento. Os rexistros de cambios tamén se indican nunha táboa, correspondendo un por un cos rexistros base. O número de rexistros en cada táboa de cambios debe ser o mesmo que o número de rexistros na táboa base.

Ao usar Patch deste xeito, o valor de retorno tamén é unha táboa con cada rexistro correspondente un por un cos rexistros base e de cambios.

Combinar rexistros fóra dunha orixe de datos

Especifique dous ou máis rexistros que desexa fusionar. Os rexistros son procesados en orde dende o comezo da lista de argumentos ata o final, os valores de propiedades posteriores anulan aos anteriores.

Patch devolve o rexistro fusionado e non modifica os seus argumentos ou rexistros en ningunha fonte de datos.

Sintaxe

Modificar ou crear un rexistro nunha orixe de datos

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

  • DataSource: necesario. A orixe de datos que contén o rexistro que desexa modificar ou conterá o rexistro que desexa crear.
  • BaseRecord: Obrigatorio. O rexistro que se vai modificar ou crear. Se o rexistro procedía dunha orixe de datos, o rexistro é atopado e modificado. Se o resultado de Defaults se usa, créase un rexistro.
  • ChangeRecord: Obrigatorio. Un ou máis rexistros que conteñen propiedades para modificar no BaseRecord. Os rexistros de cambios son procesados en orde dende o comezo da lista de argumentos ata o final, os valores de propiedades posteriores anulan aos anteriores.

Modificar ou crear un conxunto de rexistros nunha orixe de datos

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

  • DataSource: necesario. A orixe de datos que contén os rexistros que desexa modificar ou conterá os rexistros que desexa crear.
  • BaseRecordTable: Obrigatorio. Unha táboa de rexistros para modificar ou crear. Se o rexistro procedía dunha orixe de datos, o rexistro é atopado e modificado. Se o resultado de Defaults se usa, créase un rexistro.
  • ChangeRecordTable(s): Obrigatorio. Unha ou varias táboas de rexistros que conteñen propiedades que se vab modificar para cada rexistro de BaseRecordTable. Os rexistros de cambios son procesados en orde dende o comezo da lista de argumentos ata o final, os valores de propiedades posteriores anulan aos anteriores.

Combinar rexistros

Patch( Record1, Record2 [, …] )

  • Record(s): Obrigatorio. Seleccione polo menos dous rexistros que desexe combinar. Os rexistros son procesados en orde dende o comezo da lista de argumentos ata o final, os valores de propiedades posteriores anulan aos anteriores.

Exemplos

Modificar ou crear un rexistro (nunha orixe de datos)

Nestes exemplos, modificará ou creará un rexistro nunha orixe de datos, chamada IceCream, que contén os datos desta táboa e xera automaticamente os valores na columna ID:

Xeado de exemplo

Fórmula Descripción Resultado
Parche( Xeado
Busca (Xeado, Sabor = "Chocolate"), { Cantidade: 400 } )
Modifica un rexistro na orixe de datos IceCream:
  • A columna ID do rexistro para modificar contén o valor de 1. (O rexistro Chocolate ten ese ID.)
  • O valor na columna Quantity cambia a 400.
{ ID: 1, Flavor: "Chocolate", Quantity: 400 }

A entrada Chocolate na orixe de datos IceCream modificouse.
Patch( IceCream, Defaults( IceCream ), { Flavor: "Strawberry" } ) Crea un rexistro na orixe de datos IceCream:
  • A columna ID contén o valor 3, que a orixe de datos xera automaticamente.
  • A columna Quantity contén 0, que é o valor predeterminado para esa columna na orixe de datos IceCream, como a función Defaults especifica.
  • A columna Flavor contén o valor de Strawberry.
{ ID: 3, Flavor: "Strawberry", Quantity: 0 }

A entrada Strawberry na orixe de datos IceCream creouse.

Despois de avaliar as fórmulas anteriores, a orixe de datos remata con estes valores:

Xeado de exemplo despois de

Combinar rexistros (fóra dunha orixe de datos)

Fórmula Descripción Resultado
Patch( { Name: "James", Score: 90 }, { Name: "Jim", Passed: true } ) Combina dous rexistros fóra dunha orixe de datos:
  • Os valores da columna Name de cada rexistro non coinciden. O resultado contén o valor (Jim) no rexistro que está máis preto do final da lista de argumentos en vez do valor (James) no rexistro que está máis preto do comezo.
  • O primeiro rexistro contén unha columna (Score) que non existe no segundo rexistro. O resultado contén esa columna co seu valor (90).
  • O segundo rexistro contén unha columna (Passed) que non existe no primeiro rexistro. O resultado contén esa columna co seu valor (true).
{ Name: "Jim", Score: 90, Passed: true }

Uso de Como ou Esterexistro

Usar a palabra clave Como ou Esterexistro na fórmula evita un contexto de avaliación ambiguo.

No seguinte exemplo, considere a primeira busca na declaración If. (OrderID = A[@OrderID]) espérase que compare o OrderId no ámbito de busca co OrderId da colección A no ámbito ForAll. Neste caso, é probable que queira que se resolva A[@OrderId] como parámetro local. Pero é ambiguo.

Power Apps actualmente interpreta o OrderId esquerdo e o A[@OrderId] dereito como campo no ámbito de busca. Polo tanto, a busca sempre atopará a primeira fila en [dbo].[Orders1] porque a condición sempre é certa (é dicir, o OrderId de calquera fila é igual a si mesmo).

ClearCollect(
    A,
    Filter(
        '[dbo].[Orders1]',
        OrderId = 8888888
    )
);
ForAll(
    A,
    If(
        LookUp(
            '[dbo].[Orders1]',
            OrderId = A[@OrderId],
            "OK"
        ) = "OK",
        Patch(
            '[dbo].[Orders1]',
            LookUp(
                '[dbo].[Orders1]',
                OrderId = A[@OrderId]
            ),
            {
        OrderName: "val1"
        }
    ),
    Patch(
            '[dbo].[Orders1]',
            Defaults('[dbo].[Orders1]'),
            {
        OrderName: "val2"
        }
    )
    )
)

Uso de Como ou Esterexistro

Sempre que sexa posible, use o operador Como ou Esterexistro para distinguir o lado esquerdo. Como recoméndase para o escenario anterior.

Cando a fórmula usa varios ámbitos con ForAll, Filter e Lookup na mesma orixe de datos ou táboa, é posible que os parámetros de ámbito poidan chocar cun mesmo campo noutros lugares. Polo tanto, recoméndase usar o operador Como ou Este rexistro para resolver o nome do campo e evitar ambigüidades.

Por exemplo, pode usar o operador Como para distinguir no seguinte exemplo.

ClearCollect(
    A,
    Filter(
        '[dbo].[Orders1]',
        OrderId = 8888888
    )
);
ForAll(
    A,
    If(
        LookUp(
            '[dbo].[Orders1]' As B,
            B.OrderId = A[@OrderId],
            "OK"
        ) = "OK",
        Patch(
            '[dbo].[Orders1]',
            LookUp(
                '[dbo].[Orders1]' As C,
                C.OrderId = A[@OrderId]
            ),
            {
        OrderName: "val1"
        }
    ),
    Patch(
            '[dbo].[Orders1]',
            Defaults('[dbo].[Orders1]'),
            {
        OrderName: "val2"
        }
    )
    )
)

Tamén pode usar Esterexistro co mesmo propósito.

ClearCollect(
    A,
    Filter(
        '[dbo].[Orders1]',
        OrderId = 8888888
    )
);
ForAll(
    A,
    If(
        LookUp(
            '[dbo].[Orders1]',
            ThisRecord.OrderId = A[@OrderId],
            "OK"
        ) = "OK",
        Patch(
            '[dbo].[Orders1]',
            LookUp(
                '[dbo].[Orders1]',
                ThisRecord.OrderId = A[@OrderId]
            ),
            {
        OrderName: "val1"
        }
    ),
    Patch(
            '[dbo].[Orders1]',
            Defaults('[dbo].[Orders1]'),
            {
        OrderName: "val2"
        }
    )
    )
)

Para obter máis información sobre o uso do operador Como e Esterexistro, consulte o artigo Operadores.