Функције Еррор, ИфЕррор, ИсЕррор, ИсБланкОрЕррор
Односи се на: Колоне Dataverse формуле апликација платна Токови на радној површини ЦЛИ апликација Power Pages Power Platform засноване на моделу
Открива грешке и обезбеђује алтернативну вредност или предузима радњу. Креирајте прилагођену грешку или прођите кроз грешку.
Белешка
Ако је апликација онемогућила функцију управљања грешкама на нивоу формуле под Ажурирања поставки > Пензионисано >, те функције неће радити исправно.
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" )
)
Ако Закрпа од DS1
има проблем, прво Обавести се извршава. Неће бити даље обраде, укључујући друга Закрпа од DS2
. Ако првa Закрпа успе, друга Закрпа се извршава.
Ако није наведено, опционални аргумент DefaultResult се враћа ако није откривена ниједна грешка. Без овог аргумента, последњи аргумент Вредност је враћен.
На основу последњег примера, повратна вредност из IfError може да се провери да би се утврдило да ли је било проблема:
IfError(
Patch( DS1, ... ), Notify( "problem in the first action" ); false,
Patch( DS2, ... ), Notify( "problem in the second action" ); false,
true
)
Тип компатибилности
ИфЕррор враћа вредност једног од својих аргумената. Типови свих вредности које IfError може да врати морају бити компатибилни.
У последњем примеру, Патцх враћа запис који није компатибилан са Боолеансима који се користе за формуле замене или ДефаултРесулт. Што је у реду, јер не постоји ситуација у којој би враћена вредност од ових позива функције Закрпа била враћена од стране IfError.
Белешка
Док је понашање у процесу за промену, типови свих аргумената за IfError тренутно морају бити компатибилни.
У раније описаном једноставном примеру:
IfError( 1/x, 0 )
Типови 1/x
и 0
су били компатибилни јер су то бројеви. Ако нису, други аргумент је приморан да одговара типу првог аргумента.
Екцел приказује #ДИВ/0! када дође до поделе са нулом.
Уместо тога, размотрите IfError са следећим:
IfError( 1/x, "#DIV/0!" )
Горња формула неће радити. Текстуални стринг "#DIV/0!"
је приморан на тип првог аргумента за ИфЕррор , што је број. Резултат ИфЕррор је још једна грешка јер текст стринг не може бити принудан. Као исправку, први аргумент конвертујте у текстуалну ниску, тако да IfError увек враћа текстуалну ниску:
IfError( Text( 1/x ), "#DIV/0!" )
Као што се види горе, IfError може да врати грешку ако је Замена или DefaultResult грешка.
FirstError / AllErrors
У формулама за замену, информације о пронађеним грешкама су доступне преко записа FirstError и табеле AllErrors. АллЕррорс је табела записа информација о грешкама са ФирстЕррор је пречица до првог записа ове табеле. ФирстЕррор увек враћа исту вредност као Фирст( АллЕррорс ).
Записи о грешци обухватају:
Поље | Тип | Опис |
---|---|---|
Врста | ErrorKind нумерички (број) | Категорија грешке. |
Поруку | Текстуална ниска | Порука о грешци, погодна за приказивање крајњем кориснику. |
Извор | Текстуална ниска | Локација на којој потиче грешка, користи се за извештавање. На пример, за формулу везану за контролну особину, ова вредност је у облику ЦонтролНаме.ПропертyНаме. |
Посматрао | Текстуална ниска | Локација где је грешка приказана кориснику, користи се за извештавање. На пример, за формулу везану за контролну особину, ова вредност је у облику ЦонтролНаме.ПропертyНаме. |
Детаљи | Запис | Детаљи о грешци. Тренутно, детаљи су дати само за грешке у мрежи. Овај запис укључује ХттпСтатусЦоде који садржи ХТТП статусни код и ХттпРеспонсе који садржи тело одговор из конектора или услуге. |
На пример, размотрите следећу формулу као својство OnSelect контроле Дугме:
Set( a, 1/0 )
И ова формула на својству OnSelect друге контроле Дугмета:
IfError( a, Notify( "Internal error: originated on " & FirstError.Source & ", surfaced on " & FirstError.Observed ) )
Горња пример формуле би приказао следећи банер када се два дугмета активирају у низу:
Типично, постојаће само једна грешка са којом ФирстЕррор може довољно радити. Међутим, постоје сценарији у којима може бити враћено више грешака. На пример, када користите оператор за повезивање формула или функцију Concurrent. Чак и у оваквим ситуацијама, извештавање FirstError може бити довољно да открије проблем уместо да преоптерети корисника са више грешака. Ако и даље имате захтев да радите са сваком грешком појединачно, можете да користите табелу AllErrors.
IsError
Функција IsError тестира за вредност грешке.
Повратна вредност је логичка вредност true или false.
Коришћење ИсЕррор спречава даљу обраду грешке.
IsBlankOrError
Функција IsBlankOrError тестира да ли је вредност празна или погрешна да еквивалентна је са Or( IsBlank( X ), IsError( X ) )
.
Када омогућите управљање грешкама за постојеће апликације, размислите о замени функције IsBlank функцијом IsBlankOrError да бисте заштитили постојеће понашање апликације. Пре додавања руковања грешкама, празна вредност је коришћена за представљање и нултих вредности из база података и вредности грешака. Руковање грешкама раздваја ове две интерпретације празног, што би могло да промени понашање постојећих апликација које и даље користе IsBlank.
Повратна вредност је логичка вредност true или false.
Коришћење ИсБланкОрЕррор спречава даљу обраду грешке.
Користите функцију Error да бисте креирали и пријавили прилагођену грешку. На пример, можда имате логику да утврдите да ли је нека дата вредност важећа за ваш контекст или не – нешто што се не проверава аутоматски када настане проблем. Можете да креирате и вратите сопствену грешку, употпуњену функцијама Kind и Message, користећи исти запис описан изнад за функцију IfError.
У контексту функције IfError, користите функцију Error да бисте поново избацили или прошли кроз грешку. На пример, ваша логика у IfError може одлучити да се у неким случајевима грешка може безбедно игнорисати, али у другим случајевима грешка је важна за слање. У оквиру функција IfError или App.OnError, користите Error( FirstError ) да бисте прошли кроз грешку.
Функцији Грешка може се проследити и табела грешака, као што би се нашла у табели AllErrors. Користите Error( AllErrors ) да бисте поново избацили све грешке, а не само прву.
Запис који је празан или празна табела прослеђена функцији Error не резултира грешком.
Синтакса
Грешка( ЕррорРецорд )
Грешка ( Табела грешака)
- ЕррорРецорд – Обавезно. Запис информација о грешци, укључујући Kind, Message и друга поља. Врста је потребна. ФирстЕррор се може проћи директно.
- ЕррорТабле – Обавезно. Табела записа са информацијама о грешкама. АллЕррорс се може проследити директно.
ИфЕррор ( ВалуеКСНУМКС , РеплацементКСНУМКС [, ВалуеКСНУМКС , РеплацементКСНУМКС , ... [, ДефаултРесулт ] ] )
- Вредности – Обавезно. Формула/е за тестирање вредности грешке.
- Замене – Обавезно. Формуле за оцену и вредности које се враћају ако су агрументи Вредности који се подударају вратили грешку.
- ДефаултРесулт – Опционо. Формуле за оцену ако формула не нађе никакве грешке.
ИсЕррор( Вредност)
ИсБланкОрЕррор( Валуе )
- Вредност – Обавезно. Формула која се тестира.
Примери
Једноставна IfError
Формула | Опис | Резултат |
---|---|---|
ИфЕррор ( 1, 2 ) | Први аргумент није грешка. Функција нема других грешака за проверу и нема подразумеване повратне вредности. Функција враћа последњи аргумент вредности оцењен. | 1 |
АкоГрешка ( 1/0, 2 ) | Први аргумент враћа вредност грешке (због дељења нулом). Функција оцењује други аргумент и враћа га као резултат. | 2 |
ИфЕррор ( 10, 20, 30 ) | Први аргумент није грешка. Функција нема других грешака за проверу, али има подразумеване повратне вредности. Функција враћа аргумент DefaultResult. | 30 |
ИфЕррор ( 10, 11, 20, 21, 300 ) | Први аргумент 10 није грешка, тако да функција не оцењује одговарајућу замену тог аргумента, 11. Трећи аргумент 20 такође није грешка, тако да функција не оцењује одговарајућу замену тог аргумента, 21. Пети аргумент, 300, нема одговарајућу замену и подразумевани је резултат. Функција враћа тај резултат јер формула не садржи грешке. | 300 |
ИфЕррор ( 1/0, Нотифи( "Постојао је унутрашњи проблем") ) | Први аргумент враћа вредност грешке (због дељења нулом). Функција процењује други аргумент и приказује поруку кориснику. Враћена вредност од IfError је враћена вредност од Notify, присиљена на исти тип као и први аргумент од IfError (број). | 1 |
Једноставна IsError
Формула | Опис | Резултат |
---|---|---|
ИсЕррор ( 1 ) | Аргумент није грешка. | лажан |
ИсЕррор ( Бланк() ) | Аргумент је празан, али није грешка. | лажан |
ИсЕррор ( 1/0 ) | Аргумент је грешка. | Истина |
иф ( ИсЕррор( 1/0 ), Нотифи( "Постојао је унутрашњи проблем" ) ) | Први аргумент од IsError враћа вредност грешке (због дељења нулом). Ова функција враћа true, што узрокује да If кориснику приказује поруку помоћу функције Notify. Враћена вредност од If је враћена вредност од Notify, присиљена на исти тип као и први аргумент од If (логичка вредност). | Истина |
Једноставна функција IsBlankOrError
Формула | Опис | Резултат |
---|---|---|
ИсБланкОрЕррор ( 1 ) | Аргумент није грешка нити празна вредност. | лажан |
ИсБланкОрЕррор ( Бланк() ) | Аргумент је празна вредност. | Истина |
ИсБланкОрЕррор ( 1/0 ) | Аргумент је грешка. | Истина |
Пример грешке
У овом примеру, датуми се проверавају у односу једни на друге, што резултира грешком ако постоји проблем.
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 ) )
Корак по корак
Додајте контролу Text input и назовите је Text1Input1 ако подразумевано нема тај назив.
Додајте контролу Ознак и назовите је Label1 ако подразумевано нема тај назив.
Подесите формулу својства Текст од Label1 на:
IfError( Value( TextInput1.Text ), -1 )
У TextInput1 унесите 1234.
Label1 приказује вредност 1234 јер је ово важећи улаз у функцију Валуе.
У TextInput1 унесите ToInfinity.
Label1 приказује вредност-1 јер ово није валидан улаз у функцију Валуе. Без преламања функције Value функцијом IfError, ознака не би приказала вредност, јер се вредност грешке третира као а празно.