अनटाइप्ड और डायनामिक ऑब्जेक्ट के साथ कार्य करना
Power Apps में क्रियाओं से निपटते समय, कुछ क्रियाओं के लिए अप्रकारित रिटर्न मान या इनपुट मानों का सामना करना संभव है। पहले, Power Apps अलिखित या गतिशील इनपुट फ़ील्ड को अनदेखा कर देता था, और वे PowerFX अभिव्यक्तियों में दिखाई नहीं देते थे, लेकिन अब, आप इन फ़ील्ड के साथ सीधे काम कर सकते हैं। इससे पहले, जब रिटर्न प्रकार अलिखित होता था, Power Apps एक बूलियन मान लौटाता था। अब, यह इसके स्थान पर अनटाइप्ड ऑब्जेक्ट लौटाता है।
नोट
मान लीजिए कि आपके Power Fx एक्सप्रेशन इन फ़ंक्शनों से बूलियन रिटर्न मान पर निर्भर हैं। उस स्थिति में, आपको सूत्र को फिर से लिखना होगा और स्पष्ट रूप से अनटाइप्ड ऑब्जेक्ट को बूलियन में बदलना होगा। कुछ फ़ंक्शन, जैसे 'IfError', अभी तक अप्रकारित ऑब्जेक्ट्स का पूर्ण समर्थन नहीं करते हैं। यदि आपकी अभिव्यक्ति में ऐसा कोई फ़ंक्शन है, तो वैकल्पिक समाधान के लिए इस आलेख के अंत में दिए गए नोट को देखें।
अप्रकारित ऑब्जेक्ट को पैरामीटर के रूप में पास करना
कुछ कार्यों के लिए पैरामीटर मान के रूप में अनटाइप्ड ऑब्जेक्ट की आवश्यकता होती है। यदि आपके पास कोई Power Fx रिकॉर्ड है, तो आप उसे अनटाइप्ड ऑब्जेक्ट में परिवर्तित कर सकते हैं, जिससे वह एक्शन में पास करने के लिए उपयुक्त हो जाएगा।
नीचे दिए गए उदाहरण में, a Dataverse Account तालिका पर उपलब्ध मर्ज क्रिया के लिए कई अप्रकारित तर्कों की आवश्यकता होती है। तैयारी के लिए, हम TargetObject, SubordinateObject, और UpdateContextObject को धारण करने के लिए तीन चर परिभाषित करेंगे। हम एक चर को टेक्स्ट स्ट्रिंग Microsoft.Dynamics.CRM.account असाइन करके शुरू करेंगे, जिसका पूरे उदाहरण में पुनः उपयोग किया जाएगा.
Set (OdataType, “Microsoft.Dynamics.CRM.account”);
फिर TargetObject को नाम, accountid, और Power Fx के गुणों के साथ एक @odata.type रिकॉर्ड सौंपा जाता है। हम इसी प्रकार Subordinate और UpdateContext ऑब्जेक्ट्स को भी Power Fx रिकॉर्ड असाइन करते हैं।
Set (TargetObject, {name: "Test 2", accountid: "145dc2ba-85a2-ed11-aado-0022482d76a5", '@odata.type': OdataType});
Set (SubordinateObject, {name: FirstRecord.’Account name’, accountid: FirstRecord.Account, ‘@odata.type’ : OdataType });
Set (UpdateContextObject, {telephone1: FirstRecord.’Main Phone’, address1_city: FirstRecord.’Address 1 : City’, ‘@odata.type’ : OdataType });
इसके बाद, हम रूपांतरण के बाद अप्रकारित रिकॉर्ड को संग्रहीत करने के लिए तीन और चर बनाएंगे: TargetUntypedObject, SubordinateUntypedObject, और UpdateContextUntypedObject. रूपांतरण करने के लिए, हम मूल चरों पर ParseJSON(JSON()) फ़ंक्शन का उपयोग करेंगे। यह क्रिया Power Fx रिकॉर्ड को अलिखित ऑब्जेक्ट में रूपांतरित कर देगी।
Set (TargetUntypedObject, ParseJSON(JSON(TargetObject)));
Set (SubordinateUntypedObject, ParseJSON(JSON(SubordinateObject)));
Set (UpdateContextUntypedObject, ParseJSON(JSON(UpdateContextObject)));
अंत में, हम आवश्यक पैरामीटर्स को पास करके मर्ज क्रिया को कॉल करते हैं, जिसमें अनटाइप्ड और टाइप्ड दोनों शामिल हैं:
Environment.Merge({Target: TargetUntypedObject, Subordinate: SubordinateUntypedObject, UpdateContent: UpdateContextUntypedObject, PerformParentingChecks: false });
एक क्रिया के माध्यम से लौटाए गए अनटाइप्ड ऑब्जेक्ट का उपयोग करना
यदि कोई एक्शन आधारित कनेक्टर कोई ऑब्जेक्ट लौटाता है, तो उसके गुणों तक सीधे पहुँचा जा सकता है, भले ही उन्हें कोई प्रकार निर्दिष्ट किया गया हो या नहीं। हालाँकि, यदि आप किसी प्रॉपर्टी का उपयोग किसी विशिष्ट उद्देश्य के लिए करना चाहते हैं, जैसे लेबलिंग के लिए, तो आपको पहले उसे कास्ट करना होगा। Power Apps
निम्नलिखित उदाहरण में, httpRequest फ़ंक्शन अनटाइप्ड ऑब्जेक्ट लौटाता है जिसे पहले बूलियन के रूप में डाला गया है।
Set (response, Office365Groups.HttpRequest("/v1.0/me", "GET", ""));
प्रत्युत्तर में एक गुण displayName है। इसे निम्नलिखित Power Fx अभिव्यक्ति के साथ एक्सेस और कास्ट किया जा सकता है:
Text(response.displayName)
टेक्स्ट को Power Apps लेबल नियंत्रण में उपयोग करने के लिए ऑब्जेक्ट पर कास्ट करें।
गतिशील क्षेत्रों के साथ कार्य करना
क्रिया प्रतिक्रियाएँ अब गतिशील आउटपुट कैप्चर करती हैं, और आप इन गुणों तक पहुँचने के लिए ऊपर वर्णित विधि का उपयोग कर सकते हैं। इसके अतिरिक्त, गतिशील इनपुट फ़ील्ड के साथ काम करना भी संभव है।
Microsoft Teams में 'GetMessageDetails' क्रिया पर विचार करें जिसमें एक गतिशील इनपुट बॉडी पैरामीटर है। पहले, इस पैरामीटर को देखा या निर्दिष्ट नहीं किया जा सकता था। हालिया अपडेट के साथ, आप उपयुक्त रिकॉर्ड संरचना के साथ 'बॉडी' नामक एक चर सेट कर सकते हैं। Power Fx
Set ( body, ParseJSON(JSON( {recipient: { groupID: “7f733b36-7c7f-4f4c-9699-0a7b7a2b3897”, channelID: “19: 085d522328fb4a439220641006f7f25@thread.tacv2”}}));
फिर, हम GetMessageDetails क्रिया को कॉल कर सकते हैं और teamsResponse चर को प्रत्युत्तर असाइन कर सकते हैं।
Set (teamsResponse, MicrosoftTeams.GetMessageDetails ( 1661365068558, “channel”, body ));
उन सूत्रों को परिवर्तित करना जो अप्रकारित ऑब्जेक्ट लौटाते हैं जो पहले बूलियन लौटाते थे।
Power Fx सीमित संख्या में अप्रकारित ऑब्जेक्ट्स लेता है, इसलिए आपके सूत्र के लिए स्पष्ट रूपांतरण आवश्यक हो सकता है। विशेष रूप से, यदि आपका सूत्र बूलियन प्रत्युत्तर पर निर्भर करता है तो आपको रूपांतरण करने की आवश्यकता होगी। यदि आपको यह जानना है कि कोई त्रुटि मौजूद है या नहीं, तो आप IsError फ़ंक्शन का उपयोग कर सकते हैं:
If(
IsError(Office365Outlook.CalendarDeleteItemV2("Calendar", 1)),
Notify("An Outlook appointment could not be found or could not be deleted")
)
IfError के माध्यम से विशेष रूप से उपलब्ध त्रुटि जानकारी तक पहुंचने के लिए, आपको बूलियन, टेक्स्ट या वैल्यू जैसे रूपांतरण फ़ंक्शन का उपयोग करके अनटाइप्ड ऑब्जेक्ट को एक वैध प्रकार में बदलना होगा। यदि इन फ़ंक्शनों को एक त्रुटि दी जाए तो वे त्रुटि उत्पन्न करेंगे। निम्नलिखित उदाहरण इसे स्पष्ट करता है:
With({result: Office365Outlook.CalendarDeleteItemV2("Calendar", 1)},
If( IsError(result),
IfError(
Boolean(result), // any conversion function would do, such as Text, Value, …
Notify("An Outlook appointment could not be found or could not be deleted: " & FirstError.Message)
) ) )