Споделяне чрез


Функции Error, IfError, IsError, IsBlankOrError

Отнася се за: Колони Dataverse с формули за приложения за платно Потоци на работния плот Приложения на компютъра Power Pages Power Platform на командването

Открива грешки и предоставя алтернативна стойност или предприема действия. Създаване на потребителска грешка или преминаване през грешка.

Бележка

Ако дадено приложение е забранило функцията за управление на грешки на ниво формула под Настройки>Актуализации>Пенсионирани, тези функции няма да работят правилно.

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 ).

Записите за грешки включват:

Поле Тип Описание
Вид 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, за да запазите съществуващото поведение на приложението. Преди добавянето на обработката на грешки се използваше празна стойност за представяне както на нулеви стойности от бази данни, така и на стойности за грешки. Обработката на грешки разделя тези две интерпретации на празно което може да промени поведението на съществуващите приложения, които продължават да използват IsBlank.

Върнатата стойност е булево вярно или невярно.

Използването на IsBlankOrError предотвратява по-нататъшната обработка на грешката.

Използвайте функцията Error за създаване и докладване на персонализирана грешка. Например, може да имате логика, за да определите дали дадена стойност е валидна за вашия контекст или не - нещо, което не се проверява автоматично за проблем. Можете да създадете и върнете своя собствена грешка, заедно с Kind и Message, като използвате същия запис, описан по-горе за функцията IfError.

В контекста на IfError, използвайте функцията Error за повторно хвърляне или преминаване през грешка. Например, вашата логика в IfError може да реши, че в някои случаи грешката може безопасно да бъде игнорирана, но в други случаи грешката е важно да бъде изпратена. В рамките на IfError или App.OnError използвайте Error( FirstError ) за преминаване през грешка.

На функцията Error може също да бъде предадена таблица с грешки, както ще се намери в таблицата AllErrors. Използвайте Error( AllErrors ) за повторно извеждане на всички грешки, а не само на първата.

Празен запис или празна таблица, предадена на Error не води до грешка.

Синтаксис

Грешка ( ErrorRecord )
Грешка ( ErrorTable )

  • ErrorRecord – Задължително. Запис с информация за грешка, включително Kind, Message и други полета. Изисква се вид . FirstError може да се предава директно.
  • ErrorTable – Задължително. Таблица със записи с информация за грешки. AllErrors може да се предава директно.

IfError( Стойност1; Замяна1 [, Стойност2; Замяна2;... [, Резултат по подразбиране] ] )

  • Ценности – Задължително. Формули за тестване на стойност за грешка.
  • Заместители – Задължителни. Формулите за оценка и стойности, които да се върнат, ако съвпадат с аргументите стойност върнаха грешка.
  • 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 е възвръщаемата стойност на Уведоми, принудени към същия тип като първия аргумент за IfError (число). 1

Прост IsError

Формула Описание Резултат
IsError( 1 ) Аргументът не е грешка. невярно
IsError( Празно() Аргументът е празен, но не е грешка. невярно
IsError( 1/0 ) Аргументът е грешка. верен
If( IsError( 1/0 ), Notify( "Имаше вътрешен проблем" ) ) Аргументът към IsError връща стойност на грешка (поради разделяне на нула). Тази функция се връща вярно, което причинява If да покажете съобщение на потребителя с Notify функция. Върнатата стойност на If е възвръщаемата стойност на Уведоми, принудена към същия тип като първия аргумент за If (булево). верен

Обикновен IsBlankOrError

Формула Описание Резултат
IsBlankOrError( 1 ) Аргументът не е грешка или празен. невярно
IsBlankOrError( Празно() Аргументът е празен. верен
IsBlankOrError( 1/0 ) Аргументът е грешка. верен

Обикновена грешка

В този пример датите се валидират една спрямо друга, което води до грешка, ако има проблем.

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 ) )

Стъпка по стъпка

  1. Добавете Въвеждане на текст контрола и я назовете TextInput1, ако няма това име по подразбиране.

  2. Добавете Етикет контрола и я назовете Label1, ако няма това име по подразбиране.

  3. Задайте формулата за свойството Текст на Label1:

    IfError( Value( TextInput1.Text ), -1 )
    
  4. В TextInput1 въведете 1234.

    Label1 показва стойността 1234 , тъй като това е валиден вход за функцията Value.

  5. В TextInput1 въведете ToInfinity.

    Label1 показва стойността-1 , тъй като това не е валиден вход за функцията Value. Без да обвивате функцията Value с IfError, етикетът няма да показва стойност, тъй като стойността на грешката се третира като празно.

Вижте също

Референтна формула за Power Apps