Aracılığıyla paylaş


Patch fonksiyon

Şunlar için geçerlidir: Tuval uygulamaları Copilot Studio Desktop akışları Model temelli uygulamalar Power Platform CLI Dataverse işlevleri

Bir veri kaynağında bir veya daha fazla kayıt oluşturur ya da kayıtları değiştirir veya veri kaynağının dışında kayıtları birleştirir.

Patch Kullanıcı etkileşimi gerektirmeyen güncelleştirmeler yapmanız veya birden çok ekrana yayılan formlar kullanmanız gibi karmaşık durumlarda kayıtları değiştirmek için işlevini kullanın.

Veri kaynağındaki kayıtları basit değişiklikler için daha kolay bir şekilde güncelleştirmek için bunun yerine Edit form denetimini kullanın. Edit form denetimi eklediğinizde, kullanıcılara doldurulacak bir form sağlar ve bir veri kaynağı üzerinde yapılan değişiklikleri kaydedersiniz. Daha fazla bilgi edinmek için bkz. Veri formlarını anlama.

İşlevin nasıl kullanılacağını öğrenmek için bu videoyu Patch izleyin:

Genel bakış

bir veri kaynağının Patch bir veya daha fazla kaydını değiştirmek için işlevini kullanın. Belirli alanların değerleri, diğer özellikler etkilenmeden değiştirilir. Örneğin, şu formül Contoso adlı bir müşterinin telefon numarasını değiştirir:

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

Kayıt oluşturmak için Defaults işleviyle kullanınPatch. Kayıt oluşturmaya ve kayıtları düzenlemeye yönelik tek bir ekran oluşturmak için bu davranışı kullanın. Örneğin, şu formül Contoso adlı bir müşteri için kayıt oluşturur:

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

Uyarı

Varsayılan değerlerle bir veri kaynağından bir kayıt kullanarak koleksiyona düzeltme eki eklediğinizde, düzeltme eki işlemi koleksiyonu hem belirtilen düzeltme eki değerleriyle hem de veri kaynağındaki varsayılan değerlerle güncelleştirir. Yeni kayıt oluşturmak için patch deyiminin DataSource ve Defaults işlevinin DataSource değerlerinin eşleşmesi gerekir.

Veri kaynağıyla çalışmıyor olsanız bile, iki veya daha fazla kaydı birleştirmek için kullanabilirsiniz Patch . Örneğin, şu formül Contoso'nun telefon numarasını ve konumunu tanımlayan tek bir kayıtta iki kaydı birleştirir:

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

Açıklama

Veri kaynağında kayıt oluşturma veya kaydı değiştirme

Bu işlevi bir veri kaynağıyla kullanmak için önce veri kaynağını, ardından da bir temel kayıt belirtin:

  • Bir kaydı değiştirmek için temel kaydın bir veri kaynağından gelmesi gerekir. Temel kayıt bir galerinin Items özelliğinden gelmiş, bağlam değişkenine yerleştirilmiş veya başka bir yoldan gelmiş olabilir. Ancak, temel kaydı, veri kaynağına kadar izleyebilirsiniz. Kayıt, değişiklik için kaydı yeniden bulmaya yardımcı olacak ek bilgiler içerdiğinden bu önemlidir.
  • Bir kayıt oluşturmak için Defaults işlevini kullanarak varsayılan değerlere sahip bir temel kayıt oluşturun.

Ardından, her biri temel kayıttaki özellik değerlerini geçersiz kılan yeni özellik değerleri içeren bir veya daha fazla değişiklik kaydı belirtin. Değişiklik kayıtları, sırayla bağımsız değişken listesinin başından sonuna kadar işlenir ve sonraki özellik değerleri, öncekileri geçersiz kılar.

dönüş değeri Patch , değiştirdiğiniz veya oluşturduğunuz kayıttır. Bir kayıt oluşturduysanız, dönüş değeri veri kaynağının otomatik olarak oluşturduğu özellikleri içerebilir. Ancak döndürülen değer ilgili tablodaki alanlar için bir değer sağlamaz.

Örneğin, Set(MyAccount, Patch(Accounts, First(Account), 'Account Name': "Example name")); ve sonra MyAccount.'Primary Contact'.'Full Name' kullanın. Bu durumda tam adı alamazsınız. Bunun yerine, ilişkili bir tablonun alanlarına erişmek için aşağıdaki gibi ayrı bir arama kullanın:

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

