แชร์ผ่าน


Power Fxไวยากรณ์ของสูตร YAML

หมายเหตุ

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 เราสามารถทำได้ในไฟล์ YAML และไฟล์ที่ไม่ใช่ YAML เช่นกันในไฟล์ต้นฉบับ Microsoft Power Platform ทุกที่ที่รองรับสูตรที่มีเครื่องหมาย = นำหน้าจะแตกต่างจากสูตรที่แสดงใน 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 ปกติที่หลีกเลี่ยงเครื่องหมายคำพูดเดี่ยวและเครื่องหมายทับขวาแบบ C ให้ใช้สูตรหลายบรรทัดแทน นี่คือเพื่อความสอดคล้องและเพื่ออำนวยความสะดวกในการตัด/วางระหว่างแถบสูตรใน Power Apps Studio และไฟล์ต้นฉบับ YAML

ดูแอปพื้นที่ทำงาน ตัวดำเนินการและตัวระบุ เอกสารสำหรับรายละเอียดเกี่ยวกับชื่อที่อนุญาตและโครงสร้างของการแสดงออก

สูตรหลายบรรทัด

สูตรสามารถขยายได้หลายบรรทัดโดยใช้ตัวบ่งชี้สเกลาร์บล็อกของ YAML:

ชื่อ:SPACE ( | หรือ |+ หรือ |- ) =Expression-LineExpression-Line ...

บรรทัดทั้งหมดที่เป็นส่วนหนึ่งของบล็อกต้องเยื้องเข้าข้างในอย่างน้อยหนึ่งช่องว่างจากระดับของบรรทัดแรก

ตัวอย่างเช่น

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

ฟอร์มทั้งหมดของเครื่องหมายสเกลาร์หลายบรรทัดของ YAML multiline ได้รับการยอมรับในการนำเข้า ซึ่งรวมถึง ตัวอย่างเช่น >+ อย่างไรก็ตาม เพื่อให้แน่ใจว่าช่องว่างได้รับการเก็บรักษาไว้อย่างเหมาะสม เฉพาะ |, |+ หรือ |- จะถูกผลิต

อินสแตนซ์คอมโพเนนต์

ส่วนประกอบถูกอินสแตนซ์โดยใช้เครื่องหมายออบเจ็กต์ YAML ชนิดของออบเจ็กต์ถูกสร้างขึ้นด้วยตัวดำเนินการ As เป็นส่วนหนึ่งของแท็ก YAML ด้านซ้าย สำหรับการควบคุมคอนเทนเนอร์ อ็อบเจ็กต์สามารถซ้อนกันได้

ชื่อ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
            ) 

Component-Type สามารถเป็นส่วนประกอบของแคนวาสหรือตัวควบคุมใดๆ ก็ได้ ชนิดฐาน เช่น จำนวน ไม่ถูกรองรับ

Component-Template คือตัวระบุเสริมสำหรับส่วนประกอบที่มีเทมเพลตที่แตกต่างกัน เช่น แกลเลอรี ส่วนประกอบบางอย่างไม่มีเทมเพลต

ถ้า ชื่อ มีอักขระพิเศษและมีเครื่องหมายอัญประกาศเดี่ยวกำกับไว้ วลีทั้งหมดทางด้านซ้ายของเครื่องหมายทวิภาคจะต้องมีการหลีกเลี่ยง นี่สามารถทำได้ด้วยวิธีใดวิธีหนึ่งต่อไปนี้:

  • ใช้เครื่องหมายคำพูดเดียวเพื่อครอบด้านซ้ายทั้งหมด ซึ่งกำหนดให้ใช้เครื่องหมายคำพูดเดี่ยวที่มีอยู่สองครั้ง:
    '''A name with a space'' As Gallery':
    
  • ใช้เครื่องหมายคำพูดคู่เพื่อครอบด้านซ้ายทั้งหมด แต่ต้องแน่ใจว่าไม่มีเครื่องหมายคำพูดคู่ในชื่อ:
    "'A name with a space' As Gallery":
    

ข้อกำหนดของส่วนประกอบ

ในทำนองเดียวกัน ส่วนประกอบจะถูกกำหนดโดยการสร้างอินสแตนซ์ของประเภทฐานที่รองรับ ไม่สามารถอินสแตนซ์ชนิดฐานได้โดยตรง ภายในนิยามอ็อบเจ็กต์คุณสมบัติ สามารถเพิ่มคุณสมบัติลงในสิ่งที่ประเภทพื้นฐานจัดเตรียมไว้ได้

ประเภทพื้นฐานที่รองรับคือ ส่วนประกอบพื้นที่ทำงาน

คำจำกัดความของคุณสมบัติพื้นอย่างง่าย

ส่วนประกอบใช้คุณสมบัติเพื่อสื่อสารกับแอปที่มีการโฮสต์

ชื่อ: ( นิพจน์บรรทัดเดียว หรือ นิพจน์หลายบรรทัด )

ประเภทของสูตรที่แสดงโดยนัยตามประเภทของการแสดงออก

สำหรับคุณสมบัติการนำเข้าข้อมูล การแสดงออกจะให้ค่าเริ่มต้นที่จะถูกแทรกลงในแอปเมื่อส่วนประกอบเป็นอินสแตนซ์ ผู้สร้างสามารถแก้ไขนิพจน์นี้ได้ตามที่เห็นสมควร แต่ไม่สามารถเปลี่ยนชนิดได้

สำหรับคุณสมบัติการส่งออก การแสดงออกจะทำให้เกิดการคำนวณขึ้น ผู้สร้างไม่สามารถแก้ไขนิพจน์นี้ได้ เนื่องจากมีการห่อหุ้มไว้ในส่วนประกอบ

ในขณะนี้ คุณสมบัติทั้งหมดเป็นโฟลว์ข้อมูลเท่านั้นและต้องไม่มีผลข้างเคียง

ในขณะนี้ ข้อมูลเมตาเพิ่มเติมเกี่ยวกับคุณสมบัติไม่ได้ถูกกำหนดไว้ที่นี่ แต่ถูกกำหนดไว้ในไฟล์อื่นๆ ของไฟล์ .msapp แทน ตัวอย่างเช่น Description ของคุณสมบัติ

ตัวอย่างเช่น

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 อนุญาตให้นำแผนที่ชื่อเดียวกันมาใช้ซ้ำ โดยที่รายการสุดท้ายจะลบล้างคำจำกัดความก่อนหน้านี้อย่างเงียบๆ เนื่องจากสิ่งนี้อาจสร้างความสับสนให้กับผู้สร้างแบบเขียนโค้ดเล็กน้อย และอาจส่งผลให้สูตรคุณสมบัติสูญหาย ข้อผิดพลาดจะเกิดขึ้นหากพบชื่อเดียวกันซ้ำสองครั้ง