Бележка
Достъпът до тази страница изисква удостоверяване. Можете да опитате да влезете или да промените директориите.
Достъпът до тази страница изисква удостоверяване. Можете да опитате да промените директориите.
| Функции | Приложимо за |
|---|---|
| Error IfError IsError |
|
| IsBlankOrError |
|
Открива грешки и предоставя алтернативна стойност или предприема действия. Създаване на потребителска грешка или преминаване през грешка.
Бележка
Ако дадено приложение е забранило функцията за управление на грешки на ниво формула под Настройки>Актуализации>Пенсионирани, тези функции няма да работят правилно.
IfError
Функцията IfError проверява стойностите, докато открие грешка. Ако функцията открие грешка, функцията оценява и връща съответната заместваща стойност и спира по-нататъшната оценка. Може да бъде предоставена и стойност по подразбиране, когато няма намерени грешки. Структурата на прилича на IfError тази на функцията If : IfError проверява за грешки, докато If проверява за истина.
Използвайте IfError , за да заместите грешка с валидна стойност, така че изчисленията надолу по веригата да могат да продължат. Например, използвайте тази функция, ако въвеждането на потребителя може да доведе до деление на нула:
IfError( 1/x, 0 )
Тази формула връща 0 , ако стойността на x е нула, тъй като 1/x води до грешка. Ако x не е нула, тогава 1/x се връща.
Спиране на по-нататъшната обработка
Кога свързвате верижно формули заедно във формули за поведение, като:
Patch( DS1, ... );
Patch( DS2, ... )
Втората функция Patch към DS2 ще се направи опит, дори ако Patch към DS1 е неуспешна. Обхватът на грешката е ограничен до всяка верига, формулирана.
Използвайте IfError , за да извършите действие, и продължете обработката само ако действието е успешно. Прилагане IfError към този пример:
IfError(
Patch( DS1, ... ), Notify( "problem in the first action" ),
Patch( DS2, ... ), Notify( "problem in the second action" )
)
Ако Корекция на DS1 има проблем, се изпълнява първото Уведоми. Не се извършва по-нататъшна обработка, включително втората Корекция на DS2. Ако първата Корекция успява, втората Корекция ще се изпълни.
Ако е доставен, опционалният аргумент 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 връща запис, който не е съвместим с булевите стойности, използвани за формулите за заместване или DefaultResult. Което е добре, тъй като няма ситуация, в която върнатата стойност от тези извиквания на корекция да бъде върната от 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 записите включват:
| Поле | Тип | Описание |
|---|---|---|
| Вид | 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 ) )
Примерната формула по-горе ще показва следния банер, когато двата бутона са активирани последователно:
Обикновено ще има само една грешка, с която FirstError може да работи достатъчно. Има обаче сценарии, при които могат да бъдат върнати множество грешки. Например, когато използвате оператор за верига на формула или паралелна функция. Дори в тези ситуации докладването на 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( Стойност1; Замяна1 [; Стойност2; Замяна2; ... [, 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, Notify( "Възникна вътрешен проблем" ) ) | Първият аргумент връща стойност на грешка (поради разделяне на нула). Функцията оценява втория аргумент и показва съобщение на потребителя. Върнатата стойност на IfError е върнатата стойност на Notify, преобразувана в същия тип като първия аргумент ( IfError число). | 1 |
Прост IsError
| Формула | Описание | Резултат |
|---|---|---|
| IsError( 1 ) | Аргументът не е грешка. | невярно |
| IsError( Blank() ) | Аргументът е празен, но не е грешка. | невярно |
| IsError( 1/0 ) | Аргументът е грешка. | верен |
| If( IsError( 1/0 ), Notify( "Възникна вътрешен проблем" ) ) | Аргументът за IsError връща стойност на грешка (поради деление на нула). Тази функция се връща вярно, което причинява If да покажете съобщение на потребителя с Notify функция. Върнатата стойност на If е възвръщаемата стойност на Уведоми, принудена към същия тип като първия аргумент за If (булево). | верен |
Прост IsBlankOrError
| Формула | Описание | Резултат |
|---|---|---|
| IsBlankOrError( 1 ) | Аргументът не е грешка или празен. | невярно |
| IsBlankOrError( Blank() ) | Аргументът е празен. | верен |
| IsBlankOrError( 1/0 ) | Аргументът е грешка. | верен |
Прост Error
В този пример датите се валидират една спрямо друга, което води до грешка, ако има проблем.
If( StartDate > EndDate,
Error( { Kind: ErrorKind.Validation, Message: "Start Date must be before End Date" } ) )
В този пример някои грешки могат да преминат, докато други се потискат и заменят със стойност. В първия случай b е в състояние на грешка, тъй като функцията Value има невалиден аргумент. Тъй като това е неочаквано от автора на формули, то се предава, така че потребителят да го види. Във втория случай, при същата формула, b има стойност 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 ) )
Стъпка по стъпка
Добавете Въвеждане на текст контрола и я назовете TextInput1, ако няма това име по подразбиране.
Добавете Етикет контрола и я назовете Label1, ако няма това име по подразбиране.
Задайте формулата за свойството Текст на Label1:
IfError( Value( TextInput1.Text ), -1 )В TextInput1 въведете 1234.
Label1 показва стойността 1234 , тъй като това е валиден вход за функцията Value.
В TextInput1 въведете ToInfinity.
Label1 показва стойността-1 , тъй като това не е валиден вход за функцията Value. Без обтичане на функцията Value с IfError, етикетът няма да показва стойност, тъй като стойността на грешката се третира като празна.