แชร์ผ่าน


Errorฟังก์ชัน , , IfErrorIsErrorIsBlankOrError

Functions นำไปใช้กับ
Error
IfError
IsError
แอป พื้นที่ทํางาน Copilot Studio Desktop โฟลว์ คอลัมน์ สูตร Dataverse แอป แบบจําลอง Power Platform CLI Dataverse ฟังก์ชัน Power Pages
IsBlankOrError แอป พื้นที่ทํางาน Copilot Studio Desktop โฟลว์ แอป แบบจําลอง Power Platform CLI ฟังก์ชัน Dataverse Power Pages

ตรวจพบข้อผิดพลาดและแสดงค่าแสดงแทน หรือใช้การดำเนินการ สร้างข้อผิดพลาดที่กำหนดเองหรือส่งผ่านข้อผิดพลาด

หมายเหตุ

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

IfError

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

ใช้ IfError เพื่อแทนที่ข้อผิดพลาดด้วยค่าที่ถูกต้อง เพื่อให้การคํานวณปลายทางสามารถดําเนินการต่อได้ ตัวอย่างเช่น ใช้ฟังก์ชันนี้หากอินพุตของผู้ใช้อาจส่งผลให้เกิดการหารด้วยศูนย์:

IfError( 1/x, 0 )

สูตรนี้จะคืนค่า 0 ถ้าค่าของ x เป็นศูนย์ เนื่องจาก 1/x จะทำให้เกิดข้อผิดพลาด ถ้า x ไม่ใช่ศูนย์ แล้ว 1/x จะถูกส่งคืน

หยุดการประมวลผลเพิ่มเติม

เมื่อ เชื่อม สูตรเข้าด้วยกัน ใน สูตรลักษณะการทำงาน เช่น:

Patch( DS1, ... );
Patch( DS2, ... )

ฟังก์ชัน Patch ที่สอง เพื่อ DS2 จะพยายาม แม้ว่า โปรแกรมแก้ไข เพื่อ DS1 ล้มเหลว ขอบเขตของข้อผิดพลาดถูกจำกัดไว้ที่แต่ละสูตรที่ถูกเชื่อม

ใช้ IfError เพื่อดําเนินการและดําเนินการต่อเมื่อการดําเนินการเสร็จสมบูรณ์แล้วเท่านั้น นําไปใช้กับ IfError ตัวอย่างนี้:

IfError(
    Patch( DS1, ... ), Notify( "problem in the first action" ),
    Patch( DS2, ... ), Notify( "problem in the second action" )
)

หากว่า Patch ของ DS1 มีปัญหา แจ้งให้ทราบ แรก จะถูกจัดการ ไม่มีการประมวลผลเพิ่มเติมรวมถึง Patch ของ DS2 รายการที่สอง ถ้า 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 ส่งคืนระเบียนที่ไม่เข้ากันได้กับค่าบูลีนที่ใช้สำหรับสูตร Replacement หรือ 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!" )

ตามที่เห็นด้านบน IfError สามารถส่งกลับข้อผิดพลาดถ้า การแทนที่ หรือ DefaultResult เป็นข้อผิดพลาด

FirstError / AllErrors

ภายในสูตรการแทนที่ ข้อมูลเกี่ยวกับข้อผิดพลาดที่พบสามารถดูได้ผ่านทางเรกคอร์ด FirstError และตาราง AllErrors AllErrors เป็นตารางบันทึกข้อมูลข้อผิดพลาด โดยที่ FirstError เป็นทางลัดไปยังบันทึกแรกของตารางนี้ FirstError จะส่งคืนค่าเดียวกับ First( AllErrors ) เสมอ

Error ระเบียน ประกอบด้วย:

ฟิลด์ ชนิด คำอธิบาย
ใจดี Enum 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 ) )

สูตรตัวอย่างด้านบนจะแสดงแบนเนอร์ต่อไปนี้เมื่อเปิดใช้งานปุ่มสองปุ่มตามลำดับ:

