इसके माध्यम से साझा किया गया


Power FxYAML फॉर्मूला व्याकरण

नोट

Microsoft Power Fx कैनवास ऐप्स के लिए सूत्र भाषा का नया नाम है. ये आलेख प्रगति पर काम हैं जैसा कि हम कैनवास ऐप्स से भाषा निकालते हैं, इसे अन्य Microsoft Power Platform उत्पादों के साथ एकीकृत करते हैं, और इसे खुले स्रोत के रूप में उपलब्ध कराते हैं. भाषा के परिचय के लिए Microsoft Power Fx अवलोकन से शुरू करें.

Microsoft Power Fx में Excel पर आधारित अभिव्यक्तियों के लिए अच्छी तरह से स्थापित व्याकरण है. हालाँकि, जब Power Apps और अन्य होस्ट्स में उपयोग किया जाता है, जहां किसी फॉर्मूला के लिए UI नाम-से-अभिव्यक्ति बाध्यता प्रदान करता है, वहां पाठ के तौर पर फॉर्मूला बाध्यता संपादित करने का कोई मानक तरीका नहीं है.

हमने इस बाइंडिंग के लिए हमारी भाषा के रूप में उद्योग के मानक YAML का चयन किया है. YAML के साथ काम करने के लिए पहले से ही बड़ी संख्या में संपादक, साधन और लाइब्रेरी मौजूद हैं. यह आलेख बताता है कि हम YAML में फॉर्मूला को कैसे प्रदर्शित करते हैं.

इस समय, हम YAML के केवल सीमित उपसमूह का समर्थन करते हैं. इस आलेख में वर्णित केवल निर्माण समर्थित हैं.

कैनवास ऐप को परिभाषित करने वाली हर चीज का यहां प्रतिनिधित्व नहीं किया गया है; अतिरिक्त जानकारी अन्य फ़ाइलों के माध्यम से प्रवाहित होती है जिसे टूल उत्पन्न करता है और इस्तेमाल करता है.

प्रमुख बराबर का चिह्न

पहला और महत्वपूर्ण, सभी अभिव्यक्तियों को एक प्रमुख बराबर के चिह्न = के साथ शुरू करना चाहिए:

Visible: =true
X: =34
Text: |
	="Hello, " &
	"World"

हम तीन कारणों से इस तरीके से = का उपयोग करते हैं:

  • यह Excel के अनुरूप है, जो एक सेल में अभिव्यक्ति को बाइंड करने के लिए प्रमुख = का उपयोग करता है.
  • यह प्रभावी रूप से फॉर्मूला भाषा के सिंटैक्स से बच जाता है, ताकि YAML इसे पार्स करने का प्रयास न करे. आम तौर पर, YAML इसे एक नंबर में बदलते हुए text: 1:00 को मिनट और सेकंड के रूप में मानेगा. एक = को सम्मिलित करके, YAML अपने निहित टाइपिंग नियमों का उपयोग नहीं करेगा और फॉर्मूला को नुकसान नहीं होगा. = का उपयोग करना अधिकांश मामलों को कवर करता है, लेकिन सभी को नहीं, और उन अपवादों को निम्नलिखित अनुभाग में वर्णित किया गया है, एकल-पंक्ति फॉर्मूला.
  • भविष्य में, हम एक ही फ़ाइल में दोनों फ़ार्मूलों (= से शुरू होता है) का और गैर-फ़ार्मूलों (नहीं =) का समर्थन करेंगे, जैसे कि Excel करता है हम इसे Microsoft Power Platform स्रोत फ़ाइलों में एक जैसी YAML और गैर-YAML फ़ाइलों में कर सकते हैं. कहीं भी अगर फॉर्मूले का समर्थन किया जाता है, तो अग्रणी = स्थैतिक अदिश मान से Power Apps फॉर्मूला अभिव्यक्ति को अलग करता है.

एकल-पंक्ति फॉर्मूले

एकल-पंक्ति फॉर्मूले प्रपत्र में लिखे गए हैं:

नाम:SPACE=अभिव्यक्ति

कोलन और बराबर चिह्न के बीच का स्थान YAML-अनुरूप होना आवश्यक है. समान चिह्न अभिव्यक्ति के YAML की सामान्य व्याख्या को बाधित करता है, जिससे शेष पंक्ति की Power Fx के रूप में व्याख्या की जा सकती है. उदाहरण के लिए:

