ออบเจ็กต์ App ใน Power Apps
ใช้กับ: แอปพื้นที่ทำงาน
แอปแบบจำลอง
มีข้อมูลเกี่ยวกับแอปที่กำลังทำงานอยู่ในขณะนี้ และควบคุมลักษณะการทำงานของแอป
คำอธิบาย
เช่นเดียวกับตัวควบคุม ออบเจ็กต์ แอป มีคุณสมบัติที่ระบุว่าหน้าจอใดที่กำลังแสดงอยู่ และแจ้งให้ผู้ใช้บันทึกการเปลี่ยนแปลงเพื่อไม่ให้สูญหาย แอปทุกตัวมีออบเจ็กต์ แอป
คุณสามารถเขียนสูตรสำหรับคุณสมบัติบางอย่างของออบเจ็กต์ แอป ที่ด้านบนของบานหน้าต่าง มุมมองทรี ให้เลือกออบเจ็กต์ แอป ที่คุณจะเลือกตัวควบคุมหรือหน้าจออื่นๆ ดูและแก้ไขคุณสมบัติของออบเจ็กต์อย่างใดอย่างหนึ่งโดยการเลือกในรายการดรอปดาวน์ทางด้านซ้ายของแถบสูตร
คุณสมบัติ ActiveScreen
คุณสมบัติ ActiveScreen ระบุหน้าจอที่กำลังแสดง
คุณสมบัตินี้ส่งคืนออบเจ็กต์หน้าจอ ใช้เพื่ออ้างอิงคุณสมบัติของหน้าจอที่แสดงอยู่ในปัจจุบัน เช่น ชื่อพร้อมสูตร App.ActiveScreen.Name คุณยังสามารถเปรียบเทียบคุณสมบัตินี้กับออบเจ็กต์หน้าจออื่นได้ เช่น ด้วยสูตรการเปรียบเทียบ App.ActiveScreen = Screen2 เพื่อทดสอบว่า Screen2 คือหน้าจอที่แสดงอยู่ในปัจจุบัน
ใช้ฟังก์ชัน Back หรือ Navigate เพื่อเปลี่ยนหน้าจอที่กำลังแสดง
คุณสมบัติ BackEnabled
คุณสมบัติ BackEnabled เปลี่ยนวิธีที่แอปตอบสนองต่อท่าทางย้อนกลับของอุปกรณ์ (ปัดหรือใช้ปุ่มย้อนกลับของฮาร์ดแวร์บนอุปกรณ์ Android ปัดจากซ้ายบนอุปกรณ์ iOS) เมื่อทำงานใน Power Apps บนมือถือ เมื่อเปิดใช้งาน ท่าทางย้อนกลับของอุปกรณ์จะนำทางกลับไปยังหน้าจอที่แสดงล่าสุด ซึ่งคล้ายกับสูตร ย้อนกลับ เมื่อปิดใช้งาน ท่าทางย้อนกลับของอุปกรณ์จะนำผู้ใช้กลับไปยังรายการแอป
คุณสมบัติ ConfirmExit
ไม่มีใครต้องการสูญเสียการเปลี่ยนแปลงที่ไม่ได้บันทึก ใช้คุณสมบัติ ConfirmExit และ ConfirmExitMessage เพื่อเตือนผู้ใช้ก่อนที่จะปิดแอปของคุณ
หมายเหตุ
- ConfirmExit ไม่ทำงานในแอปที่ฝังอยู่ ตัวอย่างเช่น Power BI และ SharePoint
- ในปัจจุบัน คุณสมบัติเหล่านี้สามารถอ้างอิงการควบคุมบนหน้าจอแรกเท่านั้น หากคุณลักษณะการแสดงตัวอย่าง โหลดล่าช้า เปิดใช้งาน (ซึ่งเป็นค่าเริ่มต้นสำหรับแอปใหม่) หากมีการอ้างอิง Power Apps Studio ไม่แสดงข้อผิดพลาด แต่แอปที่เผยแพร่แล้วที่เป็นผลลัพธ์ไม่เปิดขึ้นใน Power Apps Mobile หรือเบราว์เซอร์ เราได้ทำงานอย่างหนักเพื่อปรับปรุงข้อจำกัดนี้ ในระหว่างนี้ คุณสามารถปิด การโหลดล่าช้า ใน การตั้งค่า>คุณลักษณะที่กำลังจะเกิดขึ้น (ภายใต้ ตัวอย่าง)
ConfirmExit
ConfirmExit เป็นคุณสมบัติบูลีนที่เมื่อ จริง เปิดกล่องโต้ตอบการยืนยันก่อนปิดแอป โดยค่าเริ่มต้น คุณสมบัตินี้คือ เท็จ และไม่มีกล่องโต้ตอบปรากฏขึ้น
ในสถานการณ์ที่ผู้ใช้อาจมีการเปลี่ยนแปลงที่ยังไม่ได้บันทึกในแอป ให้ใช้คุณสมบัตินี้เพื่อแสดงกล่องโต้ตอบการยืนยันก่อนออกจากแอป ใช้สูตรที่สามารถตรวจสอบตัวแปรและคุณสมบัติการควบคุม (ตัวอย่างเช่น คุณสมบัติ Unsaved ของตัวควบคุม แก้ไขฟอร์ม)
กล่องโต้ตอบการยืนยันจะปรากฏขึ้นในทุกสถานการณ์ที่ข้อมูลอาจสูญหายได้ ดังตัวอย่างเหล่านี้:
- เรียกใช้ฟังก์ชัน Exit
- หากแอปทำงานในเบราว์เซอร์:
- ปิดเบราว์เซอร์หรือแท็บเบราว์เซอร์ที่แอปทำงานอยู่
- การเลือกปุ่มย้อนกลับของเบราว์เซอร์
- การเรียกใช้ฟังก์ชัน Launch ด้วย LaunchTarget ของ Self
- หากแอปกำลังทำงานอยู่ใน Power Apps Mobile (iOS หรือ Android):
- การปัดเพื่อสลับไปยังแอปอื่นใน Power Apps Mobile
- การเลือกปุ่มย้อนกลับบนอุปกรณ์ Android
- การเรียกใช้ฟังก์ชัน Launch เพื่อเปิดแอปพื้นที่ทำงานอื่น
รูปลักษณ์ที่แน่นอนของกล่องโต้ตอบการยืนยันอาจแตกต่างกันไปตามอุปกรณ์และรุ่นของ Power Apps
กล่องโต้ตอบการยืนยันไม่ปรากฎใน Power Apps Studio
ConfirmExitMessage
โดยค่าเริ่มต้น กล่องโต้ตอบการยืนยันจะแสดงข้อความทั่วไป เช่น "คุณอาจมีการเปลี่ยนแปลงที่ยังไม่ได้บันทึก" ในภาษาของผู้ใช้
ใช้ ConfirmExitMessage เพื่อให้ข้อความที่กำหนดเองในกล่องโต้ตอบการยืนยัน ถ้าคุณสมบัตินี้เป็น ว่างเปล่า ค่าเริ่มต้นจะถูกใช้ ข้อความที่กำหนดเองจะถูกตัดทอนตามความจำเป็นเพื่อให้พอดีกับในกล่องโต้ตอบการยืนยัน ดังนั้นควรเก็บข้อความไว้ไม่เกินสองบรรทัด
ในเบราว์เซอร์ กล่องโต้ตอบการยืนยันอาจปรากฏขึ้นพร้อมกับข้อความทั่วไปจากเบราว์เซอร์
หมายเหตุ
ออบเจ็กต์แอปมีคุณสมบัติเพิ่มเติมอีกสองรายการคือ OnMessage
และ BackEnabled
ที่กำลังทดลองอยู่ คุณสมบัติเหล่านี้จะถูกลบออกจากออบเจ็กต์แอปในที่สุด เราขอแนะนำไม่ให้คุณใช้คุณสมบัติเหล่านี้ในสภาพแวดล้อมการทำงานจริงของคุณ
ตัวอย่างเช่น
สร้างแอปที่มีการควบคุมฟอร์มสองแบบ AccountForm และ ContactForm
ตั้งค่าคุณสมบัติ ConfirmExit ของออปเจกต์ แอป สำหรับนิพจน์นี้:
AccountForm.Unsaved Or ContactForm.Unsaved
กล่องโต้ตอบนี้จะปรากฏขึ้น หากผู้ใช้เปลี่ยนข้อมูลในฟอร์มใดฟอร์มหนึ่ง แล้วพยายามปิดแอปโดยไม่บันทึกการเปลี่ยนแปลงเหล่านั้น
ตั้งค่าคุณสมบัติ ConfirmExitMessage ของออปเจกต์ แอป สำหรับสูตรนี้:
If( AccountsForm.Unsaved, "Accounts form has unsaved changes.", "Contacts form has unsaved changes." )
กล่องโต้ตอบนี้จะปรากฏขึ้น หากผู้ใช้เปลี่ยนข้อมูลในฟอร์มลูกค้าองค์กร แล้วพยายามปิดแอปโดยไม่บันทึกการเปลี่ยนแปลงเหล่านั้น
ตั้งค่าคีย์การใช้เครื่องมือสำหรับ Application Insights
หากต้องการส่งออกบันทึกแอปพลิเคชันที่ระบบสร้างไปยัง Application Insights คุณต้องตั้งค่า คีย์การรายงานข้อมูลระบบ สำหรับแอปพื้นที่ทำงานของคุณ
- เปิดแอปของคุณสำหรับ การแก้ไข ใน Power Apps Studio
- เลือกออบเจ็กต์ App ในมุมมองทรีบนการนำทางด้านซ้าย
- ป้อน คีย์การรายงานข้อมูลระบบ ในบานหน้าต่างคุณสมบัติ
หากข้อมูลไม่ถูกส่งไปยัง App Insights โปรดติดต่อผู้ดูแลระบบ Power Platform ของคุณ และตรวจสอบว่า App Insights ถูกปิดใช้งานในระดับผู้เช่าหรือไม่
คุณสมบัติของสูตร
ใช้สูตรที่ระบุชื่อในคุณสมบัติ Formulas เพื่อกำหนดสูตรที่สามารถนำมาใช้ซ้ำได้ทั่วทั้งแอปของคุณ
ใน Power Apps สูตรจะกำหนดค่าของคุณสมบัติตัวควบคุม ตัวอย่างเช่น หากต้องการตั้งค่าสีพื้นหลังให้สอดคล้องกันในแอป คุณอาจตั้งค่าคุณสมบัติ Fill สำหรับแต่ละรายการของสูตรทั่วไป:
Label1.Fill: ColorValue( Param( "BackgroundColor" ) )
Label2.Fill: ColorValue( Param( "BackgroundColor" ) )
Label3.Fill: ColorValue( Param( "BackgroundColor" ) )
สูตรนี้อาจปรากฏขึ้นในที่ต่างๆ มากมายที่ จึงกลายเป็นเรื่องน่าเบื่อและมีแนวโน้มที่จะเกิดข้อผิดพลาดในการปรับปรุงทั้งหมดหากจำเป็นต้องเปลี่ยนแปลง คุณสามารถสร้างตัวแปรส่วนกลางใน OnStart เพื่อตั้งค่าสีหนึ่งครั้ง แล้วนำค่ากลับมาใช้ใหม่ทั่วทั้งแอป:
App.OnStart: Set( BGColor, ColorValue( Param( "BackgroundColor" ) ) )
Label1.Fill: BGColor
Label2.Fill: BGColor
Label3.Fill: BGColor
แม้ว่าวิธีนี้จะดีกว่า แต่ก็ขึ้นอยู่กับ OnStart ที่ทำงานก่อนค่าสำหรับ BGColor จะถูกสร้าง BGColor อาจมีการจัดการในบางมุมของแอปที่ผู้สร้างไม่ทราบ การเปลี่ยนแปลงที่ทำโดยผู้อื่น และอาจติดตามได้ยาก
สูตรที่ระบุชื่อเป็นทางเลือก เช่นเดียวกับที่เรามักเขียน control-property = นิพจน์ เราสามารถเขียน ชื่อ = นิพจน์ แทนแล้วนำ ชื่อ กลับมาใช้ใหม่ตลอดทั้งแอปของเราเพื่อแทนที่ นิพจน์ คำจำกัดความของสูตรเหล่านี้ทำในคุณสมบัติ Formulas:
App.Formulas: BGColor = ColorValue( Param( "BackgroundColor" ) );
Label1.Fill: BGColor
Label2.Fill: BGColor
Label3.Fill: BGColor
ข้อดีของการใช้สูตรที่ระบุชื่อได้แก่:
- ค่าของสูตรจะใช้ได้เสมอ ไม่มีการข้อต่อกันของเวลา ไม่มี OnStart ที่ต้องทำงานก่อนจึงจะกำหนดค่าได้ ไม่มีเวลาที่ค่าของสูตรไม่ถูกต้อง สูตรที่ระบุชื่อสามารถอ้างอิงถึงกันในลำดับใดก็ได้ ตราบเท่าที่ไม่ได้สร้างการอ้างอิงแบบวงกลม สูตรดังกล่าวสามารถคำนวณแบบขนานได้
- ค่าของสูตรจะเป็นปัจจุบันเสมอ สูตรสามารถทำการคำนวณที่ขึ้นอยู่กับคุณสมบัติของตัวควบคุมหรือเรกคอร์ดฐานข้อมูล และเมื่อมีการเปลี่ยนแปลง ค่าของสูตรจะปรับปรุงโดยอัตโนมัติ คุณไม่จำเป็นต้องปรับปรุงค่าด้วยตนเองเช่นเดียวกับที่ทำกับตัวแปร และสูตรจะคำนวณใหม่เมื่อจำเป็นเท่านั้น
- คำจำกัดความของสูตรนี้ไม่สามารถเปลี่ยนแปลงได้ คำจำกัดความใน สูตร เป็นแหล่งที่มาของความจริงเพียงแหล่งเดียวและไม่สามารถเปลี่ยนแปลงค่าที่อื่นในแอปได้ ด้วยตัวแปร เป็นไปได้ว่าโค้ดบางตัวจะเปลี่ยนแปลงค่าโดยไม่คาดคิด แต่สถานการณ์ที่แก้ไขได้ยากนี้ไม่สามารถเกิดขึ้นได้กับสูตรที่มีชื่อ
- การคำนวณของสูตรสามารถเลื่อนออกไปได้ เนื่องจากค่าไม่เปลี่ยนรูป จึงสามารถคำนวณได้เสมอเมื่อจำเป็น ซึ่งหมายความว่าไม่จำเป็นต้องคำนวณจนกว่าจะจำเป็น ค่าสูตรที่ไม่ได้ใช้จนกระทั่ง screen2 ของแอปแสดงขึ้นไม่จำเป็นต้องคำนวณจนกว่า screen2 จะปรากฏขึ้น การเลื่อนเวลาการทำงานนี้สามารถปรับปรุงเวลาในการโหลดแอปได้ สูตรที่ระบุชื่อเป็นการประกาศและให้โอกาสสำหรับระบบในการปรับวิธีและเวลาคำนวณให้เหมาะสม
- สูตรที่ระบุชื่อเป็นแนวคิดของ Excel Power Fx ใช้แนวคิดของ Excel เมื่อเป็นไปได้ เนื่องจากมีคนจำนวนมากที่รู้จัก Excel เป็นอย่างดี สูตรที่ระบุชื่อจะเทียบเท่ากับเซลล์ที่มีชื่อและสูตรที่ระบุชื่อใน Excel ซึ่งจัดการด้วยโปรแกรมจัดการชื่อ โดยจะคำนวณใหม่โดยอัตโนมัติเหมือนเซลล์ของสเปรดชีตและคุณสมบัติของตัวควบคุมก็เช่นกัน
มีการกำหนดสูตรที่ระบุชื่อไว้ทีละรายการในคุณสมบัติ Formulas แต่ละรายการลงท้ายด้วยเครื่องหมายอัฒภาค ชนิดของสูตรจะอนุมานจากชนิดขององค์ประกอบภายในสูตรและวิธีที่ถูกใช้ร่วมกัน ตัวอย่างเช่น สูตรที่ระบุชื่อเหล่านี้ดึงข้อมูลที่เป็นประโยชน์เกี่ยวกับผู้ใช้ปัจจุบันจาก Dataverse:
UserEmail = User().Email;
UserInfo = LookUp( Users, 'Primary Email' = User().Email );
UserTitle = UserInfo.Title;
UserPhone = Switch( UserInfo.'Preferred Phone',
'Preferred Phone (Users)'.'Mobile Phone', UserInfo.'Mobile Phone',
UserInfo.'Main Phone' );
ถ้าสูตรสำหรับ UserTitle จำเป็นต้องปรับปรุงก็สามารถทำได้ง่ายๆ ในที่เดียวนี้ ถ้า UserPhone ไม่จำเป็นในแอป จะไม่มีการทำการเรียกไปยังตาราง ผู้ใช้ ใน Dataverse เหล่านี้ ไม่มีผลเสียสำหรับการรวมคำจำกัดความของสูตรที่ไม่ได้ใช้
ข้อจำกัดบางประการของสูตรที่ระบุชื่อ:
- สูตรที่ระบุชื่อไม่สามารถใช้ฟังก์ชันของลักษณะการทำงานหรือทำให้เกิดผลข้างเคียงภายในแอปได้
- สูตรที่ระบุชื่อสามารถสร้างการอ้างอิงแบบวงกลมได้ การมี a = b; และ b = a; ในแอปเดียวกันไม่ได้รับอนุญาต
ฟังก์ชันที่ผู้ใช้กำหนดเอง
สำคัญ
- ฟังก์ชันที่ผู้ใช้กำหนดเป็นฟังก์ชันทดลอง
- คุณลักษณะทดลองไม่ได้มีไว้สำหรับการนำไปใช้งานจริงและอาจไม่สมบูรณ์ คุณลักษณะเหล่านี้สามารถใช้ได้ก่อนการเปิดตัวอย่างเป็นทางการเพื่อให้คุณสามารถเข้าใช้งานได้ก่อนเวลาและให้ข้อคิดเห็น ข้อมูลเพิ่มเติม: ทำความเข้าใจคุณลักษณะทดลอง แสดงตัวอย่าง และเลิกใช้แล้วในแอปพื้นที่ทำงาน
- ลักษณะการทำงานที่อธิบายในบทความนี้ใช้ได้เฉพาะเมื่อคุณเปิดคุณลักษณะการทดลอง ฟังก์ชันที่ผู้ใช้กำหนด ใน การตั้งค่า > คุณลักษณะที่กำลังจะมา > การทดลอง (ปิดอยู่โดยค่าเริ่มต้น)
- ความคิดเห็นของคุณมีค่าสำหรับเรา บอกให้เราทราบว่าคุณคิดอย่างไรใน ฟอรัมชุมชนของคุณลักษณะทดลอง Power Apps
Power Fx มีรายการฟังก์ชันในตัวมากมาย เช่น If, Text และ Set ฟังก์ชันที่ผู้ใช้กำหนดช่วยให้คุณสามารถเขียนฟังก์ชันของคุณเองที่ใช้พารามิเตอร์และส่งกลับค่า เช่นเดียวกับฟังก์ชันในตัว คุณสามารถคิดว่าฟังก์ชันที่ผู้ใช้กำหนดเป็นส่วนขยายของสูตรที่มีชื่อ ซึ่งเพิ่มพารามิเตอร์และสนับสนุนสูตรลักษณะการทำงาน
ตัวอย่างเช่น คุณอาจกำหนดสูตรที่มีชื่อซึ่งส่งคืนหนังสือนิยายจากห้องสมุด:
Library = [ { Title: "The Hobbit", Author: "J. R. R. Tolkien", Genre: "Fiction" },
{ Title: "Oxford English Dictionary", Author: "Oxford University", Genre: "Reference" } ];
LibraryFiction = Filter( Library, Genre = "Fiction" );
หากไม่มีพารามิเตอร์ เราจะต้องกำหนดสูตรที่มีชื่อแยกกันสำหรับแต่ละประเภท แต่เรามากำหนดพารามิเตอร์สูตรชื่อของเราแทน:
LibraryType := Type( [ { Title: Text, Author: Text, Genre: Text } ] );
LibraryGenre( SelectedGenre: Text ): LibraryType = Filter( Library, Genre = SelectedGenre );
ตอนนี้เราสามารถเรียก LibraryGenre( "Fiction" )
, LibraryGenre( "Reference" )
หรือกรองประเภทอื่นๆ ด้วยฟังก์ชันที่ผู้ใช้กำหนดเพียงฟังก์ชันเดียว
ไวยากรณ์คือ:
FunctionName( [ ParameterName1: ParameterType1 [ , ParameterName2: ParameterType2 ... ] ] ) : ReturnType = Formula;
- FunctionName – จำเป็น ชื่อของฟังก์ชันที่ผู้ใช้กำหนด
- ParameterName(s) - ไม่บังคับ ชื่อของพารามิเตอร์ฟังก์ชัน
- ParameterType(s) – ไม่บังคับ ชื่อของชนิด ไม่ว่าจะเป็น ชื่อชนิดข้อมูล ในตัว ชื่อแหล่งข้อมูล หรือชนิดที่กำหนดด้วยฟังก์ชัน Type
- ReturnType – จำเป็น ชนิดของค่าที่ส่งกลับจากฟังก์ชัน
- สูตร – จำเป็น สูตรที่คำนวณค่าของฟังก์ชันตามพารามิเตอร์
ต้องระบุชนิดข้อมูลสำหรับพารามิเตอร์แต่ละตัวและผลลัพธ์จากฟังก์ชันที่ผู้ใช้กำหนด ในตัวอย่างนี้ SelectedGenre: Text
จะกำหนดพารามิเตอร์แรกให้กับฟังก์ชันของเราเป็นชนิด ข้อความ และ SelectedGenre
จะเป็นชื่อของพารามิเตอร์ที่ใช้ภายในเนื้อความสำหรับการดำเนินการ ตัวกรอง ดู ชนิดข้อมูล สำหรับชื่อชนิดที่รองรับ The ฟังก์ชัน Type ใช้เพื่อสร้างชนิดการรวมสำหรับไลบรารีของเรา เพื่อให้เราสามารถส่งคืนตารางหนังสือจากฟังก์ชันของเราได้
เรากำหนดให้ LibraryType
เป็นตารางชนิดเรกคอร์ดพหูพจน์ หากเราต้องการส่งหนังสือเล่มเดียวไปยังฟังก์ชัน เราสามารถแยกชนิดของเรกคอร์ดสำหรับตารางนี้ด้วยฟังก์ชัน RecordOf:
BookType := Type( RecordOf( LibraryType ) );
IsGenre( Book: BookType, SelectedGenre: Text ): Boolean = (Book.Genre = SelectedGenre);
การจับคู่เรกคอร์สำหรับพารามิเตอร์ฟังก์ชันมีความเข้มงวดมากกว่าในส่วนอื่นๆ ของ Power Fx ฟิลด์ของค่าเรกคอร์ดต้องเป็นเซตย่อยที่เหมาะสมของข้อกำหนดชนิด และไม่สามารถรวมฟิลด์เพิ่มเติมได้ ตัวอย่างเช่น IsGenre( { Title: "My Book", Published: 2001 }, "Fiction" )
จะส่งผลให้เกิดข้อผิดพลาด
หมายเหตุ ฟังก์ชันที่ผู้ใช้กำหนดยังไม่รองรับการเรียกซ้ำ
ลักษณะการทำงานที่ผู้ใช้กำหนดฟังก์ชัน
สูตรที่มีชื่อและฟังก์ชันที่ผู้ใช้กำหนดส่วนใหญ่ไม่รองรับฟังก์ชันลักษณะการทำงานที่มีผลกระทบเพิ่มเติม เช่น ตั้งค่า หรือ แจ้งเตือน โดยทั่วไป เป็นการดีที่สุดที่จะหลีกเลี่ยงการอัปเดตสถานะหากทำได้ แต่ให้อาศัยรูปแบบการเขียนโปรแกรมที่ใช้งานได้และอนุญาตให้ Power Fx คำนวณสูตรใหม่ได้ตามต้องการโดยอัตโนมัติ แต่มีบางกรณีที่หลีกเลี่ยงไม่ได้ หากต้องการรวมตรรกะลักษณะการทำงานไว้ในฟังก์ชันที่ผู้ใช้กำหนด ให้ใส่เนื้อหาของฟังก์ชันในวงเล็บปีกกา:
Spend( Amount: Number ) : Void = {
If( Amount > Savings,
Error( $"{Amount} is more than available savings" ),
Set( Savings, Savings - Amount );
Set( Spent, Spent + Amount)
);
}
ตอนนี้เราสามารถเรียก Spend( 12 )
เพื่อตรวจสอบว่าเรามี 12 ในเงินออมของเราหรือไม่และถ้าเป็นเช่นนั้นให้หักด้วย 12 และเพิ่ม 12 ในตัวแปรการใช้จ่าย ชนิดการส่งคืนของฟังก์ชันนี้คือ Void เนื่องจากไม่ส่งคืนค่า
ไวยากรณ์ของฟังก์ชันที่ผู้ใช้กำหนดลักษณะการทำงานคือ:
FunctionName( [ ParameterName1: ParameterType1 [ , ParameterName2: ParameterType2 ... ] ] ) : ReturnType = { Formula1 [ ; Formula2 ... ] };
- FunctionName – จำเป็น ชื่อของฟังก์ชันที่ผู้ใช้กำหนด
- ParameterName(s) - ไม่บังคับ ชื่อของพารามิเตอร์ฟังก์ชัน
- ParameterType(s) – ไม่บังคับ ชื่อของชนิด ไม่ว่าจะเป็น ชื่อชนิดข้อมูล ในตัว ชื่อแหล่งข้อมูล หรือชนิดที่กำหนดด้วยฟังก์ชัน Type
- ReturnType – จำเป็น ชนิดของค่าที่ส่งกลับจากฟังก์ชัน ใช้ Void หากฟังก์ชันไม่ส่งคืนค่า
- Formula(s) - ่จำเป็นต้องมี สูตรที่คำนวณค่าของฟังก์ชันตามพารามิเตอร์
การดำเนินการจะไม่สิ้นสุดเมื่อพบข้อผิดพลาด เช่นเดียวกับสูตร Power Fx ทั้งหมด หลังจากเรียกใช้ฟังก์ชัน Errorฟังก์ชัน If จะป้องกันไม่ให้มีการเปลี่ยนแปลง Savings และ Spent เกิดขึ้น นอกจากนี้ยังสามารถใช้ฟังก์ชัน IfError เพื่อป้องกันการดำเนินการเพิ่มเติมหลังจากเกิดข้อผิดพลาด แม้ว่าจะส่งคืน Void แต่สูตรยังสามารถส่งคืนข้อผิดพลาดได้หากมีปัญหา
ชนิดที่ผู้ใช้กำหนด
สำคัญ
- ชนิดที่ผู้ใช้กำหนดเป็นคุณลักษณะแบบทดลอง
- คุณลักษณะทดลองไม่ได้มีไว้สำหรับการนำไปใช้งานจริงและอาจไม่สมบูรณ์ คุณลักษณะเหล่านี้สามารถใช้ได้ก่อนการเปิดตัวอย่างเป็นทางการเพื่อให้คุณสามารถเข้าใช้งานได้ก่อนเวลาและให้ข้อคิดเห็น ข้อมูลเพิ่มเติม: ทำความเข้าใจคุณลักษณะทดลอง แสดงตัวอย่าง และเลิกใช้แล้วในแอปพื้นที่ทำงาน
- ลักษณะการทำงานที่อธิบายในบทความนี้ใช้ได้เฉพาะเมื่อคุณเปิดคุณลักษณะทดลอง ชนิดที่ผู้ใช้กำหนด ใน การตั้งค่า > คุณลักษณะที่กำลังจะมา > การทดลอง (ปิดอยู่โดยค่าเริ่มต้น)
- ความคิดเห็นของคุณมีค่าสำหรับเรา บอกให้เราทราบว่าคุณคิดอย่างไรใน ฟอรัมชุมชนของคุณลักษณะทดลอง Power Apps
สูตรที่มีชื่อสามารถใช้กับฟังก์ชัน Type เพื่อสร้างชนิดที่ผู้ใช้กำหนดได้ ใช้ :=
แทน =
ชนิดที่ผู้ใช้กำหนด เช่น Book := Type( { Title: Text, Author: Text } )
ดูฟังก์ชัน Type สำหรับข้อมูลเพิ่มเติมและตัวอย่าง
คุณสมบัติ OnError
ใช้ OnError เพื่อดำเนินการเมื่อเกิดข้อผิดพลาดที่ใดก็ตามในแอป เป็นการให้โอกาสในการสกัดกั้นแบนเนอร์ข้อผิดพลาดทั้งหมดก่อนที่จะแสดงต่อผู้ใช้ นอกจากนี้ยังสามารถใช้เพื่อบันทึกข้อผิดพลาดด้วย ฟังก์ชัน Trace หรือเขียนไปยังฐานข้อมูลหรือบริการเว็บ
ในแอปพื้นที่ทำงาน ผลลัพธ์ของการประเมินทุกสูตรจะถูกตรวจสอบหาข้อผิดพลาด หากพบความผิดพลาด OnError จะถูกประเมินด้วยตัวแปรขอบเขต FirstError และ AllErrors ที่คล้ายกันซึ่งจะถูกใช้ถ้าสูตรทั้งหมดถูกตัดในฟังก์ชัน IfError
ถ้า OnError ว่างเปล่า แบนเนอร์ข้อผิดพลาดเริ่มต้นจะแสดงด้วย FirstError.Message ของข้อผิดพลาด การกำหนดสูตร OnError จะแทนที่ลักษณะการทำงานนี้ ซึ่งทำให้ผู้สร้างสามารถจัดการการรายงานข้อผิดพลาดตามที่เห็นสมควร สามารถขอลักษณะการทำงานเริ่มต้นได้ใน OnError โดยการส่งข้อผิดพลาดด้วย ฟังก์ชัน Error ใช้แนวทางต่อไปนี้หากมีการกรองหรือจัดการข้อผิดพลาดบางอย่างในลักษณะที่ต่างออกไป ในขณะที่ข้อผิดพลาดอื่นๆ จะถูกส่ง
OnError ไม่สามารถแทนที่ข้อผิดพลาดในการคำนวณแบบที่ IfError ทำได้ หากมีการเรียกใช้ OnError ข้อผิดพลาดก็จะเกิดขึ้นแล้วและได้รับการประมวลผลแล้วผ่านการคำนวณสูตร เช่น IfError แล้ว OnError จะควบคุมเฉพาะการรายงานข้อผิดพลาดเท่านั้น
สูตร OnError ได้รับการประเมินพร้อมกัน และเป็นไปได้ว่าการประเมินอาจทับซ้อนกับการประมวลผลข้อผิดพลาดอื่นๆ ตัวอย่างเช่น หากคุณตั้งค่าตัวแปรทั่วไปที่ด้านบนของ OnError และอ่านภายหลังในสูตรเดียวกัน ค่าอาจมีการเปลี่ยนแปลง ใช้ ฟังก์ชัน With เพื่อสร้างค่าที่ระบุชื่อซึ่งระบุตำแหน่งไปยังสูตร
แม้ว่าแต่ละข้อผิดพลาดจะได้รับการประมวลผลทีละรายการโดย OnError แต่แบนเนอร์ข้อผิดพลาดเริ่มต้นอาจไม่ปรากฏสำหรับข้อผิดพลาดแต่ละรายการ เพื่อหลีกเลี่ยงไม่ให้มีแบนเนอร์ข้อผิดพลาดมากเกินไปแสดงพร้อมกัน แบนเนอร์ข้อผิดพลาดเดียวกันจะไม่ปรากฏอีกหากเพิ่งแสดงไปเมื่อไม่นานนี้
ตัวอย่างเช่น
พิจารณาตัวควบคุม ป้ายชื่อ และ แถบเลื่อน ที่ถูกผูกด้วยกันผ่านสูตร:
Label1.Text = 1/Slider1.Value
ค่าเริ่มต้นแถบเลื่อนเป็น 50 หากแถบเลื่อนถูกย้ายไปที่ 0 Label1 จะไม่แสดงค่าและแสดงแบนเนอร์ข้อผิดพลาด:
ลองดูสิ่งที่เกิดขึ้นโดยละเอียด:
- ผู้ใช้เลื่อนแถบเลื่อนไปทางซ้ายและคุณสมบัติ Slide1.Value เปลี่ยนเป็น 0
- Label1.Text ได้รับการประเมินใหม่โดยอัตโนมัติ เกิดการหารด้วยศูนย์ทำให้เกิดข้อผิดพลาด
- ไม่มี IfError ในสูตรนี้ ข้อผิดพลาดการหารด้วยศูนย์จะถูกส่งกลับโดยการประเมินสูตร
- Label1.Text ไม่สามารถแสดงข้อผิดพลาดนี้ได้ จึงแสดงสถานะ ว่างเปล่า
- OnError ถูกเรียก เนื่องจากไม่มีตัวจัดการ แบนเนอร์ข้อผิดพลาดมาตรฐานจึงแสดงพร้อมข้อมูลข้อผิดพลาด
หากจำเป็น เราก็สามารถปรับเปลี่ยนสูตรเป็น Label1.Text = IfError( 1/Slider1.Value, 0 )
การใช้ IfError จะส่งผลให้ไม่มีข้อผิดพลาดหรือแบนเนอร์ข้อผิดพลาด เราไม่สามารถเปลี่ยนค่าของข้อผิดพลาดจาก OnError เนื่องจากข้อผิดพลาดได้เกิดขึ้นแล้ว จึงเป็นเพียงการถามว่าจะรายงานอย่างไร
ถ้าเราเพิ่มตัวจัดการ OnError จะไม่มีผลกระทบก่อนขั้นตอนที่ 5 แต่อาจส่งผลต่อวิธีการรายงานข้อผิดพลาด:
Trace( $"Error {FirstError.Message} in {FirstError.Source}" )
เมื่อมีตัวจัดการ OnError นี้ จะไม่มีข้อผิดพลาดใดๆ จากมุมมองของผู้ใช้แอป แต่ข้อผิดพลาดจะถูกเพิ่มในการติดตามของการตรวจสอบ พร้อมแหล่งที่มาของข้อมูลข้อผิดพลาดจาก FirstError:
หากเราต้องการให้แบนเนอร์ข้อผิดพลาดเริ่มต้นเดียวกันแสดงเพิ่มเติมจากการติดตาม เราสามารถเรียกใช้ข้อผิดพลาดอีกครั้งด้วยฟังก์ชัน Error หลังการเรียก Trace เรียกเช่นเดียวกับที่ทำหาก Trace ไม่อยู่ที่นั่น:
Trace( $"Error {FirstError.Message} in {FirstError.Source}" );
Error( FirstError )
คุณสมบัติ OnStart
หมายเหตุ
การใช้คุณสมบัติ OnStart อาจทำให้เกิดปัญหาด้านประสิทธิภาพเมื่อโหลดแอป เรากำลังดำเนินการสร้างทางเลือกสำหรับเหตุผลสองอันดับแรกสำหรับการใช้ property—แคชข้อมูลและการตั้งค่าตัวแปรส่วนกลาง เราได้สร้างทางเลือกอื่นสำหรับการกำหนดหน้าจอแรกที่จะแสดงด้วย Navigate คุณสมบัตินี้อาจถูกปิดใช้งานโดยค่าเริ่มต้นทั้งนี้ขึ้นอยู่กับบริบทของคุณ หากคุณไม่เห็นและต้องการใช้ ให้ตรวจสอบการตั้งค่าขั้นสูงของแอปเพื่อดูสวิตช์เพื่อเปิดใช้งาน คุณสมบัติ OnVisible ของหน้าจอสามารถใช้ได้ ตามค่าเริ่มต้น เมื่อเปิดใช้งานกฎ OnStart ที่ไม่มีการบล็อก จะอนุญาตให้ฟังก์ชัน OnStart ทำงานพร้อมกันกับกฎอื่นๆ ของแอป ดังนั้นหากตัวแปรที่อ้างอิงในกฎแอปอื่นๆ ได้รับการเริ่มต้นภายในฟังก์ชัน OnStart ตัวแปรเหล่านั้นอาจยังไม่ได้รับการเริ่มต้นอย่างสมบูรณ์ นอกจากนี้ มีความเป็นไปได้ที่หน้าจอสามารถแสดงผลและทำงานได้ก่อนที่ฟังก์ชัน Screen.OnVisible หรือ App.OnStart จะเสร็จสิ้นการทำงาน โดยเฉพาะอย่างยิ่งหากใช้เวลานานกว่าจะเสร็จสมบูรณ์
คุณสมบัติ OnStart จะทำงานเมื่อผู้ใช้เริ่มต้นแอป คุณสมบัตินี้มักใช้เพื่อทำงานต่อไปนี้:
สูตรนี้จะถูกประเมินก่อนที่หน้าจอแรกจะปรากฏขึ้น ไม่มีการโหลดหน้าจอ ดังนั้นคุณจึงไม่สามารถตั้งค่าตัวแปรบริบทด้วยฟังก์ชัน UpdateContext อย่างไรก็ตาม คุณสามารถส่งผ่านตัวแปรบริบทด้วยฟังก์ชัน Navigate
หลังจากที่คุณเปลี่ยนคุณสมบัติ OnStart ทดสอบโดยวางเมาส์เหนือออบเจ็กต์ แอป ในบานหน้าต่าง มุมมองทรี เลือกจุดไข่ปลา (...) แล้วเลือก เรียกใช้ OnStart ต่างจากเมื่อโหลดแอปเป็นครั้งแรก คอลเลกชันและตัวแปรที่มีอยู่จะถูกตั้งค่าไว้แล้ว ในการเริ่มต้นด้วยคอลเลกชันว่าง ให้ใช้ฟังก์ชัน ClearCollect แทนฟังก์ชัน Collect
หมายเหตุ
- การใช้ฟังก์ชัน Navigate ในคุณสมบัติ OnStart เลิกใช้แล้ว แอปที่มีอยู่จะยังคงทำงานต่อไป ในช่วงเวลาจำกัด คุณยังสามารถเปิดใช้งานได้ในการตั้งค่าแอปได้ (พร้อมใช้งานภายใต้ เลิกใช้แล้ว) อย่างไรก็ตาม การใช้ นำทาง ในลักษณะนี้อาจนำไปสู่ความล่าช้าในการโหลดแอป เนื่องจากเป็นการบังคับให้ระบบทำการประเมิน OnStart ก่อนแสดงหน้าจอแรก ใช้คุณสมบัติ StartScreen แทนการคำนวณหน้าจอแรกที่แสดง
- สวิตช์เลิกใช้งานจะถูกปิดสำหรับแอปที่สร้างก่อนเดือนมีนาคม 2021 ที่คุณเพิ่ม Navigate เป็น OnStart ระหว่างเดือนมีนาคม 2021 ถึงปัจจุบัน เมื่อคุณแก้ไขแอปดังกล่าวใน Power Apps Studio คุณอาจเห็นข้อผิดพลาด เปิดสวิตช์ที่เลิกใช้แล้วเพื่อล้างข้อผิดพลาดนี้
คุณสมบัติ StartScreen
คุณสมบัติ StartScreen กำหนดว่าจะแสดงหน้าจอใดก่อน ซึ่งจะมีการประเมินหนึ่งครั้งเมื่อโหลดแอปและส่งคืนออบเจ็กต์หน้าจอที่จะแสดง โดยค่าเริ่มต้น คุณสมบัตินี้จะว่างเปล่า และหน้าจอแรกในมุมมองทรีของสตูดิโอจะแสดงก่อน
StartScreen เป็นคุณสมบัติโฟลว์ของข้อมูลที่ไม่สามารถมีฟังก์ชันลักษณะการทำงานได้ ฟังก์ชันกระแสข้อมูลทั้งหมดพร้อมใช้งาน ใช้ฟังก์ชันและสัญญาณเหล่านี้โดยเฉพาะเพื่อกำหนดว่าจะแสดงหน้าจอใดก่อน:
- ฟังก์ชัน Param เพื่ออ่านค่าพารามิเตอร์ที่ใช้ในการเริ่มแอป
- ฟังก์ชัน User เพื่ออ่านข้อมูลเกี่ยวกับผู้ใช้ปัจจุบัน
- LookUpFilterCountRowsMax และฟังก์ชันอื่นๆ ที่อ่านจากแหล่งข้อมูล
- API ใดๆ ที่เรียกใช้ผ่านตัวเชื่อมต่อ แต่ระวังว่าจะส่งกลับคืนอย่างรวดเร็ว
- สัญญาณ เช่น การเชื่อมต่อเข็มทิศ และ แอป
หมายเหตุ
ตัวแปรและคอลเลกชันส่วนกลาง รวมถึงตัวแปรที่สร้างขึ้นใน OnStart ไม่พร้อมใช้งานใน StartScreen สูตรที่มีชื่อพร้อมใช้งานและมักเป็นทางเลือกที่ดีกว่าสำหรับการนำสูตรกลับมาใช้ใหม่ทั่วทั้งแอป
ถ้า StartScreen ส่งคืนข้อผิดพลาด หน้าจอแรกในมุมมองทรีของสตูดิโอจะแสดงเหมือนว่า StartScreen ไม่ได้รับการตั้งค่า ใช้ฟังก์ชัน IfError ตรวจจับข้อผิดพลาดและเปลี่ยนเส้นทางไปยังหน้าจอข้อผิดพลาดที่เหมาะสม
หลังจากที่เปลี่ยน StartScreen ในสตูดิโอ ทดสอบโดยวางเมาส์เหนือออบเจ็กต์ แอป ในบานหน้าต่าง มุมมองทรี เลือกจุดไข่ปลา (...) แล้วเลือก นำทางไปยัง StartScreen หน้าจอจะเปลี่ยนเหมือนว่าเพิ่งโหลดแอป
ตัวอย่าง
Screen9
แสดงว่า Screen9
ควรแสดงก่อนทุกครั้งที่แอปเริ่มทำงาน
If( Param( "admin-mode" ) = 1, HomeScreen, AdminScreen )
ตรวจสอบว่าผู้ใช้ตั้งค่าพารามิเตอร์ "โหมดผู้ดูแลระบบ" ไว้หรือไม่ และใช้เพื่อตัดสินใจว่าควรแสดง HomeScreen หรือ AdminScreen ก่อนหรือไม่
If( LookUp( Attendees, User = User().Email ).Staff, StaffPortal, HomeScreen )
ตรวจสอบว่าผู้เข้าร่วมประชุมเป็นพนักงานหรือไม่ และนำพวกเขาไปยังหน้าจอที่เหมาะสมเมื่อเริ่มต้นระบบ
IfError( If( CustomConnector.APICall() = "Forest",
ForestScreen,
OceanScreen
),
ErrorScreen
)
นำแอปตามการเรียกใช้ API ไปที่ ForestScreen
หรือ OceanScreen
หาก API ล้มเหลวด้วยเหตุผลใดก็ตาม ErrorScreen
จะนำมาใช้แทน
คุณสมบัติ StudioVersion
ใช้คุณสมบัติ StudioVersion เพื่อแสดงหรือบันทึกเวอร์ชันของ Power Apps Studio ที่ใช้ในการเผยแพร่แอป สิ่งนี้มีประโยชน์เมื่อแก้ไขข้อบกพร่องและเพื่อให้แน่ใจว่าแอปของคุณได้รับการเผยแพร่ซ้ำด้วย Power Apps Studio เวอร์ชันล่าสุด
StudioVersion ส่งคืนเป็นข้อความ รูปแบบของข้อความอาจมีการเปลี่ยนแปลงเมื่อเวลาผ่านไป และควรถือเป็นภาพรวม เพื่อหลีกเลี่ยงการแยกแต่ละส่วน