Power Apps'teki Patch işlevi

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.

Karmaşık durumlardaki kayıtları değiştirmek için Patch işlevini kullanın. Örneğin, kullanıcı etkileşimi gerektirmeyen veya birden çok ekranı kaplayan formları kullanan güncelleştirmeler yaptığınızda.

Veri kaynağındaki kayıtları basit değişiklikler için daha kolay bir şekilde güncelleştirmek için bunun yerine Düzenleme formu denetimini kullanın. Düzenleme formu 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 için bkz. Veri formlarını anlama.

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önüş değeri ilgili varlığın alanları için 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, ilgili bir varlığın 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. Sorunları tanımlamak ve incelemek için, Veri Kaynakları ile Çalışma bölümünde açıklandığı gibi Errors işlevini kullanın.

İ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( VeriKaynağı, TemelKayıt, DeğişiklikKaydı1 [, DeğişiklikKaydı2, … ])

  • DataSource: Gerekli. Değiştirmek istediğiniz kaydı içeren veya oluşturmak istediğiniz kaydı içerecek olan veri kaynağı.
  • TemelKayıt: 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.
  • Değişiklik Kayıtları: 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( VeriKaynağı, TemelKayıtlarTablosu, DeğişiklikKaydıTablosu1, [, DeğişiklikKaydıTablosu2, … ] )

  • DataSource: Gerekli. Değiştirmek istediğiniz kayıtları içeren veya oluşturmak istediğiniz kayıtları içerecek olan veri kaynağı.
  • TemelKayıtTablosu: 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.
  • DeğişiklikKaydıTabloları: 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 ID sütununda değerler oluşturan IceCream adlı bir veri kaynağında kayıt oluşturacak veya kaydı değiştireceksiniz:

Örnek icecream

Formül Veri Akışı Açıklaması Sonuç
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:

Örnek icecream - sonrası

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

Formül Veri Akışı Açıklaması 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.