Text1: ="Hello, World"
Text2: ="Hello " & ", " & "World"
Number1: =34
Boolean1: =true
Time1: =1:34

संख्या चिह्न # और कोलन : को एकल-पंक्ति फ़ार्मूलों में कहीं भी अनुमति नहीं है, भले ही वे एक कोट किए गए टेक्स्ट स्ट्रिंग या पहचानकर्ता नाम में हों. संख्या चिह्न या कोलन का उपयोग करने के लिए, आपको फॉर्मूला को बहु-पंक्ति फॉर्मूला के रूप में व्यक्त करना चाहिए. संख्या चिन्ह की व्याख्या YAML में एक टिप्पणी के रूप में की जाती है, और कोलन की व्याख्या YAML में एक नए नाम मैप के रूप में की जाती है. एकल-पंक्ति टिप्पणी में एक टिप्पणी जोड़ने के लिए, Power Fx लाइन टिप्पणी का उपयोग // के साथ शुरू करें.

सिंगल कोट्स और सी-लाइक बैकस्लैश के साथ बचने वाले सामान्य YAML का उपयोग करना समर्थित नहीं है; इसके बजाय एक बहु-पंक्ति फॉर्मूला का उपयोग करें. यह एकरूपता के लिए है और Power Apps Studio और YAML स्रोत फ़ाइलों में फॉर्मूला बार के बीच कट/पेस्ट की सुविधा के लिए है.

अनुमत नामों और अभिव्यक्ति के विवरण की संरचना पर विवरण के लिए कैनवस अनुप्रयोग संचालक और पहचानकर्ता प्रलेखन देखें.

बहु-पंक्ति फॉर्मूला

फॉर्मूला YAML के ब्लॉक स्केलर संकेतकों का उपयोग करके कई पंक्तियों में में फैला हो सकता है:

नाम:SPACE ( | या |+ या |- ) =अभिव्यक्ति-पंक्तिअभिव्यक्ति-पंक्ति ...

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

उदाहरण के लिए:

Text1: |
    ="Hello, World"
Text2: |
    ="Hello" &
    "," &
    "World"

उदाहरण के लिए, सभी प्रकार के YAML बहुपंक्ति स्केलर नोटेशन आयात पर स्वीकार किए जाते हैं, जिसमें >+ शामिल है. हालांकि, यह सुनिश्चित करने के लिए कि व्हाइट्स्पेस को ठीक से संरक्षित किया गया है, केवल |, |+, या |- का उत्पादन किया जाता है.

घटक आवृत्ति

कंपोनेंट को YAML वस्तु नोटेशन का उपयोग करके दृष्टांत किया जाता है. ऑब्जेक्ट का प्रकार बाईं ओर के YAML टैग के एक भाग के रूप में As ऑपरेटर के साथ स्थापित किया गया है. कंटेनर नियंत्रणों के लिए, उद्देश्यों को नेस्टेड किया जा सकता है.

नामAsघटक-प्रकार [ .घटक-टेम्पलेट ] : ( एकल-पंक्ति-सूत्र या बहु-पंक्ति-सूत्र या ऑब्जेक्ट-इंस्टेंस ) ...

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

उदाहरण के लिए:

Gallery1 As Gallery.horizontalGallery:
    Fill: = Color.White
    Label1 As Label:
        Text: ="Hello, World"
        X: =20
        Y: =40
        Fill: |
            =If( Lower( Left( Self.Text, 6 ) ) = "error:",
                Color.Red,
                Color.Black
            ) 

घटक-प्रकार कोई भी कैनवास घटक या नियंत्रण हो सकता है। आधार प्रकार, जैसे कि संख्या, समर्थित नहीं हैं.

घटक-टेम्पलेट उन घटकों के लिए एक वैकल्पिक विनिर्देशक है जिनके पास अलग-अलग टेम्पलेट्स होते हैं, जैसे गैलरी। सभी कंपोनेंट में टेम्पलेट नहीं होते हैं.

