الدالة Patch
ينطبق على: تطبيقات
اللوحة التطبيقات
Power Platform المستندة إلى النموذج تدفقات سطح المكتب CLI
تعديل أو إنشاء سجل واحد أو أكثر في مصدر البيانات، أو دمج السجلات خارج مصدر البيانات.
استخدم وظيفة Patch لتعديل السجلات في المواقف المعقدة ، مثل عندما تقوم بإجراء تحديثات لا تتطلب تدخل المستخدم أو تستخدم النماذج التي تمتد عبر شاشات متعددة.
لتحديث السجلات في مصدر البيانات بطريقه أكثر سهوله للتغييرات البسيطة، استخدم عنصر تحكم Edit form بدلاً من ذلك. عندما تضيف عنصر تحكم Edit form فانك توفر للمستخدمين نموذجا لملء التغييرات وحفظها على مصدر البيانات. للحصول على مزيد من المعلومات، راجع فهم نماذج البيانات.
شاهد هذا الفيديو للتعرف على كيفية استخدام وظيفة Patch:
نظرة عامة
استخدم وظيفة Patch لتعديل واحد أو أكثر من السجلات الخاصة بمصدر البيانات. يتم تعديل قيم الحقول المحددة بدون التأثير على الخصائص الأخرى. على سبيل المثال، تغير هذه الصيغة رقم الهاتف لعميل يسمى Contoso:
Patch( Customers, First( Filter( Customers, Name = "Contoso" ) ), { Phone: "1-212-555-1234" } )
استخدم وظيفة Patch مع Defaults لإنشاء السجلات. استخدم هذا السلوك لإنشاء شاشة واحدة لإنشاء السجلات وتحريرها. على سبيل المثال، تقوم هذه الصيغة بإنشاء سجل لعميل يسمى Contoso:
Patch( Customers, Defaults( Customers ), { Name: "Contoso" } )
حتى إذا لم تكن تستخدم مصدر بيانات، فيمكنك استخدام وظيفة Patch لدمج سجلين أو أكثر. على سبيل المثال ، تدمج هذه الصيغة سجلين في سجل يحدد رقم الهاتف وموقع Contoso:
Patch( { Name: "Contoso", Phone: "1-212-555-1234" }, { Name: "Contoso", Location: "Midtown" } )
الوصف
تعديل أو إنشاء سجل في مصدر بيانات
لاستخدام هذه الوظيفة مع مصدر بيانات، حدد مصدر البيانات، ثم حدد السجل الأساسي:
- لتعديل سجل ، يجب أن يأتي السجل الأساسي من مصدر بيانات. قد يكون السجل الأساسي من خلال خاصية Items الخاصة بمعرض في متغير السياق، أو يأتي من مسار آخر. ولكن ، يمكنك تتبع السجل الأساسي مرة أخرى إلى مصدر البيانات. هذا مهم لأن السجل سيتضمن معلومات إضافية للمساعدة في العثور على السجل مرة أخرى للتعديل.
- لإنشاء سجل، استخدم وظيفة Defaults لإنشاء سجل أساسي بالقيم الافتراضية.
ثم حدد سجل تغيير واحد أو أكثر ، يحتوي كل منها على قيم خاصية جديدة تتجاوز قيم الخاصية في السجل الأساسي. تتم معالجة سجلات التغيير بالترتيب من بداية قائمة الوسائط إلى النهاية ، مع تجاوز قيم الخصائص اللاحقة القيم السابقة.
قيمه إرجاع Patch هي السجل الذي قمت بتعديله أو إنشائه. إذا قمت بإنشاء سجل ، فقد تتضمن القيمة المرجعة خصائص المصدر البيانات التي تم إنشاؤها تلقائيا. ومع ذلك، لا توفر قيمة الإرجاع قيمة حقول جدول مرتبط.
على سبيل المثال، يمكنك استخدام Set(MyAccount, Patch(Accounts, First(Account), 'Account Name': "Example name"));
ثم MyAccount.'Primary Contact'.'Full Name'
. لا يمكنك تقديم اسم كامل في هذه الحالة. وبدلا من ذلك، للوصول إلى حقول جدول مرتبط، استخدم عمليةبحث منفصلة مثل:
LookUp(Accounts, Account = MyAccount.Account).'Primary Contact'.'Full Name'
عند القيام بتحديث مصدر البيانات، قد تظهر مشكلة واحدة أو أكثر. استخدم IfError وIsError مع القيمة المرجعة من Patch للكشف عن الأخطاء والاستجابة لها، كما هو موضح في معالجة الأخطاء. يمكنك أيضا استخدام دالة Errors لتحديد المشكلات وفحصها، كما هو موضح في العمل مع مصادر البيانات.
تتضمن الوظائف ذات الصلة وظيفة Update لاستبدال سجل بالكامل، ووظيفة Collect لإنشاء سجل. استخدم وظيفة UpdateIf لتعديل خصائص محدده لسجلات متعددة استنادا إلى شرط.
تعديل أو إنشاء مجموعة من السجلات في مصدر بيانات
يمكن أيضا استخدام التصحيح لإنشاء سجلات متعددة أو تعديلها بمكالمة واحدة.
بدلاً من تمرير سجل أساسي واحد ، يمكن توفير جدول السجلات الأساسية في الوسيطة الثانية. يتم توفير سجلات التغيير في الجدول أيضًا ، بحيث تتطابق السجلات الفردية مع واحد مقابل واحد. يجب أن يكون عدد السجلات في كل جدول تغيير هو نفس عدد السجلات في الجدول الأساسي.
عند استخدام وظيفة Patch بهذه الطريقة، القيمة المرتجعة هي أيضًا جدول مع كل سجل مقابل واحد مع السجلات الأساسية وتغيير السجلات.
دمج السجلات خارج مصدر البيانات
حدد سجلين أو أكثر تريد دمجهما. تتم معالجة السجلات بالترتيب من بداية قائمة الوسائط إلى النهاية ، مع تجاوز قيم الخصائص اللاحقة القيم السابقة.
ترجع ميزة التصحيح السجل المدمج ولا تعدل وسيطاته أو سجلاته في أي مصادر بيانات.
بناء الجملة
تعديل أو إنشاء سجل في مصدر بيانات
التصحيح ( مصدر البيانات ، BaseRecord ، ChangeRecord1 [، ChangeRecord2 ، ...])
- DataSource – مطلوب. مصدر البيانات الذي يحتوي على السجل الذي تريد تعديله أو سيحتوي على السجل الذي تريد إنشاءه.
- السجل الأساسي- مطلوب. السجل المراد تعديله أو إنشائه. إذا كان السجل من مصدر بيانات ، فسيتم العثور على السجل وتعديله. في حالة استخدام نتيجة Defaults يتم إنشاء سجل.
- سجلات التغيير - مطلوب. سجل واحد أو أكثر يحتوي على خصائص للتعديل في BaseRecord. تتم معالجة سجلات التغيير بالترتيب من بداية قائمة الوسائط إلى النهاية ، مع تجاوز قيم الخصائص اللاحقة القيم السابقة.
تعديل أو إنشاء مجموعة من السجلات في مصدر بيانات
التصحيح ( مصدر البيانات ، BaseRecordsTable ، ChangeRecordTable1 [، ChangeRecordTable 2 ، ...] )
- DataSource – مطلوب. مصدر البيانات الذي يحتوي على السجلات التي تريد تعديلها أو يحتوي على السجلات التي تريد إنشاءها.
- BaseRecordTable - مطلوب. جدول سجلات لتعديله أو إنشائه. إذا كان السجل من مصدر بيانات ، فسيتم العثور على السجل وتعديله. في حالة استخدام نتيجة Defaults يتم إنشاء سجل.
- تشانجريكوردتابيتس - مطلوب. جدول واحد أو أكثر من السجلات التي تحتوي على خصائص لتعديل كل سجل BaseRecordTable. تتم معالجة سجلات التغيير بالترتيب من بداية قائمة الوسائط إلى النهاية ، مع تجاوز قيم الخصائص اللاحقة القيم السابقة.
دمج السجلات
التصحيح ( سجل 1 ، سجل 2 [، ...])
- السجلات - مطلوب. سجلان على الأقل تريد دمجهما. تتم معالجة السجلات بالترتيب من بداية قائمة الوسائط إلى النهاية ، مع تجاوز قيم الخصائص اللاحقة القيم السابقة.
الأمثلة
تعديل أو إنشاء سجل (في مصدر بيانات)
في هذه الأمثلة، ستقوم بتعديل أو إنشاء سجل في مصدر بيانات، يسمى IceCream، يحتوي على البيانات في هذا الجدول وينشئ بشكل تلقائي القيم في عمودالمعرف:
الصيغة | الوصف | نتيجة |
---|---|---|
رقعة (آيس كريم, LookUp( IceCream, Flavor = "Chocolate" ), { Quantity: 400 } ) |
تعديل سجل في مصدر بيانات IceCream:
|
{ ID: 1, Flavor: "Chocolate", Quantity: 400 } تم تعديل Chocolate في مصدر بيانات IceCream. |
التصحيح (الآيس كريم ، الافتراضي (الآيس كريم) ، { النكهة: "الفراولة } ") | إنشاء سجل في مصدر بيانات IceCream:
|
{ ID: 3, Flavor: "Strawberry", Quantity: 0 } تم إنشاء إدخال Strawberry في مصدر بيانات IceCream. |
بعد تقييم الصيغ السابقة، ينتهي مصدر البيانات بهذه القيم:
دمج السجلات (خارج مصدر البيانات)
الصيغة | الوصف | نتيجة |
---|---|---|
التصحيح ( { الاسم: "جيمس" ، النتيجة: 90 } ، { الاسم: "جيم" ، تم تمريره: صحيح } ) | دمج سجلين خارج مصدر البيانات:
|
{ Name: "Jim", Score: 90, Passed: true } |
استخدام As أو ThisRecord
يؤدي استخدام الكلمة الرئيسية As أو ThisRecord في الصيغة إلى تجنب سياق التقييم الغامض.
في المثال أدناه، ضع في اعتبارك البحث الأول في عبارة If
. (OrderID = A[@OrderID])
من المتوقع مقارنة OrderId
نطاق البحث مع OrderId
المجموعة A
في النطاق ForAll
. في هذه الحالة، من المحتمل ان تحتاج A[@OrderId]
إلى حل كمعلمة محلية. ولكنها غامضة.
يفسر Power Apps حاليًا كلاً من الجانب الأيسر OrderId
والجانب الأيمن A[@OrderId]
كحقل في نطاق البحث. لذا، سيعثر البحث دائمًا على الصف الأول في [dbo].[Orders1]
لأن الشرط دائمًا صحيح (أي، أي صف OrderId
يساوي نفسه.)
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 أو ThisRecord
كلما أمكن ، استخدم عامل التشغيل As أو ThisRecord لإزالة الغموض عن الجانب الأيسر. كما هو موصى به للسيناريو أعلاه.
عندما تستخدم الصيغة نطاقات متعددة مع ForAll
و Filter
و Lookup
في نفس مصدر البيانات أو الجدول، فمن المحتمل أن تتعارض معلمات النطاق مع نفس الحقل في مكان آخر. لذلك ، يوصى باستخدام عامل التشغيل As أو ThisRecord لحل اسم الحقل وتجنب الغموض.
على سبيل المثال، يمكنك استخدام عامل التشغيل As لإزالة الغموض في المثال أدناه.
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"
}
)
)
)
وبدلاً من ذلك، يمكنك استخدام ThisRecord للغرض نفسه.
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"
}
)
)
)
لمعرفة المزيد حول استخدام عامل التشغيل باعتباره و ThisRecord راجع مقالة المشغلون .