Patch işlevi

Şunlar için geçerlidir: Tuval uygulamaları Model temelli uygulamalar Power Platform CLI

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.

Örneğin, kullanıcı etkileşimi gerektirmeyen veya birden fazla ekrana yayılan formlar kullanan güncelleştirmeler gerçekleştirdiğiniz karmaşık durumlarda kayıtları değiştirmek için Patch işlevini kullanabilirsiniz.

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.

Patch işlevini nasıl kullanacağınızı öğrenmek için bu videoyu izleyin:

Genel bakış

Veri kaynağının bir veya daha fazla kaydını değiştirmek için Patch 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, First( Filter( Customers, Name = "Contoso" ) ), { Phone: "1-212-555-1234" } )

Kayıt oluşturmak için Defaults işlevi ile Patch işlevini kullanın. 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" } )

Bir veri kaynağı ile çalışmıyor olsanız da iki veya daha fazla kaydı birleştirmek için Patch işlevini kullanabilirsiniz. Ö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ş, bir bağlam değişkenine yerleştirilmiş veya başka bir yol aracılığıyla gelmiş olabilir. Ancak, temel kaydı, veri kaynağına kadar izleyebilirsiniz. Kayıt, değişiklik için kaydın tekrar bulunmasına yardımcı olacak ek bilgiler içereceğ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öndürülen Patch değeri, değiştirdiğiniz veya oluşturduğunuz kayıttır. Bir kayıt oluşturduysanız, döndürülen değer, 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 oluşabilir. Hataları saptayıp bunlara yanıt vermek için Hata İşleme bölümünde açıklandığı gibi, Yama'dan gelen dönüş değeriyle IfError ve IsError 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ı ile birden fazla 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.

Patch bu şekilde kullanıldığında döndürülen değer aynı zamanda her bir kaydın, temel kayıtlara ve değişiklik kayıtlarına bire bir karşılık geldiği 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ştirilen kaydı döndürür ve kaydın herhangi 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.
  • ChangeRecord(s) – 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.
  • ChangeRecordTable(s) – 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 Veri Akışı Açıklaması 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 Sonuç
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.
{ Name: "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]) öğesinin, arama kapsamında OrderId öğesini ForAll kapsamdaki A koleksiyonunun OrderId öğesi ile karşılaştırması 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. As yukarıdaki senaryo için önerilir.

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.