यदि नाम में विशेष वर्ण होते हैं और एकल कोटेशन चिह्नों के साथ लिपटे हुए हैं, तो कोलन के बाईं साइड के पूरे वाक्यांश को सहेजना होगा. इसे निम्न में से एक तरीकों में किया जा सकता है:

  • संपूर्ण बाईं साइड को लपेटने के लिए एकल उद्धरण चिह्नों का उपयोग करें, जिसके लिए आवश्यक है कि मौजूदा एकल उद्धरण चिह्नों का दो बार उपयोग किया जाए:
    '''A name with a space'' As Gallery':
    
  • संपूर्ण बाईं ओर को लपेटने के लिए दोहरे कोटेशन चिह्नों का उपयोग करें, लेकिन सुनिश्चित करें कि नाम में कोई दोहरे कोटेशन चिह्न नहीं हैं:
    "'A name with a space' As Gallery":
    

घटक परिभाषा

इसी प्रकार, घटकों को समर्थित आधार प्रकारों में से एक का घटना बनाकर परिभाषित किया जाता है. आधार प्रकारों का सीधे दृष्टांत नहीं दिया जा सकता है. किसी वस्तु परिभाषा के भीतर, गुणों को जोड़ा जा सकता है जो आधार प्रकार प्रदान करता है.

समर्थित आधार प्रकार हैं: CanvasComponent

सरल गुण परिभाषा

कंपोनेंट उस ऐप के साथ संवाद करने के लिए गुणों का उपयोग करते हैं जिसमें वे होस्ट होते हैं.

नाम: ( एकल-पंक्ति-अभिव्यक्ति या बहु-पंक्ति-अभिव्यक्ति )

फॉर्मूला का प्रकार अभिव्यक्ति के प्रकार से अंतर्निहित है.

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

आउटपुट गुणों के लिए, अभिव्यक्ति प्रदर्शन की जाने वाली गणना प्रदान करती है. निर्माता इस अभिव्यक्ति को संशोधित नहीं कर सकता है, यह कंपोनेंट में समझाया गया है.

इस समय, सभी गुण सिर्फ डेटा प्रवाह हैं और इसमें दुष्प्रभाव नहीं हो सकते हैं.

इस समय, परिसंपत्ति के बारे में अतिरिक्त मेटाडेटा यहां परिभाषित नहीं है, बल्कि इसके बजाय .msapp फ़ाइल की अन्य फ़ाइलों में परिभाषित किया गया है, उदाहरण के लिए परिसंपत्ति का विवरण.

उदाहरण के लिए:

DateRangePicker As CanvasComponent:
    DefaultStart: |-
		=// input property, customizable default for the component instance
		Now()                      
    DefaultEnd: |-
		=// input property, customizable default for the component instance
		DateAdd( Now(), 1, Days )    
    SelectedStart: =DatePicker1.SelectedDate   // output property
    SelectedEnd: =DatePicker2.SelectedDate     // output property

YAML अनुकूलता

YAML टिप्पणियां

संख्या चिह्न # द्वारा सीमांकित YAML पंक्ति टिप्पणी स्रोत प्रारूप में कहीं भी संरक्षित नहीं हैं. इसके बजाय, एक फॉर्मूला के अंदर, // वर्णों के साथ सीमांकित पंक्ति टिप्पणियां करें या /* और */ के साथ टिप्पणियों को ब्लॉक करें. अधिक जानकारी: टिप्पणियां

आम चूकों के लिए त्रुटियां

कुछ ऐसे स्थान हैं जहां Power Fx और YAML व्याकरण असंगत हैं या उपयोगकर्ता के लिए भ्रामक हो सकते हैं. इन मामलों में, एक त्रुटि सामने आती है.

उदाहरण के लिए, निम्नलिखित में:

Text: ="Hello #PowerApps"
Record: ={ a: 1, b: 2 }

संख्या चिह्न # को YAML द्वारा एक टिप्पणी के रूप में माना जाता है, भले ही उसके अंदर एम्बेडेड हो जिसे Excel एक टेक्स्ट स्ट्रिंग मानता है (दोहरे कोटेशन चिह्नों द्वारा लिपटा). भ्रम से बचने के लिए, यह मामला आयात के दौरान एक त्रुटि सामने लाएगा. इसके बजाय एक YAML बहुपंक्ति प्रपत्र का उपयोग किया जा सकता है.

record के लिए मान के मामले में, YAML a: और b: को एक अन्य नाम मैप बाइंडिंग मानता है. YAML एक ही नाम मैप को अंतिम वाले को चुपचाप किसी भी पिछली परिभाषाओं को ओवरराइड करने के साथ पुन: उपयोग करने देता है. क्योंकि यह लो-कोड निर्माता के लिए भ्रामक हो सकता है और एक परिसंपत्ति फॉर्मूला के नुकसान में परिणत हो सकती है, अगर एक ही नाम दो बार सामने आता है, तो एक त्रुटि सामने आती है.