Bir veri kaynağını güncelleştirdiğinizde bir veya daha fazla sorun ortaya çıkabilir. Hata İşleme'nin açıklandığı gibi hataları algılamak ve yanıtlamak için IfError ve IsError'ı döndür değeriyle Patch kullanın. Sorunları tanımlamak ve incelemek için, Veri Kaynakları ile Çalışma bölümünde açıklandığı gibi Errors işlevini de kullanabilirsiniz.

İlgili işlevler arasında, bir kaydın tamamını değiştirmek için kullanabileceğiniz Update işlevi ve kayıt oluşturmak için kullanabileceğiniz Collect işlevi bulunur. Bir koşula dayalı olarak birden fazla kaydın belirli özelliklerini değiştirmek için UpdateIf işlevini kullanın.

Veri kaynağında bir kayıt kümesi oluşturma veya kayıt kümesini değiştirme

Patch tek bir çağrıyla birden çok kayıt oluşturmak veya değiştirmek için de kullanılabilir.

Tek bir temel kayıt geçirmek yerine, ikinci bağımsız değişkende temel kayıtların bulunduğu bir tablo sağlanabilir. Değişiklik kayıtları, temel kayıtlara bire bir karşılık gelecek şekilde bir tabloda da sağlanır. Her değişiklik tablosundaki kayıt sayısı, temel tablodaki kayıt sayısıyla aynı olmalıdır.

Bu şekilde kullanıldığında Patch , dönüş değeri aynı zamanda temel ve değişiklik kayıtlarına karşılık gelen her kaydın bire bir olduğu bir tablodur.

Veri kaynağının dışında kayıtları birleştirme

Birleştirmek istediğiniz iki veya daha fazla kayıt belirtin. Kayıtlar, sırayla bağımsız değişken listesinin başından sonuna kadar işlenir ve sonraki özellik değerleri, öncekileri geçersiz kılar.

Patch birleştirilmiş kaydı döndürür ve hiçbir veri kaynağındaki bağımsız değişkenlerini veya kayıtlarını değiştirmez.

Sözdizimi

Veri kaynağında kayıt oluşturma veya kaydı değiştirme

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

  • DataSource: Gerekli. Değiştirmek istediğiniz kaydı içeren veya oluşturmak istediğiniz kaydı içerecek olan veri kaynağı.
  • BaseRecord – Gerekli. Değiştirilecek veya oluşturulacak kayıt. Kayıt bir veri kaynağından geliyorsa bulunur ve değiştirilir. Defaults işlevinin sonucu kullanılıyorsa bir kayıt oluşturulur. Yeni kayıt oluşturmak için patch deyiminin DataSource ve Defaults işlevinin DataSource değerlerinin eşleşmesi gerekir.
  • ChangeRecords – Gerekli. TemelKayıt içinde değiştirilecek özellikleri içeren bir veya daha fazla kayıt. Değişiklik kayıtları, sırayla bağımsız değişken listesinin başından sonuna kadar işlenir ve sonraki özellik değerleri, öncekileri geçersiz kılar.

Veri kaynağında bir kayıt kümesi oluşturma veya kayıt kümesini değiştirme

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

  • DataSource: Gerekli. Değiştirmek istediğiniz kayıtları içeren veya oluşturmak istediğiniz kayıtları içerecek olan veri kaynağı.
  • BaseRecordTable – Gerekli. Değiştirilecek veya oluşturulacak kayıtların bulunduğu bir tablo. Kayıt bir veri kaynağından geliyorsa bulunur ve değiştirilir. Defaults işlevinin sonucu kullanılıyorsa bir kayıt oluşturulur. Yeni kayıt oluşturmak için patch deyiminin DataSource ve Defaults işlevinin DataSource değerlerinin eşleşmesi gerekir.
  • ChangeRecordTables – Gerekli. Her bir TemelKayıtTablosu kaydı için değiştirilecek özellikleri içeren bir veya daha fazla kayıt tablosu. Değişiklik kayıtları, sırayla bağımsız değişken listesinin başından sonuna kadar işlenir ve sonraki özellik değerleri, öncekileri geçersiz kılar.

Kayıt birleştirme

Patch( Kayıt1, Kayıt2 [, ...] )

  • Kayıtlar - Gerekli. Birleştirmek istediğiniz en az iki kayıt. Kayıtlar, sırayla bağımsız değişken listesinin başından sonuna kadar işlenir ve sonraki özellik değerleri, öncekileri geçersiz kılar.

Örnekler

Kayıt oluşturma veya kaydı değiştirme (veri kaynağında)