เปิดใช้งานตัวควบคุม ปุ่ม เพื่อแสดงการแจ้งเตือนจากฟังก์ชัน Notify

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

IsError

ฟังก์ชัน IsError ทดสอบค่าผิดพลาด

ค่าที่ส่งกลับเป็นบูลีน จริง หรือ เท็จ

การใช้ IsError จะป้องกันการประมวลผลข้อผิดพลาดเพิ่มเติมใด ๆ

IsBlankOrError

ฟังก์ชัน IsBlankOrError ทดสอบสําหรับค่าว่างหรือค่าผิดพลาด และเทียบเท่ากับOr( IsBlank( X ), IsError( X ) )

เมื่อเปิดใช้งานการจัดการข้อผิดพลาดสําหรับแอปที่มีอยู่ ให้ลองแทนที่ IsBlank ด้วย IsBlankOrError เพื่อรักษาลักษณะการทํางานของแอปที่มีอยู่ ก่อนจะเพิ่มการจัดการข้อผิดพลาด จะมีการใช้ค่าว่าง ค่าว่าง เพื่อแสดงทั้งค่าว่างจากฐานข้อมูลและค่าข้อผิดพลาด Error การจัดการแยกการแปลสองแบบนี้เป็น ค่าว่าง ซึ่งสามารถเปลี่ยนลักษณะการทํางานของแอปที่มีอยู่ที่ยังคงใช้ IsBlank ต่อไปได้

ค่าที่ส่งกลับเป็นบูลีน จริง หรือ เท็จ

การใช้ IsBlankOrError จะป้องกันการประมวลผลข้อผิดพลาดเพิ่มเติมใด ๆ

Errorใช้ฟังก์ชันเพื่อสร้างและรายงานข้อผิดพลาดแบบกําหนดเอง ตัวอย่างเช่น คุณอาจมีตรรกะในการพิจารณาว่าค่าที่ระบุนั้นถูกต้องสำหรับบริบทของคุณหรือไม่ บางส่วนอาจไม่ได้มีการตรวจสอบปัญหาโดยอัตโนมัติ คุณสามารถสร้างและส่งกลับข้อผิดพลาดของคุณเองได้ด้วย Kind และ Message โดยใช้ระเบียนเดียวกันกับที่อธิบายไว้ข้างต้นสําหรับ IfError ฟังก์ชัน

ในบริบทของ IfErrorให้ใช้ Error ฟังก์ชัน เพื่อทําซ้ําหรือส่งผ่านข้อผิดพลาด ตัวอย่างเช่น ตรรกะของคุณใน IfError อาจตัดสินใจว่า ในบางกรณีข้อผิดพลาดสามารถละเว้นได้อย่างปลอดภัย แต่ในกรณีอื่น ข้อผิดพลาดเป็นสิ่งสําคัญที่จะต้องส่งผ่าน ภายใน IfError หรือ App.OnError ใช้ Error( FirstError ) เพื่อส่งผ่านข้อผิดพลาด

ฟังก์ชันErrorยังสามารถส่งผ่านตารางของข้อผิดพลาด เช่นเดียวกับที่พบในตาราง AllErrors ใช้ Error( AllErrors ) เพื่อเปลี่ยนชื่อข้อผิดพลาดทั้งหมด และไม่เพียงแค่ข้อผิดพลาดแรก

ระเบียน ว่าง หรือตารางว่างที่ส่งผ่านไปยัง Error ส่งผลให้ไม่มีข้อผิดพลาด

ไวยากรณ์

Error( ErrorRecord )
Error( ตารางข้อผิดพลาด )

  • ErrorRecord – จำเป็น Error เรกคอร์ดข้อมูล รวมถึง ชนิดข้อความ และเขตข้อมูลอื่นๆ ชนิด เป็นสิ่งจำเป็น FirstError สามารถส่งผ่านได้โดยตรง
  • ErrorTable – จำเป็น ตารางของเรกคอร์ดข้อมูลข้อผิดพลาด AllErrors สามารถส่งผ่านได้โดยตรง

