שתף דרך


Patch פונקציה

חל על: אפליקציות Canvas Copilot Studio Desktop זורמות אפליקציות מונחות מודלים פונקציות Power Platform CLI Dataverse

משנה או יוצרת רשומה אחת או יותר במקור נתונים, או ממזגת רשומות מחוץ למקור נתונים.

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

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

צפה בסרטון וידאו זה כדי ללמוד כיצד להשתמש בפונקציה Patch :

מבט כולל

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

Patch( Customers, LookUp( Customers, Name = "Contoso" ), { Phone: "1-212-555-1234" } )

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

Patch( Customers, Defaults( Customers ), { Name: "Contoso" } )

הערה

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

גם אם אינך עובד עם מקור נתונים, באפשרותך להשתמש בו כדי למזג 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וב- IsErrorPatch עם הערך המוחזר מ- כדי לזהות שגיאות ולהגיב לשגיאות, כפי שמתאר טיפול בשגיאות . אפשר גם להשתמש בפונקציה שגיאות כדי לזהות ולבחון בעיות, כפי שהסעיף עבודה עם מקורות נתונים מתאר.

פונקציות קשורות כוללות את הפונקציה Update להחלפת רשומה שלמה, ואת הפונקציה Collect ליצירת רשומה. השתמש בפונקציה UpdateIf כדי לשנות מאפיינים ספציפיים של רשומות מרובות בהתבסס על תנאי.

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

Patch יכול גם לשמש ליצירה או לשינוי של רשומות מרובות בשיחה בודדת.

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

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

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

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

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

תחביר

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

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

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

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

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

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

מיזוג רשומות

Patch( Record1, Record2 [, ...] )

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

דוגמאות

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

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

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

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

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