Lưu ý
Cần có ủy quyền mới truy nhập được vào trang này. Bạn có thể thử đăng nhập hoặc thay đổi thư mục.
Cần có ủy quyền mới truy nhập được vào trang này. Bạn có thể thử thay đổi thư mục.
| Chức năng | Áp dụng cho |
|---|---|
| Error IfError IsError |
|
| IsBlankOrError |
|
Phát hiện lỗi và cung cấp giá trị thay thế hoặc thực hiện biện pháp xử lý. Tạo một lỗi tùy chỉnh hoặc truyền qua một lỗi.
Lưu ý
Nếu ứng dụng đã tắt tính năng Quản lý lỗi cấp công thức trong Cài đặt>Cập nhật>Đã ngừng hoạt động, các chức năng đó sẽ không hoạt động chính xác.
IfError
Hàm IfError kiểm tra giá trị cho đến khi tìm thấy lỗi. Nếu phát hiện lỗi, hàm sẽ đánh giá và trả về giá trị thay thế tương ứng và dừng đánh giá thêm. Hàm cũng có thể cung cấp một giá trị mặc định khi không tìm thấy lỗi. Cấu trúc của IfError tương tự như của hàm If : kiểm tra IfError lỗi, trong khi If kiểm tra cho đúng.
Dùng IfError để thay thế lỗi bằng giá trị hợp lệ để các tính toán xuôi dòng có thể tiếp tục. Ví dụ: sử dụng hàm này nếu nội dung mà người dùng nhập có thể dẫn đến phép chia cho 0:
IfError( 1/x, 0 )
Công thức này trả về 0 nếu giá trị của x là 0, vì 1/x sẽ tạo ra lỗi. Nếu x không phải là 0, hàm sẽ trả về 1/x.
Dừng xử lý thêm
Khi kết hợp các công thức với nhau thành chuỗi trong công thức hành vi, chẳng hạn như:
Patch( DS1, ... );
Patch( DS2, ... )
Hàm Patch với DS2 sẽ được thực hiện ngay cả khi hàm Patch đầu tiên với DS1 không thực hiện được. Phạm vi lỗi được giới hạn trong mỗi công thức trong chuỗi.
Dùng IfError để thực hiện một hành động và chỉ tiếp tục xử lý nếu hành động thành công. Áp dụng IfError cho ví dụ này:
IfError(
Patch( DS1, ... ), Notify( "problem in the first action" ),
Patch( DS2, ... ), Notify( "problem in the second action" )
)
Nếu hàm Patch với DS1 gặp vấn đề, thì Notify đầu tiên sẽ được thực thi. Hàm sẽ dừng hoạt động xử lý, kể cả việc thực hiện hàm Patch thứ hai với DS2. Nếu hàm Patch đầu tiên thành công, hàm Patch thứ hai sẽ thực thi.
Hàm sẽ trả về đối số DefaultResult tùy chọn (nếu có) nếu không thấy lỗi. Nếu không có đối số này, hàm sẽ trả về đối số Value gần đây nhất.
Việc xây dựng trên ví dụ cuối cùng, giá trị trả về từ đó có IfError thể được kiểm tra để xác định xem có bất kỳ vấn đề nào không:
IfError(
Patch( DS1, ... ), Notify( "problem in the first action" ); false,
Patch( DS2, ... ), Notify( "problem in the second action" ); false,
true
)
Khả năng tương thích của loại
IfError trả về giá trị của một trong các đối số của nó. Các kiểu tất cả các giá trị có thể được trả về phải IfError tương thích.
Trong ví dụ cuối cùng, Patch trả về một bản ghi không tương thích với các giá trị Boolean được sử dụng cho công thức Thay thế hoặc DefaultResult. Đó là tốt, kể từ khi không có tình huống trong đó giá trị trả lại từ các cuộc gọi Patch sẽ được trả lại bởi IfError.
Lưu ý
Trong khi hành vi trong tiến trình cho một thay đổi, các loại của tất cả các đối số phải IfError tương thích hiện tại.
Trong ví dụ đơn giản được mô tả trước đó:
IfError( 1/x, 0 )
Các loại 1/x và 0 tương thích vì cả hai đều là số. Nếu không, đối số thứ hai sẽ bị ép phải khớp với loại của đối số thứ nhất.
Excel hiển thị #DIV/0! khi có phép chia cho số không.
Hãy cân IfError nhắc những điều sau để thay thế:
IfError( 1/x, "#DIV/0!" )
Công thức trên sẽ không hoạt động. Chuỗi văn bản "#DIV/0!" được ép buộc theo kiểu đối số thứ nhất thành IfError, là một số. Kết quả của IfError vẫn là một lỗi khác vì không thể ép buộc chuỗi văn bản. Để sửa lỗi, hãy chuyển đổi đối số đầu tiên thành chuỗi văn bản để luôn trả IfError về chuỗi văn bản:
IfError( Text( 1/x ), "#DIV/0!" )
Như đã thấy ở trên, IfError có thể trả về lỗi nếu Replacement hoặc DefaultResult là lỗi.
FirstError / AllErrors
Trong các công thức thay thế, thông tin về các lỗi tìm thấy có sẵn qua bản ghi FirstError và bảng AllErrors. AllErrors là bảng các bản ghi thông tin lỗi với FirstError là lối tắt đến bản ghi đầu tiên của bảng này. FirstError luôn trả về cùng một giá trị như First( AllErrors ).
Error các bản ghi bao gồm:
| Trường | Loại | Description |
|---|---|---|
| Loại | Enum ErrorKind (số) | Danh mục của lỗi. |
| Tin nhắn | Chuỗi văn bản | Thông báo về lỗi, thích hợp để được hiển thị cho người dùng cuối. |
| Nguồn | Chuỗi văn bản | Vị trí nơi xảy ra lỗi, được sử dụng để báo cáo. Ví dụ, đối với công thức được liên kết với thuộc tính điều khiển, giá trị này có dạng ControlName.PropertyName. |
| Đã quan sát | Chuỗi văn bản | Vị trí trong đó lỗi hiển thị cho người dùng, được dùng để báo cáo. Ví dụ, đối với công thức được liên kết với thuộc tính điều khiển, giá trị này có dạng ControlName.PropertyName. |
| Chi tiết | Bản ghi | Chi tiết về lỗi. Hiện tại, thông tin chi tiết chỉ được cung cấp cho lỗi mạng. Bản ghi này bao gồm HttpStatusCode chứa mã trạng thái HTTP và HttpResponse chứa nội dung của phản hồi từ trình kết nối hoặc dịch vụ. |
Ví dụ: cân nhắc sử dụng công thức sau làm thuộc tính OnSelect của công cụ điều khiển Nút.
Set( a, 1/0 )
Và công thức này trên thuộc tính OnSelect của điều khiển Nút thứ hai:
IfError( a, Notify( "Internal error: originated on " & FirstError.Source & ", surfaced on " & FirstError.Observed ) )
Công thức ví dụ ở trên sẽ hiển thị biểu ngữ sau khi hai nút được kích hoạt theo trình tự:
Thông thường, chỉ có một lỗi mà FirstError có thể xử lý được. Tuy nhiên, có những trường hợp có thể trả về nhiều lỗi. Ví dụ: khi sử dụng toán tử tạo chuỗi công thức hoặc hàm Concurrent. Ngay cả trong những tình huống này, việc báo cáo FirstError có thể đủ để phát hiện sự cố thay vì khiến người dùng bị quá tải với nhiều lỗi. Nếu bạn vẫn có yêu cầu xử lý từng lỗi riêng lẻ, bạn có thể sử dụng bảng AllErrors.
IsError
Hàm IsError kiểm tra giá trị lỗi.
Hàm trả về giá trị Boolean true hoặc false.
Việc IsError sử dụng sẽ ngăn không cho xử lý thêm lỗi.
IsBlankOrError
Hàm IsBlankOrError kiểm tra giá trị trống hoặc giá trị lỗi và tương đương với Or( IsBlank( X ), IsError( X ) ).
Khi bật xử lý lỗi cho các ứng dụng hiện có, hãy cân nhắc việc thay thế IsBlank để duy IsBlankOrError trì hành vi ứng dụng hiện có. Trước khi bổ sung xử lý lỗi, giá trị trống được sử dụng để biểu diễn cả giá trị null từ cơ sở dữ liệu và giá trị lỗi. Error xử lý tách hai cách giải thích trống này có thể thay đổi hành vi của các ứng dụng hiện có tiếp tục sử dụng IsBlank.
Hàm trả về giá trị boolean true hoặc false.
Việc IsBlankOrError sử dụng sẽ ngăn không cho xử lý thêm lỗi.
Sử dụng hàm Error để tạo và báo cáo lỗi tùy chỉnh. Ví dụ: bạn có thể có logic để xác định xem bất kỳ giá trị đã cho nào có hợp lệ cho ngữ cảnh của bạn hay không—một điều gì đó không được kiểm tra tự động để tìm sự cố. Bạn có thể tạo và trả về lỗi của riêng mình, hoàn tất bằng Loạivà Thư, sử dụng cùng một bản ghi được mô tả ở trên cho hàm IfError .
Trong ngữ cảnh , IfErrorhãy sử dụng Error hàm để duyệt lại hoặc vượt qua lỗi. Ví dụ: lô-gic IfError của bạn trong có thể quyết định rằng trong một số trường hợp, lỗi có thể được bỏ qua một cách an toàn, nhưng trong các trường hợp khác, lỗi rất quan trọng để gửi thông qua. Trong IfError hoặc App.OnError, hãy sử dụngError ( FirstError ) để vượt qua lỗi.
Hàm Error cũng có thể được chuyển qua một bảng lỗi, như sẽ được tìm thấy trong bảng AllErrors . Sử Errordụng ( AllErrors ) để rethrow tất cả các lỗi và không chỉ là người đầu tiên.
Một bản ghi trống hoặc bảng trống được chuyển cho kết Error quả không có lỗi.
Cú pháp
Error( ErrorRecord )
Error( ErrorTable )
- ErrorRecord – Bắt buộc. Error bản ghi thông tin, bao gồm Loại, Thư và các trường khác. Loại là bắt buộc. FirstError có thể được truyền trực tiếp.
- ErrorTable – Bắt buộc. Bảng của bản ghi thông tin lỗi. AllErrors có thể được truyền trực tiếp.
IfError( Value1, Replacement1 [, Value2, Replacement2, ... [, DefaultResult ] ] )
- Giá trị – Bắt buộc. Công thức để kiểm tra giá trị lỗi.
- Thay thế – Bắt buộc. Các công thức để đánh giá và giá trị trả về nếu việc so khớp các đối số Value trả về lỗi.
- DefaultResult – Tùy chọn. Các công thức để đánh giá nếu công thức không tìm thấy bất kỳ lỗi nào.
IsError( Giá trị )
IsBlankOrError( Giá trị )
- Giá trị – Bắt buộc. Công thức để kiểm tra.
Ví dụ
Giản dị IfError
| Công thức | Description | Kết quả |
|---|---|---|
| IfError( 1, 2 ) | Đối số đầu tiên không phải là lỗi. Hàm không có lỗi nào khác để kiểm tra và không có giá trị trả về mặc định. Hàm trả về đối số value mới nhất đã đánh giá. | 1 |
| IfError( 1/0, 2 ) | Đối số đầu tiên trả về giá trị lỗi (do phép chia cho 0). Hàm đánh giá đối số thứ hai và trả về kết quả là đối số này. | 2 |
| IfError( 10, 20, 30 ) | Đối số đầu tiên không phải là lỗi. Hàm không có lỗi nào khác để kiểm tra nhưng có giá trị trả về mặc định. Hàm trả về đối số DefaultResult (Kết quả mặc định). | 30 |
| IfError( 10, 11, 20, 21, 300 ) | Đối số đầu tiên 10 không lỗi, vì vậy hàm không đánh giá giá trị thay thế tương ứng của đối số đó (11). Đối số thứ 3 20 không lỗi, vì vậy hàm không đánh giá giá trị thay thế tương ứng của đối số đó (21). Đối số thứ 5 300 không có giá trị thay thế tương ứng và là kết quả mặc định. Hàm trả về kết quả đó vì công thức không chứa lỗi. | 300 |
| IfError( 1/0, Notify( "Đã có vấn đề nội bộ" ) ) | Đối số đầu tiên trả về giá trị lỗi (do phép chia cho 0). Hàm đánh giá đối số thứ 2 và hiển thị thông báo cho người dùng. Giá trị trả về là IfError giá trị trả về của Thông báo, được ép buộc với cùng kiểu như đối số thứ nhất đối với IfError (một số). | 1 |
Giản dị IsError
| Công thức | Description | Kết quả |
|---|---|---|
| IsError( 1 ) | Đối số không phải là lỗi. | SAI |
| IsError( Trống() ) | Đối số là một giá trị trống, nhưng không phải là lỗi. | SAI |
| IsError( 1/0 ) | Đối số lỗi. | ĐÚNG VẬY |
| If( IsError( 1/0 ), Notify( "There was an internal problem" ) ) | Đối số để trả IsError về giá trị lỗi (do chia cho không). Hàm này trả về giá trị true, điều này khiến If hiển thị thông báo cho người dùng bằng hàm Notify. Giá trị trả về của hàm If là giá trị trả về của hàm Notify, bị buộc phải cùng loại với đối số đầu tiên trong hàm If (dạng boolean). | ĐÚNG VẬY |
Giản dị IsBlankOrError
| Công thức | Description | Kết quả |
|---|---|---|
| IsBlankOrError( 1 ) | Đối số không phải là lỗi hay giá trị trống. | SAI |
| IsBlankOrError( Trống() ) | Đối số là một giá trị trống. | ĐÚNG VẬY |
| IsBlankOrError( 1/0 ) | Đối số lỗi. | ĐÚNG VẬY |
Giản dị Error
Trong ví dụ này, các ngày được xác thực tương đối với nhau, dẫn đến lỗi nếu có sự cố.
If( StartDate > EndDate,
Error( { Kind: ErrorKind.Validation, Message: "Start Date must be before End Date" } ) )
Trong ví dụ này, một số lỗi được phép bỏ qua trong khi những lỗi khác bị loại bỏ và thay thế bằng một giá trị. Trong trường hợp đầu tiên, b ở trạng thái lỗi vì hàm Giá trị có đối số không hợp lệ. Bởi vì người viết công thức không mong đợi điều này nên nó được truyền qua để người dùng có thể nhìn thấy. Trong trường hợp thứ hai, với cùng công thức, b có giá trị 0, dẫn đến phép chia cho không. Trong trường hợp này, người viết công thức có thể biết rằng điều này có thể chấp nhận được đối với logic này, loại bỏ lỗi (không có biểu ngữ nào được hiển thị) và thay vào đó trả về -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
Bảng AllErrors có thể được lọc giống như bất kỳ bảng nào khác. Được sử dụng với hàm Error , có thể loại bỏ các lỗi dự kiến và các lỗi còn lại được giữ lại và báo cáo. Ví dụ, nếu chúng ta biết rằng phép chia cho số 0 không phải là vấn đề trong một bối cảnh cụ thể, thì những lỗi đó có thể được lọc ra, giữ nguyên tất cả các lỗi khác bằng công thức sau:
Error( Filter( AllErrors, Kind <> ErrorKind.Div0 ) )
Hướng dẫn chi tiết
Thêm công cụ điều khiển Nội dung nhập văn bản rồi đặt tên là TextInput1 nếu mặc định không có tên đó.
Thêm công cụ điều khiển Nhãn rồi đặt tên là Label1 nếu mặc định không có tên đó.
Đặt công thức cho thuộc tính Văn bản của Label1 như sau:
IfError( Value( TextInput1.Text ), -1 )Trong TextInput1, hãy nhập 1234.
Nhãn 1 hiển thị giá trị 1234 vì đây là đầu vào hợp lệ cho hàm Giá trị.
Trong TextInput1, hãy nhập ToInfinity.
Nhãn 1 hiển thị giá trị -1 vì đây không phải là đầu vào hợp lệ cho hàm Giá trị. Nếu không ngắt dòng hàm Value bằng IfError, nhãn sẽ không hiển thị giá trị nào vì giá trị lỗi được coi là trống.