Bu örneklerde, bu tablodaki verileri içeren ve otomatik olarak IDsütununda değerler oluşturan IceCream adlı bir veri kaynağında kayıt oluşturacak veya kaydı değiştireceksiniz:

Icecream örneği.

Formül Açıklama Result
Patch( IceCream,
LookUp( IceCream, Flavor = "Chocolate" ), { Quantity: 400 } )
IceCream veri kaynağındaki bir kaydı değiştirir:
  • Değiştirilecek kaydın ID sütunu 1 değerini içermektedir. (Bu, Chocolate kaydının kimliğidir.)
  • Quantity sütunundaki değer 400 olarak değişir.
{ Id: 1, Flavor: "Chocolate", Quantity: 400 }

IceCream veri kaynağındaki Chocolate girişi değiştirilmiştir.
Patch( IceCream, Defaults( IceCream ), { Flavor: "Strawberry" } ) IceCream veri kaynağında bir kayıt oluşturur:
  • ID sütunu, veri kaynağının otomatik olarak oluşturduğu 3 değerini içermektedir.
  • Quantity sütunu, Defaults işlevinin belirttiği gibi IceCream veri kaynağında söz konusu sütun için varsayılan değer olan 0 değerini içermektedir.
  • Flavor sütunu, Strawberry değerini içermektedir.
{ Id: 3, Flavor: "Strawberry", Quantity: 0 }

IceCream veri kaynağında Strawberry girişi oluşturulmuştur.

Önceki formüller değerlendirildikten sonra veri kaynağı şu değerlere sahip olur:

icecream sonrası örneği.

Kayıtları birleştirme (veri kaynağının dışında)

Formül Açıklama Result
Patch( { Name: "James", Score: 90 }, { Name: "Jim", Passed: true } ) Veri kaynağının dışında iki kaydı birleştirme:
  • Her bir kaydın Name sütunundaki değerler eşleşmez. Sonuç, bağımsız değişken listesinin başına yakın olan kayıttaki değer (James) yerine, bağımsız değişken listesinin sonuna yakın olan kayıttaki değeri (Jim) içerir.
  • Birinci kayıt, ikinci kayıtta mevcut olmayan bir sütunu (Score) içerir. Sonuç, değeri (90) olan sütunu içerir.
  • İkinci kayıt, birinci kayıtta mevcut olmayan bir sütunu (Passed) içerir. Sonuç, (true) değerine sahip sütunu içerir.
{ Ad: "Jim", Score: 90, Passed: true }

As veya ThisRecord kullanımı

Formülde As veya ThisRecord anahtar sözcüğünün kullanılması belirsiz değerlendirme bağlamını önler.

Aşağıdaki örnekte, If deyiminde ilk aramayı düşünün. (OrderID = A[@OrderID]) arama kapsamındaki OrderId ile kapsamdaki koleksiyonun OrderIdA karşılaştırılması ForAll beklenir. Bu durumda, muhtemelen A[@OrderId] öğesinin yerel parametre olarak çözümlenmesini istersiniz. Ancak bu belirsizdir.

Power Apps şu anda hem sol taraftaki OrderId hem de sağ taraftaki A[@OrderId] öğesini arama kapsamındaki bir alan olarak yorumlar. Bu nedenle, koşul her zaman doğru olduğu için, arama her zaman [dbo].[Orders1] öğesindeki ilk satırı bulur (başka bir deyişle, herhangi bir satırın OrderId öğesi kendi değerine eşit olur.)

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"
       }
   )
    )
)

As veya ThisRecord kullanımı

Mümkün olduğunda, As işlecini veya ThisRecord öğesini kullanarak sol tarafın belirsizliğini ortadan kaldırın. Yukarıdaki senaryo için önerildiği gibi .

Formülünüz aynı veri kaynağı veya tabloda ForAll, Filter ve Lookup ile birden çok kapsam kullandığında, kapsam parametreleri başka bir yerde aynı alanla çakışabilir. Bu nedenle, alan adını düzeltmek ve belirsizliğe engel olmak için As işlecinin veya ThisRecord'un kullanılması önerilir.

Örneğin, aşağıdaki örnekte belirsizliği gidermek için As işlecini kullanabilirsiniz.

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"
       }
   )
    )
)

Alternatif olarak, ThisRecord öğesini aynı amaçla kullanabilirsiniz.

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"
       }
   )
    )
)

As işlecinin kullanımı ve ThisRecord hakkında daha fazla bilgi için İşleçler makalesine bakın.