के माध्यम से साझा करें


Patch फलन

इस पर लागू होता है: कैनवास ऐप्लिकेशन Copilot Studio Desktop flows मॉडल-चालित ऐप्लिकेशन Power Platform CLI Dataverse फ़ंक्शंस

डेटा स्रोत में एक या अधिक रिकॉर्ड संशोधित करता है या बनाता है या डेटा स्रोत के बाहर रिकॉर्ड मर्ज करता है.

जटिल स्थितियों में रिकॉर्ड को संशोधित करने के लिए फ़ंक्शन का Patch उपयोग करें, जैसे कि जब आप ऐसे अद्यतन करते हैं जिनके लिए किसी उपयोगकर्ता सहभागिता की आवश्यकता नहीं होती है या एकाधिक स्क्रीन वाले प्रपत्रों का उपयोग करते हैं.

साधारण परिवर्तनों के लिए अधिक आसानी से डेटा स्रोत में रिकॉर्ड अद्यतन करने के लिए, इसके बजाय प्रपत्र संपादित करें नियंत्रण का उपयोग करें. जब आप एक प्रपत्र संपादित करें नियंत्रण जोड़ते हैं, तो आप उपयोगकर्ताओं को भरने के लिए एक प्रपत्र देते हैं और उसके बाद डेटा स्रोत में परिवर्तन सहेजते हैं. अधिक जानकारी के लिए, डेटा प्रपत्रों को समझें देखें.

फ़ंक्शन का Patch उपयोग करने का तरीका जानने के लिए यह वीडियो देखें:

अवलोकन

किसी डेटा स्रोत के एक या अधिक रिकॉर्ड्स को संशोधित करने के लिए फ़ंक्शन का Patch उपयोग करें. विशिष्ट फ़ील्ड के मान अन्य गुणों को प्रभावित किए बिना संशोधित किए जाते हैं. उदाहरण के लिए, यह सूत्र Contoso नामक ग्राहक के लिए फ़ोन नंबर बदलता है:

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

रिकॉर्ड बनाने के लिए डिफ़ॉल्ट फ़ंक्शन के साथ उपयोग करेंPatch. रिकॉर्ड बनाने और संपादित करने दोनों के लिए सिंगल स्क्रीन बनाने हेतु इस व्यवहार का उपयोग करें. उदाहरण के लिए, यह सूत्र Contoso नामक ग्राहक के लिए एक रिकॉर्ड बनाता है:

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

नोट

जब आप डिफ़ॉल्ट मानों के साथ किसी डेटा स्रोत से किसी रिकॉर्ड का उपयोग करके किसी संग्रह को पैच करते हैं, तो पैच कार्रवाई निर्दिष्ट पैच मानों और डेटा स्रोत से डिफ़ॉल्ट मानों के साथ संग्रह को अद्यतन करती है। पैच कथन का DataSource और DataSource का Defaults फ़ंक्शन एक नया रिकॉर्ड बनाने के लिए मेल खाना चाहिए।

भले ही आप किसी डेटा स्रोत के साथ कार्य नहीं कर रहे हों, फिर भी आप दो या अधिक रिकॉर्ड्स को मर्ज करने के लिए उपयोग कर Patch सकते हैं. उदाहरण के लिए, यह सूत्र दो रिकॉर्ड को एक में मर्ज करता है, जो फ़ोन नंबर और Contoso के लिए स्थान दोनों की पहचान करता है:

Patch( { Name: "Contoso", Phone: "1-212-555-1234" }, { Name: "Contoso", Location: "Midtown" } )

वर्णन

डेटा स्रोत में एक रिकॉर्ड संशोधित करें या बनाएं

डेटा स्रोत के साथ इस फ़ंक्शन का उपयोग करने के लिए, डेटा स्रोत निर्दिष्ट करें और उसके बाद एक मूल रिकॉर्ड निर्दिष्ट करें:

  • रिकॉर्ड संशोधित करने के लिए, मूल रिकॉर्ड को किसी डेटा स्रोत से आना चाहिए. हो सकता है कि आधार रिकॉर्ड गैलरी की आइटम संपत्ति के माध्यम से आया हो, एक संदर्भ चर में रखा गया हो, या किसी अन्य पथ के माध्यम से आया हो। लेकिन, आप मूल रिकॉर्ड को वापस डेटा स्रोत पर ट्रेस कर सकते हैं. यह महत्वपूर्ण है क्योंकि रिकॉर्ड में संशोधन के लिए रिकॉर्ड को फिर से खोजने में मदद करने के लिए अतिरिक्त जानकारी शामिल है।
  • रिकॉर्ड बनाने के लिए 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'

जब आप किसी डेटा स्रोत का अद्यतन करते हैं, तो एक या अधिक समस्याएँ उत्पन्न हो सकती हैं. त्रुटियों का पता लगाने और उनका जवाब देने के लिए रिटर्न मान Patch के साथ IfError और IsError का उपयोग करें, जैसा कि त्रुटि हैंडलिंग वर्णन करता है। समस्याओं की पहचान करने और जांचने के लिए, Errors फ़ंक्शन का भी उपयोग कर सकते हैं, जैसा कि डेटा स्रोतों के साथ कार्य करना में वर्णित किया गया है.

