Power Apps में Patch फ़ंक्शन

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

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

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

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

अवलोकन

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

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

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

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

यहां तक कि यदि आप डेटा स्रोत के साथ कार्य नहीं कर रहे हैं, तो भी आप दो या अधिक रिकॉर्ड मर्ज करने के लिए 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'

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

Related फ़ंक्शन में संपूर्ण रिकॉर्ड को बदलने के लिए 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) - आवश्यक. ऐसे कम से कम दो रिकॉर्ड, जिन्हें आप मर्ज करना चाहते हैं. रिकॉर्ड को तर्क सूची के शुरुआत से अंत तक संसाधित किया जाता है, जिसमें बाद के गुण मान पहले वालों को ओवरराइड करते हैं.

उदाहरण

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

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

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

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

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

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

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

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

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

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

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

सूत्र में के रूप में या ThisRecord कीवर्ड का इस्तेमाल अस्पष्ट मूल्यांकन के संदर्भ से बचता है.

निम्न उदाहरण में, If कथन में पहले लुकअप पर विचार करें. (OrderID = A[@OrderID]) लुकअप स्कोप में ForAll स्कोप में A संग्रह के OrderId के साथ OrderId की तुलना की जा सकती है. इस स्थिति में, आप चाहते हैं कि स्थानीय मापदंड के रूप में 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 के बारे में और जानकारी के लिए पसंदीदा.