IfError( Value1, Replacement1 [, Value2, Replacement2, ... [, DefaultResult ] )

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

IsError( ค่า )
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, แจ้งให้ทราบ( "มีปัญหาภายใน" ) ) อาร์กิวเมนต์แรกส่งคืนค่าผิดพลาด (เนื่องจากหารด้วยศูนย์) ฟังก์ชันประเมินอาร์กิวเมนต์ และแสดงข้อความให้ผู้ใช้ทราบ ค่าที่ส่งกลับของ IfError คือค่าที่ส่งกลับของ แจ้งให้ทราบ ซึ่งถูกบังคับให้เป็นชนิดเดียวกันกับอาร์กิวเมนต์ IfError แรกของ (ตัวเลข) 1

ง่าย IsError

สูตร คำอธิบาย ผลลัพธ์
IsError( 1 ) อากิวเมนต์ไม่ใช่ข้อผิดพลาด เท็จ
IsError( Blank() ) อาร์กิวเมนต์ว่างเปล่า แต่ไม่ใช่ข้อผิดพลาด เท็จ
IsError( 1/0 ) อากิวเมนต์เป็นข้อผิดพลาด จริง
If( IsError( 1/0 ), Notify( "มีปัญหาภายใน" ) ) อาร์กิวเมนต์ที่ IsError ส่งกลับค่าผิดพลาด (เนื่องจากการหารด้วยศูนย์) ฟังก์ชันนี้ส่งคืน จริง ซึ่งทำให้ If แสดงข้อความถึงผู้ใช้ด้วยฟังก์ชัน Notify ค่าที่ส่งกลับของ If คือค่าที่ส่งกลับของ Notify ซึ่งถูกบังคับให้เป็นชนิดเดียวกับอาร์เมนต์แรกของ ถา (บูลีน) จริง

ง่าย IsBlankOrError

สูตร คำอธิบาย ผลลัพธ์
IsBlankOrError( 1 ) อาร์กิวเมนต์ไม่ใช่ข้อผิดพลาดหรือว่างเปล่า เท็จ
IsBlankOrError( Blank() ) อาร์กิวเมนต์ว่างเปล่า จริง
IsBlankOrError( 1/0 ) อากิวเมนต์เป็นข้อผิดพลาด จริง

ง่าย Error

ในตัวอย่างนี้ วันที่จะถูกตรวจสอบในลักษณะที่สัมพันธ์กัน ส่งผลให้เกิดข้อผิดพลาดหากมีปัญหา

If( StartDate > EndDate,
    Error( { Kind: ErrorKind.Validation, Message: "Start Date must be before End Date" } ) )

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

Error( Filter( AllErrors, Kind <> ErrorKind.Div0 ) )

ทีละขั้นตอน

  1. เพิ่มตัวควบคุม การป้อนข้อความ และตั้งชื่อ TextInput1 ถ้าไม่มีชื่อที่เป็นค่าเริ่มต้น

  2. เพิ่มตัวควบคุม ป้ายชื่อ และตั้งชื่อ Label1 ถ้าไม่มีชื่อที่เป็นค่าเริ่มต้น

  3. ตั้งค่าสูตรสำหรับคุณสมบัติ Text ของ Label1 เป็น:

    IfError( Value( TextInput1.Text ), -1 )
    
  4. ใน TextInput1 ป้อน 1234

    Label1 แสดงค่า 1234 เนื่องจากนี่เป็นอินพุตที่ถูกต้องสำหรับฟังก์ชัน Value

  5. ใน TextInput1 ป้อน ToInfinity

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

ดูเพิ่มเติม

การอ้างอิงสูตรสำหรับ Power Apps