Related फ़ंक्शन में संपूर्ण रिकॉर्ड को बदलने के लिए Update फ़ंक्शन और एक रिकॉर्ड बनाने के लिए Collect फ़ंक्शन शामिल हो सकते हैं. शर्ते पर आधारित कई रिकॉर्ड के विशिष्ट गुण संशोधित करने के लिए, UpdateIf फ़ंक्शन का उपयोग करें.

डेटा स्रोत में रिकॉर्ड का सेट संशोधित करें या बनाएं

Patch एक ही कॉल के साथ एकाधिक रिकॉर्ड बनाने या संशोधित करने के लिए भी उपयोग किया जा सकता है।

एकल मूल रिकॉर्ड पास करने के बजाय, दूसरे तर्क में मूल रिकॉर्ड की एक तालिका प्रदान की जा सकती है. मूल रिकॉर्ड के साथ एक-के-लिए-एक तालिका में भी परिवर्तन रिकॉर्ड प्रदान किए जाते हैं. प्रत्येक परिवर्तन तालिका में रिकॉर्ड की संख्या, मूल तालिका में रिकॉर्ड की संख्या के समान होनी चाहिए.

इस तरीके से उपयोग करते Patch समय, वापसी मूल्य भी एक तालिका है जिसमें प्रत्येक रिकॉर्ड आधार के साथ एक-के-एक के लिए एक होता है और रिकॉर्ड बदलता है।

डेटा स्रोत के बाहर रिकॉर्ड मर्ज करें

ऐसे दो या अधिक रिकॉर्ड निर्दिष्ट करें, जिन्हें आप मर्ज करना चाहते हैं. रिकॉर्ड को तर्क सूची के शुरुआत से अंत तक संसाधित किया जाता है, जिसमें बाद के गुण मान पहले वालों को ओवरराइड करते हैं.

Patch मर्ज किए गए रिकॉर्ड को लौटाता है और किसी भी डेटा स्रोत में अपने तर्कों या रिकॉर्ड्स को संशोधित नहीं करता है.

सिंटैक्स

डेटा स्रोत में एक रिकॉर्ड संशोधित करें या बनाएं

Patch( डेटासोर्स,बेसरिकॉर्ड, चेंजरिकॉर्ड1 [, चेंजरिकॉर्ड 2, ...])

  • डेटा स्रोत – आवश्यक. वह डेटा स्रोत, जिसमें वह रिकॉर्ड शामिल है, जिसे आप संशोधित करना चाहते हैं या वह रिकॉर्ड शामिल होगा, जिसे आप बनाना चाहते हैं.
  • बेसरिकॉर्ड - आवश्यक। संशोधित या बनाए जाने वाला रिकॉर्ड. यदि रिकॉर्ड डेटा स्रोत से आया है, तो रिकॉर्ड पाया गया और संशोधित किया गया होता है. यदि Defaults के परिणाम का उपयोग किया जाता है, तो एक रिकॉर्ड बनाया जाता है. पैच कथन का DataSource और DataSource का Defaults फ़ंक्शन एक नया रिकॉर्ड बनाने के लिए मेल खाना चाहिए।
  • ChangeRecords – आवश्यक. एक या अधिक रिकॉर्ड, जिनमें BaseRecord में संशोधित किए जाने वाले गुण शामिल हैं. परिवर्तन रिकॉर्ड को तर्क सूची के शुरुआत से अंत तक संसाधित किया जाता है, जिसमें बाद के गुण मान पहले वालों को ओवरराइड करते हैं.

डेटा स्रोत में रिकॉर्ड का सेट संशोधित करें या बनाएं

Patch( डेटासोर्स,बेसरिकॉर्ड्सटेबल, चेंजरिकॉर्डटेबल1 [, चेंजरिकॉर्डटेबल2, ... ] )

  • डेटा स्रोत – आवश्यक. वह डेटा स्रोत, जिसमें वे रिकॉर्ड शामिल हैं, जिसे आप संशोधित करना चाहते हैं या वे रिकॉर्ड शामिल होंगे, जिन्हें आप बनाना चाहते हैं.
  • BaseRecordTable – आवश्यक. संशोधित या बनाए जाने वाले रिकॉर्ड की तालिका. यदि रिकॉर्ड डेटा स्रोत से आया है, तो रिकॉर्ड पाया गया और संशोधित किया गया होता है. यदि Defaults के परिणाम का उपयोग किया जाता है, तो एक रिकॉर्ड बनाया जाता है. पैच कथन का DataSource और DataSource का Defaults फ़ंक्शन एक नया रिकॉर्ड बनाने के लिए मेल खाना चाहिए।
  • ChangeRecordTables – आवश्यक. रिकॉर्ड की एक या अधिक तालिकाएँ, जिनमें BaseRecordTable के प्रत्येक रिकॉर्ड के लिए संशोधित किए जाने वाले गुण हैं. परिवर्तन रिकॉर्ड को तर्क सूची के शुरुआत से अंत तक संसाधित किया जाता है, जिसमें बाद के गुण मान पहले वालों को ओवरराइड करते हैं.

