त्रुटि, IfError, IsError, IsBlankOrError functions
इस पर लागू होता है: कैनवास ऐप्स Dataverse सूत्र कॉलम डेस्कटॉप मॉडल-संचालित ऐप्स Power Platform सीएलआई
त्रुटियों का पता लगाता है और एक वैकल्पिक मान प्रदान करता है या कार्रवाई करता है. एक कस्टम त्रुटि बनाएँ या त्रुटि से पास करें.
नोट
- यह आलेख जिस व्यवहार का वर्णन करता है वह केवल तभी उपलब्ध होता है जब सेटिंग्स > आगामी सुविधाएँ > पूर्वावलोकन में सूत्र-स्तरीय त्रुटि प्रबंधन पूर्वावलोकन सुविधा चालू हो.
यदि त्रुटि
IfError फ़ंक्शन तब तक मानों का परीक्षण करता है, जब तक कि उसे कोई त्रुटि न मिल जाए. यदि फ़ंक्शन को कोई त्रुटि मिलती है, तो फ़ंक्शन मूल्यांकन करता है और एक संबंधित प्रतिस्थापन मान दिखाता है और आगे के मूल्यांकन को रोक देता है. कोई त्रुटि नहीं मिलने पर एक डिफ़ॉल्ट मान भी दिखाया जा सकता है. IfError की संरचना, If फ़ंक्शन से मिलती-जुलती होती है: IfError त्रुटियों की जाँच करता है, जबकि Ifसही की जाँच करता है.
IfError का उपयोग त्रुटि को एक मान्य मान से बदलने के लिए करें, ताकि डाउनस्ट्रीम गणना जारी रह सकें. उदाहरण के लिए, यदि उपयोगकर्ता के इनपुट का परिणाम शून्य से विभाजन हो सकता है, तो इस फ़ंक्शन का उपयोग करें:
IfError( 1/x, 0 )
यदि x
का मान शून्य है, तो यह सूत्र 0
दिखाता है, क्योंकि 1/x
एक त्रुटि उत्पन्न करेगा. यदि x
शून्य नहीं है, तो 1/x
दिखाया जाता है.
आगे का संसाधन रोकना
व्यवहार सूत्रों में सूत्रों की एक-साथ चेनिंग करने पर, जैसे कि:
Patch( DS1, ... );
Patch( DS2, ... )
भले ही DS1
के लिए Patch विफल हो जाए, फिर भी DS2
के लिए दूसरे Patch फ़ंक्शन का प्रयास किया जाएगा. त्रुटि का दायरा चेन हुए प्रत्येक सूत्र तक सीमित होता है.
कार्रवाई करने के लिए IfError का उपयोग करें और संसाधन केवल तब ही जारी रखें, जब कार्रवाई सफल हुई हो. इस उदाहरण पर IfError लागू करना:
IfError(
Patch( DS1, ... ), Notify( "problem in the first action" ),
Patch( DS2, ... ), Notify( "problem in the second action" )
)
यदि DS1
के Patch में कोई समस्या है, तो पहला Notify निष्पादित किया जाता है. DS2
के दूसरे Patch सहित आगे कोई संसाधन कार्रवाई नहीं होती है. यदि पहला Patch सफल होता है, तो दूसरा Patch निष्पादित किया जाएगा.
यदि कोई त्रुटि नहीं पाई जाती है, तो प्रदान किए जाने पर, वैकल्पिक DefaultResult तर्क दिखाया जाता है. इस तर्क के बिना, अंतिम मान तर्क दिखाया जाता है.
अंतिम उदाहरण के अनुसार, IfError से वापसी मान को यह पता लगाने के लिए जाँचा जा सकता है कि कोई समस्या थी या नहीं:
IfError(
Patch( DS1, ... ), Notify( "problem in the first action" ); false,
Patch( DS2, ... ), Notify( "problem in the second action" ); false,
true
)
प्रकार संगतता
IfError अपने किसी एक तर्क का मान दिखाएगा. IfError द्वारा दिखाए गए सभी मानों के प्रकार संगत होने चाहिए.
पिछले उदाहरण में, Patch वह रिकॉर्ड दिखाएगा, जो प्रतिस्थापन सूत्रों या DefaultResult के लिए उपयोग किए जाने वाले बूलियंस के संगत नहीं है. जो ठीक है, क्योंकि ऐसी कोई स्थिति नहीं है, जिसमें इन Patch कॉल का वापसी मान IfError द्वारा लौटाया जाएगा.
नोट
व्यवहार में बदलाव की प्रक्रिया के दौरान, IfError के सभी तर्कों के प्रकार वर्तमान में संगत होने चाहिए.
पहले वर्णित सामान्य उदाहरण में:
IfError( 1/x, 0 )
1/x
और 0
के प्रकार सुसंगत थे क्योंकि दोनों ही संख्याएं थीं. यदि वे नहीं थे, तो दूसरे तर्क को पहले तर्क के प्रकार से मैच करने के लिए बाध्य किया जाएगा.
शून्य से विभाजन होने पर Excel #DIV/0! प्रदर्शित करेगा.
इसके बजाय, निम्न के साथ IfError पर विचार करें:
IfError( 1/x, "#DIV/0!" )
ऊपर दिया गया सूत्र काम नहीं करेगा. पाठ स्ट्रिंग "#DIV/0!"
को पहले तर्क के प्रकार IfError के लिए बाध्य किया जाएगा, जो कि एक संख्या है. IfError का परिणाम एक और त्रुटि होगा, क्योंकि पाठ स्ट्रिंग को बाध्य नहीं किया जा सकता. इसके समाधान के लिए, पहले तर्क को पाठ स्ट्रिंग में रूपांतरित करें, ताकि IfError हमेशा एक पाठ स्ट्रिंग दिखाए:
IfError( Text( 1/x ), "#DIV/0!" )
जैसा कि ऊपर देखा गया है, यदि प्रतिस्थापन या DefaultResult एक त्रुटि है, तो IfError एक त्रुटि दिखा सकता है.
FirstError / AllErrors
प्रतिस्थापन सूत्रों में, पाई गई किसी भी त्रुटि के बारे में जानकारी FirstError रिकॉर्ड और AllErrors तालिका में उपलब्ध है. AllErrors त्रुटि सूचना रिकॉर्ड की तालिका है, जिसमें FirstError इस तालिका के पहले रिकॉर्ड का शॉर्टकट है. FirstError हमेशा First( AllErrors ) के समान मान लौटाएगा.
त्रुटि रिकॉर्ड में शामिल हैं:
क्षेत्र | Type | विवरण |
---|---|---|
प्रकार | ErrorKind एनम (संख्या) | त्रुटि की श्रेणी. |
संदेश | पाठ स्ट्रिंग | त्रुटि के बारे में संदेश, जो अंतिम उपयोगकर्ता को प्रदर्शित करने के लिए उपयुक्त है. |
स्रोत | पाठ स्ट्रिंग | वह स्थान जहाँ त्रुटि उत्पन्न हुई, रिपोर्टिंग के लिए उपयोग किया गया. उदाहरण के लिए, नियंत्रण गुण से सीमित सूत्र के लिए, यह ControlName.PropertyName के रूप में होगा. |
देखा | पाठ स्ट्रिंग | वह स्थान जहाँ उपयोगकर्ता को त्रुटि दिखाई देती है, रिपोर्टिंग के लिए उपयोग किया जाता है. उदाहरण के लिए, नियंत्रण गुण से सीमित सूत्र के लिए, यह ControlName.PropertyName के रूप में होगा. |
विवरण | रिकॉर्ड | त्रुटि के बारे में विवरण. वर्तमान में, विवरण केवल नेटवर्क त्रुटियों के लिए प्रदान किए जाते हैं. इस रिकॉर्ड में HttpStatusCode शामिल है जिसमें HTTP स्थिति कोड शामिल है और HttpResponse जिसमें कनेक्टर या सेवा से प्रतिक्रिया का मुख्य भाग शामिल है. |
उदाहरण के लिए, निम्न सूत्र को एक बटन नियंत्रण का OnSelect गुण मानें:
Set( a, 1/0 )
और दूसरा बटन नियंत्रण की OnSelect संपत्ति पर यह सूत्र:
IfError( a, Notify( "Internal error: originated on " & FirstError.Source & ", surfaced on " & FirstError.Observed ) )
जब दो बटन क्रम से सक्रिय होते हैं तो उपरोक्त उदाहरण सूत्र निम्नलिखित बैनर प्रदर्शित करेगा:
आमतौर पर, केवल एक त्रुटि होगी जिसके साथ FirstError पर्याप्त रूप से काम कर सकती है. हालाँकि, ऐसे परिदृश्य हैं जहाँ कई त्रुटियाँ वापस आ सकती हैं. उदाहरण के लिए, फ़ॉर्मूला चेनिंग ऑपरेटर या Concurrent फ़ंक्शन का इस्तेमाल करते समय. इन स्थितियों में भी, FirstError की रिपोर्ट करना एक समस्या को प्रकट करने के लिए पर्याप्त हो सकता है, बजाय इसके कि उपयोगकर्ता को कई त्रुटियों के साथ ओवरलोड किया जाए. यदि आपको अभी भी प्रत्येक त्रुटि के साथ व्यक्तिगत रूप से काम करने की आवश्यकता है, तो आप AllErrors तालिका का उपयोग कर सकते हैं.
क्या त्रुटि है
IsError फ़ंक्शन त्रुटि मान की जाँच करता है.
वापसी मान एक बूलियन है सही या गलत.
IsError का उपयोग करना त्रुटि को आगे संसाधित करने से रोकेगा.
IsBlankOrError
IsBlankOrError फ़ंक्शन किसी रिक्त मान या त्रुटि मान के लिए जांच करता है और Or( IsBlank( X ), IsError( X ) )
के बराबर है.
मौजूदा ऐप्स के लिए त्रुटि प्रबंधन सक्षम करते समय, मौजूदा ऐप व्यवहार को संरक्षित करने के लिए IsBlank को IsBlankOrError से बदलने पर विचार करें. त्रुटि प्रबंधन को जोड़ने से पहले, डेटाबेस और त्रुटि मानों से दोनों शून्य मानों का प्रतिनिधित्व करने के लिए एक रिक्त मान का उपयोग किया जाता था. त्रुटि प्रबंधन रिक्त की इन दो व्याख्याओं को अलग करता है, जो IsBlank का उपयोग जारी रखने वाले मौजूदा ऐप्स के व्यवहार को बदल सकता है.
वापसी मान एक बूलियन है सही या गलत.
IsBlankOrError का उपयोग करने से त्रुटि की आगे की प्रक्रिया को रोका जा सकेगा.
कस्टम त्रुटि बनाने और रिपोर्ट करने के लिए के लिए त्रुटि फ़ंक्शन का उपयोग करें. उदाहरण के लिए, आपके पास यह निर्धारित करने के लिए तर्क हो सकता है कि कोई दिया गया मान आपके संदर्भ के लिए मान्य है या नहीं—किसी समस्या के लिए स्वचालित रूप से कुछ चेक नहीं किया गया है। आप अपनी स्वयं की त्रुटि बना सकते हैं और वापस कर सकते हैं, तो IfError फ़ंक्शन के लिए ऊपर वर्णित समान रिकॉर्ड का उपयोग करके, Kind और Message के साथ पूर्ण करें.
IfError के संदर्भ में, त्रुटि फ़ंक्शन का उपयोग किसी त्रुटि को फिर से फेंकने या पास करने के लिए करें. उदाहरण के लिए, IfError में आपका तर्क तय कर सकता है कि कुछ मामलों में किसी त्रुटि को सुरक्षित रूप से अनदेखा किया जा सकता है, लेकिन अन्य मामलों में त्रुटि को भेजना महत्वपूर्ण है. IfError या App.OnError के भीतर, त्रुटि से गुजरने के लिए Error( FirstError ) का उपयोग करें.
त्रुटि फ़ंक्शन को त्रुटियों की तालिका भी दी जा सकती है, जैसा कि AllErrors तालिका में पाया जाएगा. केवल पहली ही नहीं बल्कि सभी त्रुटियों को फिर से फेंकने के लिए Error( AllErrors ) का उपयोग करें.
रिक्त रिकॉर्ड या रिक्त तालिका त्रुटि को पास करने पर कोई त्रुटि नहीं होती है.
सिंटैक्स
Error( ErrorRecord )
Error( ErrorTable )
- ErrorRecord – आवश्यक. त्रुटि सूचना रिकॉर्ड, जिसमें Kind, Message, और अन्य फ़ील्ड शामिल हैं. Kind आवश्यक है. FirstError को सीधे पास किया जा सकता है.
- ErrorTable – आवश्यक. त्रुटि सूचना रिकॉर्ड की तालिका. AllErrors को सीधे पास किया जा सकता है.
IfError( Value1, Replacement1 [, Value2, Replacement2, ... [, DefaultResult ] ] )
- Value(s) – आवश्यक. त्रुटि मान की जाँच करने का सूत्र.
- Replacement(s) – आवश्यक. यदि मैचिंग मान तर्क कोई त्रुटि देते हैं, तो मूल्यांकन किए जाने वाले सूत्र और लौटाए जाने वाले मान.
- DefaultResult – वैकल्पिक. यदि सूत्र में कोई त्रुटि नहीं मिलती है, तो मूल्यांकन किए जाने वाले सूत्र.
IsError( Value )
IsBlankOrError( मान )
- मान – आवश्यक है. जांच के लिए फॉर्मूला.
उदाहरण
सामान्य IfError
सूत्र | विवरण | परिणाम |
---|---|---|
IfError( 1, 2 ) | पहला तर्क कोई त्रुटि नहीं है. फ़ंक्शन में जाँचने के लिए कोई अन्य त्रुटि नहीं है और कोई डिफ़ॉल्ट वापसी मान नहीं है. फ़ंक्शन अंतिम मान तर्क को मूल्यांकित के रूप में दिखाता है. | 1 |
IfError( 1/0, 2 ) | पहला तर्क एक त्रुटि मान देता है (शून्य से विभाजन के कारण). फ़ंक्शन दूसरे तर्क का मूल्यांकन करता है और परिणाम के रूप में उसे दिखाता है. | 2 |
IfError( 10, 20, 30 ) | पहला तर्क कोई त्रुटि नहीं है. फ़ंक्शन में जाँचने के लिए कोई अन्य त्रुटि नहीं है, लेकिन उसमें एक डिफ़ॉल्ट वापसी मान है. फ़ंक्शन DefaultResult तर्क दिखाता है. | 30 |
IfError( 10, 11, 20, 21, 300 ) | पहला तर्क 10 कोई त्रुटि नहीं है, इसलिए फ़ंक्शन उस तर्क के संगत प्रतिस्थापन 11 का मूल्यांकन नहीं करता है. तीसरा तर्क 20 भी कोई त्रुटि नहीं है, इसलिए फ़ंक्शन उस तर्क के संगत प्रतिस्थापन 21 का मूल्यांकन नहीं करता है. पाँचवें तर्क 300 में कोई संगत प्रतिस्थापन नहीं है और डिफ़ॉल्ट परिणाम है. फ़ंक्शन वह परिणाम देता है, क्योंकि सूत्र में कोई त्रुटि नहीं है. | 300 |
IfError( 1/0, Notify( "एक आंतरिक समस्या थी" ) ) | पहला तर्क एक त्रुटि मान देता है (शून्य से विभाजन के कारण). फ़ंक्शन दूसरे तर्क का मूल्यांकन करता है और उपयोगकर्ता को एक संदेश दिखाता है. IfError का वापसी मान Notify का वापसी मान होता है और उसी प्रकार में बाध्य होता है, जिसमें IfError का पहला तर्क होता है (एक संख्या). | 1 |
सामान्य IsError
सूत्र | वर्णन | परिणाम |
---|---|---|
IsError( 1 ) | तर्क कोई त्रुटि नहीं है. | false |
IsError( रिक्त() ) | तर्क रिक्त है, लेकिन त्रुटि नहीं है. | false |
IsError( 1/0 ) | तर्क एक त्रुटि है. | सही |
If( IsError( 1/0 ), Notify( "एक आंतरिक समस्या थी" ) ) | IsError का तर्क एक त्रुटि मान देता है (शून्य से विभाजन के कारण). यह फ़ंक्शन सच लौटाता है, जिसके कारण If उपयोगकर्ता को Notify फ़ंक्शन के साथ एक संदेश प्रदर्शित करता है. If का वापसी मान Notify का वापसी मान होता है और उसी प्रकार में बाध्य होता है, जिसमें If का पहला तर्क होता है (बूलियन). | सही |
सरल IsBlankOrError
सूत्र | विवरण | परिणाम |
---|---|---|
IsBlankOrError( 1 ) | तर्क त्रुटि या रिक्त नहीं है. | false |
IsBlankOrError( Blank() ) | तर्क रिक्त है. | सही |
IsBlankOrError( 1/0 ) | तर्क एक त्रुटि है. | सही |
सामान्य त्रुटि
इस उदाहरण में, तिथियाँ एक दूसरे के सापेक्ष मान्य हैं, जिसके परिणामस्वरूप कोई समस्या होने पर त्रुटि होती है.
If( StartDate > EndDate,
Error( { Kind: ErrorKind.Validation, Message: "Start Date must be before End Date" } ) )
इस उदाहरण में, कुछ त्रुटियों को पारित करने की अनुमति दी जाती है जबकि अन्य को दबा दिया जाता है और एक मान के साथ बदल दिया जाता है. पहले मामले में, b एक त्रुटि स्थिति में होगा क्योंकि मान फ़ंक्शन में एक अमान्य तर्क है. क्योंकि यह सूत्र लेखक द्वारा अनपेक्षित है, इसे पारित किया जाता है ताकि उपयोगकर्ता इसे देख सके. दूसरे मामले में, समान सूत्र के साथ, b का मान 0 होगा, जिसके परिणामस्वरूप शून्य से विभाजन होगा. इस मामले में, सूत्र लेखक को पता चल सकता है कि यह इस तर्क के लिए स्वीकार्य है, त्रुटि को दबाएं (कोई बैनर नहीं दिखाया गया है), और बदले में -1 लौटाएँ.
With( {a: 1, b: Value("a")},
IfError( a/b, If( FirstError.Kind <> ErrorKind.Div0, Error( FirstError ), -1 ) ) )
// returns an error with Kind = ErrorKind.InvalidArgument
With( {a: 1, b: 0} )
IfError( a/b, If( FirstError.Kind <> ErrorKind.Div0, Error( FirstError ), -1 ) ) )
// returns -1
AllErrors तालिका को किसी अन्य तालिका की तरह फ़िल्टर किया जा सकता है. त्रुटि फ़ंक्शन के साथ उपयोग किया जाता है, अपेक्षित त्रुटियां निकाली जा सकती हैं और शेष त्रुटियां बरकरार रखी जाती हैं और रिपोर्ट की जाती हैं. उदाहरण के लिए, यदि हम जानते थे कि शून्य से विभाजन किसी विशेष संदर्भ में कोई समस्या नहीं होने वाला था, तो उन त्रुटियों को फ़िल्टर किया जा सकता है, अन्य सभी त्रुटियों को निम्न सूत्र के साथ बरकरार रखा जा सकता है:
Error( Filter( AllErrors, Kind <> ErrorKind.Div0 ) )
चरण दर चरण
एक पाठ इनपुट नियंत्रण जोड़ें और यदि डिफ़ॉल्ट रूप से उसका नाम TextInput1 नहीं है, तो उसे यह नाम दें.
एक लेबल नियंत्रण जोड़ें और यदि डिफ़ॉल्ट रूप से उसका नाम Label1 नहीं है, तो उसे यह नाम दें.
Label1 के पाठ के लिए गुण को इस पर सेट करें:
IfError( Value( TextInput1.Text ), -1 )
TextInput1 में, 1234 दर्ज करें.
Label1, मान 1234 दिखाएगा, क्योंकि यह मान फ़ंक्शन के लिए एक मान्य इनपुट है.
TextInput1 में, ToInfinity दर्ज करें.
Label1, मान -1 दिखाएगा, क्योंकि यह मान फ़ंक्शन के लिए एक मान्य इनपुट है. IfError के साथ मान फ़ंक्शन को रैप किए बिना, लेबल कोई मान नहीं दिखाएगा, क्योंकि त्रुटि मान को रिक्त माना जाता है.