Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Ş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:
Overview
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ğerlerini diğer özellikleri etkilemeden güncelliyor. Ö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 Patch işleviyle 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" } )
Note
Bir veri kaynağından varsayılan değerlere sahip bir kayıt kullanarak bir koleksiyonu yamalayınca, yama işlemi hem belirtilen yama değerleri hem de veri kaynağından alınan varsayılan değerlerle koleksiyonu günceller. Yeni bir kayıt oluşturmak için yama ifadesinin DataSource ile Defaults fonksiyonunun DataSource kaynağı eşleşmelidir.
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" } )
Description
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 kaydı bir galerinin Items özelliği üzerinden alabilir, bir bağlam değişkenine yerleştirebilir veya başka bir yoldan elde edebilirsiniz. Ancak, temel kaydı veri kaynağına kadar takip edebilmelisiniz. Bu gereklilik önemlidir çünkü kayıt, kaydı tekrar bulup değiştirmenize yardımcı olacak ek bilgiler içerir.
- 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 Patch döndür değeriyle 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
Ayrıca tek bir çağrıda birden fazla kayıt oluşturmak veya değiştirmek için de kullanılabilir Patch .
Tek bir taban kaydı geçirmek yerine, ikinci argümanda temel kayıtların bir tablosunu verin. Değişiklik kayıtlarını da bir tabloda sağlayın, temel kayıtlarla bire bire karşılık verin. Her değişiklik tablosundaki kayıt sayısı, temel tablodaki kayıt sayısıyla aynı olmalıdır.
Bu şekilde kullandığınızda Patch , geri dönüş değeri aynı zamanda her kayıt ile bire bire karşılık gelen bir tablo olur ve bu kayıtlar temel ve değişim kayıtlarıyla birer karşılık gelir.
Veri kaynağının dışında kayıtları birleştirme
Birleştirmek istediğiniz iki veya daha fazla kayıt belirtin. Fonksiyon, kayıtları argüman listesinin başından sonuna kadar sırayla işler; sonraki özellik değerleri öncekilerin üstünü geçer.
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.
Syntax
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 gelmişse, fonksiyon kaydı bulur ve değiştirir. Varsayılan sonuçlar kullanılırsa, fonksiyon bir kayıt oluşturur. 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. Fonksiyon işlemleri, argüman listesinin başından sonuna kadar kayıtları değiştirir; sonraki özellik değerleri öncekilerin önüne geçer.
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 gelmişse, fonksiyon kaydı bulur ve değiştirir. Varsayılan sonuçlar kullanılırsa, fonksiyon bir kayıt oluşturur. 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. Fonksiyon işlemleri, argüman listesinin başından sonuna kadar kayıtları değiştirir; sonraki özellik değerleri öncekilerin önüne geçer.
Merge records
Patch( Kayıt1, Kayıt2 [, ...] )
- Kayıtlar - Gerekli. Birleştirmek istediğiniz en az iki kayıt. Fonksiyon, argüman listesinin başından sonuna kadar kayıtları sırayla işler; sonraki özellik değerleri öncekilerin önüne geçer.
Examples
Kayıt oluşturma veya kaydı değiştirme (veri kaynağında)
Bu örneklerde, IceCream adlı bir veri kaynağında bir kayıt oluşturur veya değiştirirsiniz. Veri kaynağı, verileri bu tabloda içerir ve otomatik olarak IDsütununda değerleri oluşturur:
Bu veri kaynağının bellek içi bir versiyonunu oluşturmak ve bu örnekleri denemek için şu formülü değerlendirin:
ClearCollect( IceCream,
{ ID: 1, Flavor: "Chocolate", Quantity: 100 },
{ ID: 2, Flavor: "Vanilla", Quantity: 200 }
)
| Formula | Description | Result |
|---|---|---|
|
Patch( Dondurma, LookUp( Dondurma, Aroma = "Çikolata" ), { Miktar: 400 } ) |
IceCream veri kaynağındaki bir kaydı değiştirir:
|
{ Id: 1, Flavor: "Chocolate", Quantity: 400 } IceCream veri kaynağındaki Çikolata maddesi değiştirilmiştir. |
| Patch( Dondurma, Varsayılan ( Dondurma ), { Lezzet: "Çilek" } ) |
IceCream veri kaynağında bir kayıt oluşturur:
|
{ Id: 3, Flavor: "Strawberry", Quantity: 0 } IceCream veri kaynağında Strawberry kaydı oluşturulur. |
Önceki formüller değerlendirildikten sonra, veri kaynağı şu değerlerle sona erer:
Kayıtları birleştirme (veri kaynağının dışında)
| Formula | Description | Result |
|---|---|---|
| Patch( { İsim: "James", Puan: 90 }, { İsim: "Jim", Geçti: true } ) | Veri kaynağının dışında iki kaydı birleştirme:
|
{ Ad: "Jim", Score: 90, Passed: true } |
Bir veri kaynağında bir kayıt seti oluşturun veya değiştirin
Tek kayıtlar yerine tablolarla kullandığınızda Patch , tek bir çağrıda birden fazla kayıt oluşturabilir veya değiştirebilirsiniz. Geri dönüş değeri, giriş tablolarıyla bire bire karşılık gelen bir kayıt tablosudur.
Bu örnek, IceCream veri kaynağında birden fazla lezzet için Miktarı aynı anda günceller:
Patch(
IceCream,
Table(
{ ID: 1, Flavor: "Chocolate", Quantity: 150 },
{ ID: 2, Flavor: "Vanilla", Quantity: 200 }
),
Table(
{ Quantity: 300 },
{ Quantity: 400 }
)
)
Sonuç olarak güncellenmiş kayıtların bulunduğu bir tablo ortaya çıkar: { ID: 1, Flavor: "Chocolate", Quantity: 300 } ve { ID: 2, Flavor: "Vanilla", Quantity: 400 }.
Bu örnek, Varsayılan Ayarlar kullanılarak birden fazla yeni kayıt oluşturur:
Patch(
IceCream,
Table( Defaults( IceCream ), Defaults( IceCream ) ),
Table(
{ Flavor: "Mint", Quantity: 60 },
{ Flavor: "Peach", Quantity: 80 }
)
)
Note
Tablolarda kullandığınızda Patch , her değişiklik tablosunda kayıt sayısı temel tablodaki kayıt sayısıyla eşleşmelidir. Aksi takdirde bir hata oluşur.
Birden fazla kaydı değiştirirken hataları tespit etmek için IfError kullanabilirsiniz.
IfError tercih edilen mekanizmadır ve Power FX sunucuları arasında çalışır:
IfError(
Patch(
IceCream,
baseRecords,
changeRecords
),
Notify( "Some records failed to update: " & FirstError.Message, NotificationType.Error )
)
Patch Dataverse sütun tipleriyle
Aşağıdaki örnekler özellikle Microsoft Dataverse veri kaynakları için geçerlidir. Kayıt şekilleri veri kaynağına göre değişir (örneğin, SharePoint ve SQL Server farklı formatlara sahiptir).
Seçim köşesi: Bir Seçim sütunu ayarlamak için doğrudan enum değerini kullanın. Bu örnek, Hesaplar tablosunda bir Durum seçimi sütunu oluşturur:
Patch(
Accounts,
LookUp( Accounts, 'Account Name' = "Contoso" ),
{ 'Status': 'Status (Accounts)'.Active }
)
Arama sütunu: Bir Lookup sütunu ayarlamak için, ilgili tablonun birincil anahtarını içeren bir kayıt sağlayın. Bu örnek, Hesaplar kaydında Birincil İletişim aramasını oluşturur:
Patch(
Accounts,
LookUp( Accounts, 'Account Name' = "Contoso" ),
{ 'Primary Contact': LookUp( Contacts, 'Full Name' = "John Smith" ) }
)
Note
Bu sütun tipi örnekler Dataverse'e özgelidir. SharePoint veya SQL Server gibi diğer veri kaynakları benzer sütun türleri için farklı kayıt şekilleri gerektirebilir. Doğru format için özel veri kaynağınızın dokümantasyonuna bakın.
Formüllerde delegasyon Patch
Fonksiyonun Patch kendisi delegasyona tabi değildir çünkü veri kaynağına sorgulama yapmak yerine yazar. Ancak, başvuru seçimi kısmı (örneğin Filtre, LookUp veya ForAll) veri kaynağı delegasyon sınırlarını aşan bir sorgu içeriyorsa kullanılan formüllerde delegasyon uyarıları görünebilirPatch.
Bir formülde bir delegasyon uyarısı gördüğünüzde, Patchuyarının veri alma fonksiyonlarına uygulanıp Patch uygulanmadığını kontrol edin. Delegasyon hakkında daha fazla bilgi için, Understanding delegation in a canvas uygulamasına bakınız.
Fonksiyonla Patch ilgili yaygın hatalar
Fonksiyonu Patch kullandığınızda, veri kaynağı bağlantısı, izinler veya veri çakışmaları nedeniyle hatalar meydana gelebilir. Hataları tespit etmek ve uygun şekilde yanıt vermek için IfError ve IsError kullanın.
"Fonksiyon kullanılırken Patch ağ hatası": Bu hata genellikle uygulamanın veri kaynağına ulaşamadığını gösterir. Yaygın nedenler arasında internet bağlantısının kaybı, veri kaynağının geçici olarak kullanılamaması veya mevcut kullanıcı için yeterli izinlerin olmaması yer alır. Çağrıyı PatchIfError ile sararak kullanıcılara anlamlı bir mesaj sağlayın.
"Sunucudaki değişikliklerle çakışmalar var": Bu hata, uygulamanızın kaydı okumak ve değişikliği yazmak arasındaki başka bir kullanıcı veya süreç aynı kaydı değiştirdiğinde meydana gelir. Veri kaynağını yenileyin, Refresh fonksiyonunu çağırın ve işlemi tekrar deneyin.
İzin hataları: Kullanıcının veri kaynağında Patch kayıt oluşturma veya değiştirme izni yoksa çağrı başarısız olur. İzinle ilgili hataları yakalamak ve kullanıcıyı yönlendirmek için IfError kullanın.
Genel hata işleme kalıpları için bkz. Hata işleme.
As veya ThisRecord kullanımı
Belirsiz değerlendirme bağlamından kaçınmak için formülünüzde As veya ThisRecord anahtar kelimesini kullanın.
Aşağıdaki örnekte, ifadedeki If ilkini Lookup ele alabilirsiniz.
(OrderID = A[@OrderID])kapsamdaki kapsam ile OrderId koleksiyonun AForAll karşılaştırılması LookupOrderId beklenmektedir. Bu durumda, muhtemelen yerel bir parametre olarak çözmek istersiniz A[@OrderId] . Ama belirsiz.
Power Apps şu anda hem sol tarafı OrderId hem de sağ tarafı A[@OrderId]'yi Lookup kapsamında bir alan olarak yorumlamaktadır. Bu nedenle, Lookup her zaman ilk satırı içinde [dbo].[Orders1] bulur çünkü koşul her zaman doğrudur (yani, herhangi bir satırın OrderId kendisine eşittir).
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, sol tarafı belirsizleştirmek için As operatörü veya ThisRecord anahtar kelimesini kullanın. Önceki senaryoda önerildiği gibi.
Formülünüz aynı veri kaynağı veya tabloda , ForAllFilter, ile birden fazla kapsam kullandığındaLookup, kapsam parametreleri başka bir alanla çarpışabilir. Bu nedenle, alan adını çözmek ve belirsizlikten kaçınmak için As operatörü veya ThisRecord kullanın.
Örneğin, aşağıdaki örnekte As operatörünü kullanarak anlaşılmazlığı çözebilirsiniz.
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 operatörü ve ThisRecord'un kullanımı hakkında daha fazla bilgi edinmek için Operatörler makalesine bakınız.