रिकॉर्ड को मर्ज करें

Patch( रिकॉर्ड 1,रिकॉर्ड 2 [, ...] )

  • रिकॉर्ड्स - आवश्यक. ऐसे कम से कम दो रिकॉर्ड, जिन्हें आप मर्ज करना चाहते हैं. रिकॉर्ड को तर्क सूची के शुरुआत से अंत तक संसाधित किया जाता है, जिसमें बाद के गुण मान पहले वालों को ओवरराइड करते हैं.

उदाहरण

रिकॉर्ड संशोधित करें या बनाएं (डेटा स्रोत में)

इन उदाहरणों में, आप IceCream नामक डेटा स्रोत में रिकॉर्ड संशोधित करेंगे या बनाएंगे, जिसमें इस तालिका में डेटा शामिल होता है और जो IDस्तंभ में स्वचालित रूप से मान जनरेट करता है:

उदाहरण आइसक्रीम.

सूत्र वर्णन परिणाम
Patch(आइसक्रीम,
लुकअप (आइसक्रीम, स्वाद = "चॉकलेट"), {मात्रा: 400 })
IceCream डेटा स्रोत में रिकॉर्ड संशोधित करता है:
  • रिकॉर्ड का संशोधित किया जाने वाले ID स्तंभ में 1 मान है. (Chocolate रिकॉर्ड में वह ID है.)
  • Quantity स्तंभ में मान 400 में परिवर्तित होता है.
{आईडी: 1, स्वाद: "चॉकलेट", मात्रा: 400 }

IceCream डेटा स्रोत में Chocolate प्रविष्टि संशोधित की गई.
Patch(आइसक्रीम, डिफॉल्ट (आइसक्रीम), {स्वाद: "स्ट्रॉबेरी" } ) IceCream डेटा स्रोत में एक रिकॉर्ड बनाता है:
  • ID स्तंभ में मान 3 है, जिसे डेटा स्रोत स्वचालित रूप से जनरेट करता है.
  • Quantity स्तंभ में 0 है, जो IceCream डेटा स्रोत में उस स्तंभ के लिए डिफ़ॉल्ट मान है, जिसे Defaults फ़ंक्शन निर्दिष्ट करता है.
  • Flavor स्तंभ में Strawberry का मान शामिल है.
{आईडी: 3, स्वाद: "स्ट्रॉबेरी", मात्रा: 0}

IceCream डेटा स्रोत में Strawberry प्रविष्टि बनाई गई.

पिछले सूत्रों के मूल्यांकन के बाद, डेटा स्रोत इन मान से समाप्त होता है:

उदाहरण आइसक्रीम के बाद.

रिकॉर्ड मर्ज करें (डेटा स्रोत के बाहर)

सूत्र वर्णन परिणाम
Patch( { नाम: "जेम्स", स्कोर: 90 }, { नाम: "जिम", उत्तीर्ण: सत्य } ) डेटा स्रोत के बाहर दो रिकॉर्ड मर्ज करें:
  • Name स्तंभ में प्रत्येक रिकॉर्ड के मान मैच नहीं करते हैं. परिणाम में, रिकॉर्ड में मान (Jim) शामिल है, जो उस रिकॉर्ड में मान (James) के बजाय तर्क सूची के अंत के करीब है, जो प्रारंभ के करीब है.
  • पहले रिकॉर्ड में एक स्तंभ (Score) शामिल है, जो दूसरे रिकॉर्ड में मौजूद नहीं है. परिणाम में वह स्तंभ उसके मान (90) के साथ शामिल है.
  • दूसरे रिकॉर्ड में एक स्तंभ (Passed) शामिल है, जो पहले रिकॉर्ड में मौजूद नहीं है. परिणाम में वह स्तंभ उसके मान (सही) के साथ शामिल है.
{ नाम: "जिम", स्कोर: 90, उत्तीर्ण: सत्य}

के रूप में या ThisRecord का इस्तेमाल

सूत्र में के रूप में या 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"
       }
   )
    )
)

के रूप में या ThisRecord का इस्तेमाल

जब भी संभव हो के रूप में में संचालक या ThisRecord बायीं ओर को स्पष्ट करने के लिए इस्तेमाल करें. जैसा कि उपरोक्त परिदृश्य के लिए अनुशंसित है।

जब आपका सूत्र समान डेटा स्रोत या तालिका पर ForAll, Filter, और Lookup के साथ कई स्कोप इस्तेमाल करता है तो यह संभव है कि स्कोप मापदंड समान फ़ील्ड के साथ कहीं और परस्पर-विरोधी हो सकते हैं. इसलिए सुझाव दिया जाता है कि के रूप में में संचालक या ThisRecord को फ़ील्ड नाम हल करने और अस्पष्टता दूर करने के लिए इस्तेमाल करें.

उदाहरण के लिए, आप नीचे दिए गए उदाहरण में खंडन करने के लिए के रूप में संचालक का इस्तेमाल कर सकते हैं.

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 के बारे में और जानकारी के लिए पसंदीदा.