הפונקציה 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 כדי ליצור רשומות. השתמש באופן פעולה זה כדי לבנות מסך יחיד הן עבור יצירת רשומות והן עבור עריכת רשומות. לדוגמה, נוסחה זו יוצרת רשומה עבור לקוח בשם 'בר-אילן':
Patch( Customers, Defaults( Customers ), { Name: "Contoso" } )
גם אם אינך עובד עם מקור נתונים, באפשרותך להשתמש ב- Patch כדי למזג שתי רשומות או יותר. לדוגמה, נוסחה זו ממזגת שתי רשומות לרשומה אחת המזהה הן את מספר הטלפון והן את המיקום עבור 'בר-אילן':
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 עם ערך ההחזרה מ-תיקון כדי לזהות שגיאות ולהגיב עליהן, כפי שמתאר טיפול בשגיאות. אפשר גם להשתמש בפונקציה שגיאות כדי לזהות ולבחון בעיות, כפי שהסעיף עבודה עם מקורות נתונים מתאר.
פונקציות קשורות כוללות את הפונקציה Update להחלפת רשומה שלמה, ואת הפונקציה Collect ליצירת רשומה. השתמש בפונקציה UpdateIf כדי לשנות מאפיינים ספציפיים של רשומות מרובות בהתבסס על תנאי.
שינוי או יצירה של ערכת רשומות במקור נתונים
ניתן להשתמש בתיקון כדי ליצור או לשנות מספר רשומות בשיחה אחת.
במקום להעביר רשומת בסיס יחידה, ניתן לספק טבלת רשומות בסיס בארגומנט השני. רשומות שינוי מסופקות גם בטבלה, ומתאימות אחת לאחת לרשומות הבסיס. מספר הרשומות בכל טבלת שינויים מוכרח להיות זהה למספר הרשומות בטבלת הבסיס.
בעת השימוש בפונקציה Patch באופן הזה, ערך ההחזרה הוא גם טבלה שבה כל רשומה מתאימה אחת לאחת לרשומת הבסיס ולרשומת השינוי.
מיזוג רשומות מחוץ למקור נתונים
ציין שתי רשומות או יותר שברצונך למזג. רשומות מעובדות לפי הסדר מתחילת רשימת הארגומנטים ועד לסוף, כאשר ערכי מאפיין מאוחרים יותר עוקפים ערכים מוקדמים יותר.
תיקון מחזיר את הרשומה הממוזגת ואינו משנה את הארגומנטים או הרשומות שלה באף מקורות נתונים.
תחביר
שינוי או יצירה של רשומה במקור נתונים
תיקון( מקור נתונים, BaseRecord, ChangeRecord1 [, ChangeRecord2, … ])
- DataSource – חובה. מקור הנתונים שמכיל את הרשומה שברצונך לשנות או שיכלול את הרשומה שברצונך ליצור.
- BaseRecord – חובה. הרשומה לשינוי או ליצירה. אם הרשומה הגיעה מ-מקור נתונים, הרשומה נמצאת ומשתנה. אם התוצאה של Defaults היא בשימוש, הרשומה נוצרת.
- ChangeRecords – חובה. רשומה אחת או יותר הכוללת מאפיינים לשינוי ב- BaseRecord. רשומות שינוי מעובדות לפי הסדר מתחילת רשימת הארגומנטים ועד לסוף, כאשר ערכי מאפיין מאוחרים יותר עוקפים ערכים מוקדמים יותר.
שינוי או יצירה של ערכת רשומות במקור נתונים
תיקון( מקור נתונים, BaseRecordsTable, ChangeRecordTable1 [, ChangeRecordTable2, … ] )
- DataSource – חובה. מקור הנתונים שמכיל את הרשומות שברצונך לשנות או שיכלול את הרשומות שברצונך ליצור.
- BaseRecordTable – נדרש. טבלת רשומות לשינוי או ליצירה. אם הרשומה הגיעה מ-מקור נתונים, הרשומה נמצאת ומשתנה. אם התוצאה של Defaults היא בשימוש, הרשומה נוצרת.
- ChangeRecordTables – נדרש. טבלת רשומות אחת או יותר המכילות מאפיינים לשינוי עבור כל רשומה של BaseRecordTable. רשומות שינוי מעובדות לפי הסדר מתחילת רשימת הארגומנטים ועד לסוף, כאשר ערכי מאפיין מאוחרים יותר עוקפים ערכים מוקדמים יותר.
מיזוג רשומות
תיקון( Record1, Record2 [, …] )
- רשומות - חובה. לפחות שתי רשומות שברצונך למזג. רשומות מעובדות לפי הסדר מתחילת רשימת הארגומנטים ועד לסוף, כאשר ערכי מאפיין מאוחרים יותר עוקפים ערכים מוקדמים יותר.
דוגמאות
שינוי או יצירה של רשומה (במקור נתונים)
בדוגמאות אלה, תשנה או תיצור רשומה במקור נתונים, שנקראת גלידה, המכילה את הנתונים בטבלה זו ויוצרת באופן אוטומטי את הערכים בעמודה מזהה :
נוסחה | תיאור | תוצאה |
---|---|---|
תיקון( IceCream, LookUp( IceCream, Flavor = "Chocolate" ), { Quantity: 400 } ) |
שינוי רשומה במקור הנתונים גלידה:
|
{ ID: 1, Flavor: "Chocolate", Quantity: 400 } הערך שוקולד במקור הנתונים גלידה השתנה. |
Patch( IceCream, Defaults( IceCream ), { טעם: "Strawberry" } ) | יצירת רשומה במקור הנתונים גלידה:
|
{ ID: 3, Flavor: "Strawberry", Quantity: 0 } הערך תות שדה במקור הנתונים גלידה נוצר. |
לאחר הערכת הנוסחאות הקודמות, מקור הנתונים מסתיים בערכים הבאים:
מיזוג רשומות (מחוץ למקור נתונים)
נוסחה | תיאור | תוצאה |
---|---|---|
תיקון ( { שם: "ג'יימס", ציון: 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]
משום שהתנאי תמיד true (כלומר, 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 כדי להבין את הצד השמאלי. As מומלץ לתרחיש שלעיל.
כאשר הנוסחה שלך משתמשת בטווחים מרובים עם 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"
}
)
)
)
לקבלת מידע נוסף אודות השימוש באופרטור As וב- ThisRecord, עיין במאמר אופרטורים.