Share via


Функции за грешка, IfError, IsError, IsBlankOrError

Отнася се за: Платно приложения Dataverse формула колони Desktop потоци Модел задвижване приложения Power Platform CLI

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

Бележка

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 трябва да са съвместими.

В последния пример, Корекция ще върне запис, който не е съвместим с булевите, използвани за Замяна формули или 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 whcih съдържа 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 )
Грешка( Таблица с грешки )

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

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

  • Value(s) – Задължително. Формули за тестване на стойност за грешка.
  • Replacement(s) – Задължително. Формулите за оценка и стойности, които да се върнат, ако съвпадат с аргументите стойност върнаха грешка.
  • DefaultResult – Опционално. Формулите за оценка на това дали формулата не намира грешки.

IsError( Value )
IsBlankOrError( Стойност )

  • Value – Задължително. Формула за тестване.

Примери

Прост 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( "There was an internal problem" ) ) Първият аргумент връща стойност на грешка (поради разделяне на нула). Функцията оценява втория аргумент и показва съобщение на потребителя. Върнатата стойност на IfError е възвръщаемата стойност на Уведоми, принудени към същия тип като първия аргумент за IfError (число). 1

Прост IsError

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

Обикновен IsBlankOrError

Формула Описание Резултат
IsBlankOrError( 1 ) Аргументът не е грешка или празен. false
IsBlankOrError( Blank() ) Аргументът е празен. вярно
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, тъй като това е валиден вход към функцията Стойност.

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

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

Вижте също

Препратка към формула за Power Apps