שתף באמצעות


הפונקציה 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 יכולה גם לשמש כדי ליצור או לשנות רשומות מרובות עם קריאה יחידה.

במקום להעביר רשומת בסיס יחידה, ניתן לספק טבלת רשומות בסיס בארגומנט השני. רשומות שינוי מסופקות גם בטבלה, ומתאימות אחת לאחת לרשומות הבסיס. מספר הרשומות בכל טבלת שינויים מוכרח להיות זהה למספר הרשומות בטבלת הבסיס.

בעת השימוש בפונקציה Patch באופן הזה, ערך ההחזרה הוא גם טבלה שבה כל רשומה מתאימה אחת לאחת לרשומת הבסיס ולרשומת השינוי.

מיזוג רשומות מחוץ למקור נתונים

ציין שתי רשומות או יותר שברצונך למזג. רשומות מעובדות לפי הסדר מתחילת רשימת הארגומנטים ועד לסוף, כאשר ערכי מאפיין מאוחרים יותר עוקפים ערכים מוקדמים יותר.

הפונקציה Patch מחזירה את הרשומה שמוזגה ואינה משנה את הארגומנטים או את הרשומות שלה במקורות נתונים כלשהם.

תחביר

שינוי או יצירה של רשומה במקור נתונים

Patch( DataSource, BaseRecord, ChangeRecord1 [, ChangeRecord2, …])

  • DataSource – נדרש. מקור הנתונים שמכיל את הרשומה שברצונך לשנות או שיכלול את הרשומה שברצונך ליצור.
  • BaseRecord – נדרש. הרשומה לשינוי או ליצירה. אם הרשומה הגיעה מ-מקור נתונים, הרשומה נמצאת ומשתנה. אם התוצאה של Defaults היא בשימוש, הרשומה נוצרת.
  • ChangeRecord(s) – נדרש. רשומה אחת או יותר הכוללת מאפיינים לשינוי ב- BaseRecord. רשומות שינוי מעובדות לפי הסדר מתחילת רשימת הארגומנטים ועד לסוף, כאשר ערכי מאפיין מאוחרים יותר עוקפים ערכים מוקדמים יותר.

שינוי או יצירה של ערכת רשומות במקור נתונים

Patch( DataSource, BaseRecordsTable, ChangeRecordTable1 [, ChangeRecordTable2, … ])

  • DataSource – נדרש. מקור הנתונים שמכיל את הרשומות שברצונך לשנות או שיכלול את הרשומות שברצונך ליצור.
  • BaseRecordTable – נדרש. טבלת רשומות לשינוי או ליצירה. אם הרשומה הגיעה מ-מקור נתונים, הרשומה נמצאת ומשתנה. אם התוצאה של Defaults היא בשימוש, הרשומה נוצרת.
  • ChangeRecordTable(s) – נדרש. טבלת רשומות אחת או יותר המכילות מאפיינים לשינוי עבור כל רשומה של BaseRecordTable. רשומות שינוי מעובדות לפי הסדר מתחילת רשימת הארגומנטים ועד לסוף, כאשר ערכי מאפיין מאוחרים יותר עוקפים ערכים מוקדמים יותר.

מיזוג רשומות

Patch( Record1, Record2 [, …] )

  • Record(s) - נדרש. לפחות שתי רשומות שברצונך למזג. רשומות מעובדות לפי הסדר מתחילת רשימת הארגומנטים ועד לסוף, כאשר ערכי מאפיין מאוחרים יותר עוקפים ערכים מוקדמים יותר.

דוגמאות

שינוי או יצירה של רשומה (במקור נתונים)

בדוגמאות אלה, תשנה או תיצור רשומה במקור נתונים, שנקראת גלידה, המכילה את הנתונים בטבלה זו ויוצרת באופן אוטומטי את הערכים בעמודהמזהה :

דוגמה של גלידה.

נוסחה תיאור‬‏‫‬ תוצאה
Patch( IceCream,
LookUp( IceCream, Flavor = "Chocolate" ), { Quantity: 400 } )
שינוי רשומה במקור הנתונים גלידה:
  • העמודה מזהה של הרשומה שיש לשנות מכילה את הערך 1. (הרשומה שוקולד היא בעלת המזהה הזה.)
  • הערך בעמודה כמות משתנה ל- 400.
{ ID: 1, Flavor: "Chocolate", Quantity: 400 }

הערך שוקולד במקור הנתונים גלידה השתנה.
Patch( IceCream, Defaults( IceCream ), { Flavor: "Strawberry" } ) יצירת רשומה במקור הנתונים גלידה:
  • העמודה מזהה מכילה את הערך 3, שמקור הנתונים יוצר אוטומטית.
  • העמודה כמות מכילה 0, שהוא ערך ברירת המחדל עבור עמודה זו במקור הנתונים גלידה, כפי שהפונקציה Defaults מציינת.
  • העמודה טעם מכילה את הערך תות שדה.
{ ID: 3, Flavor: "Strawberry", Quantity: 0 }

הערך תות שדה במקור הנתונים גלידה נוצר.

לאחר הערכת הנוסחאות הקודמות, מקור הנתונים מסתיים בערכים הבאים:

גלידה לדוגמה אחרי.

מיזוג רשומות (מחוץ למקור נתונים)

נוסחה תיאור תוצאה
Patch( { Name: "James", Score: 90 }, { Name: "Jim", Passed: true } ) מיזוג שתי רשומות מחוץ למקור נתונים:
  • הערכים בעמודה שם של כל רשומה אינם תואמים. התוצאה מכילה את הערך (חגי) ברשומה הקרובה יותר לסוף רשימת הארגומנטים במקום את הערך (עידן) ברשומה הקרובה יותר להתחלה.
  • הרשומה הראשונה מכילה עמודה (ניקוד) שאינה קיימת בעמודה השנייה. התוצאה מכילה את העמודה הזאת עם הערך שלה (90).
  • העמודה השנייה מכילה עמודה (עבר בהצלחה) שאינה קיימת ברשומה הראשונה. התוצאה מכילה את העמודה הזאת עם הערך שלה (true).
{ 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, עיין במאמר אופרטורים.