Белешка
Приступ овој страници захтева ауторизацију. Можете покушати да се пријавите или промените директоријуме.
Приступ овој страници захтева ауторизацију. Можете покушати да промените директоријуме.
| Функције | Односи се на |
|---|---|
| Error IfError IsError |
|
| IsBlankOrError |
|
Открива грешке и обезбеђује алтернативну вредност или предузима радњу. Креирајте прилагођену грешку или прођите кроз грешку.
Белешка
Ако је апликација онемогућила функцију управљања грешкама на нивоу формуле под Ажурирања поставки > Пензионисано >, те функције неће радити исправно.
IfError
Функција IfError тестира вредности док не пронађе грешку. Ако функција открије грешку, функција оцењује и враћа одговарајућу замену вредности и зауставља даље оцењивање. Ако се не пронађу грешке, може се добити и подразумевана вредност. Структура IfError подсећа на функцију Иф : IfError тестови за грешке, док Иф тестови за истинито .
Користи се 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 морају бити компатибилни тренутно.
У раније описаном једноставном примеру:
IfError( 1/x, 0 )
Типови 1/x и 0 су били компатибилни јер су то бројеви. Ако нису, други аргумент је приморан да одговара типу првог аргумента.
Екцел приказује #ДИВ/0! када дође до поделе са нулом.
Уместо тога, размотрите IfError следеће:
IfError( 1/x, "#DIV/0!" )
Горња формула неће радити. Текст стринг "#DIV/0!" је приморан на тип првог аргумента на IfError, што је број. Резултат IfError је још једна грешка јер се текстуални низ не може присилити. Као поправку, претворите први аргумент у текстуални низ тако да IfError увек враћа текстуални низ:
IfError( Text( 1/x ), "#DIV/0!" )
Као што се види горе, IfError може да врати грешку ако је замена или ДефаултРесулт грешка.
ФирстЕррор / АллЕррорс
У формулама за замену, информације о пронађеним грешкама су доступне преко записа FirstError и табеле AllErrors. АллЕррорс је табела записа информација о грешкама са ФирстЕррор је пречица до првог записа ове табеле. ФирстЕррор увек враћа исту вредност као Фирст( АллЕррорс ).
Error Записи укључују:
| Поље | Тип | Опис |
|---|---|---|
| Врста | 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.
Коришћење IsError спречава даљу обраду грешке.
IsBlankOrError
Функција IsBlankOrError тестира или празну вредност или вредност грешке и еквивалентна је . Or( IsBlank( X ), IsError( X ) )
Када омогућите руковање грешкама за постојеће апликације, размислите о замени ИсБланк са IsBlankOrError да бисте сачували постојеће понашање апликација. Пре додавања руковања грешкама, празна вредност је коришћена за представљање и нултих вредности из база података и вредности грешака. Error руковање раздваја ова два тумачења празног што би могло да промени понашање постојећих апликација које настављају да користе ИсБланк .
Повратна вредност је логичка вредност true или false.
Коришћење IsBlankOrError спречава даљу обраду грешке.
Користите Error функцију да бисте креирали и пријавили прилагођену грешку. На пример, можда имате логику да утврдите да ли је нека дата вредност важећа за ваш контекст или не – нешто што се не проверава аутоматски када настане проблем. Можете креирати и вратити сопствену грешку, заједно са Кинд и Мессаге , користећи исти запис описан горе за функцију IfError .
У контексту IfError, користите Error функцију да бисте поново бацили или прошли кроз грешку. На пример, ваша логика може IfError одлучити да се у неким случајевима грешка може безбедно игнорисати, али у другим случајевима грешка је важна за слање. Унутар IfError или Апп.ОнЕррор , користите Error( ФирстЕррор ) да прође кроз грешку.
Функција Error такође може да проследи табелу грешака, као што би се могло наћи у табели АллЕррорс . Користите Error( АллЕррорс ) да бисте поново бацили све грешке, а не само прву.
Празан запис или празна табела која је прослеђена Error резултира без грешке.
Синтакса
Error( ЕррорРецорд )
Error( Табела грешака )
- ЕррорРецорд – Обавезно. Error информације запис, укључујући Кинд , Мессаге , и друга поља. Врста је потребна. ФирстЕррор се може проћи директно.
- ЕррорТабле – Обавезно. Табела записа са информацијама о грешкама. АллЕррорс се може проследити директно.
IfError( Value1 , Replacement1 [, Value2 , Replacement2 , ... [, ДефаултРесулт ] ] )
- Вредности – Обавезно. Формула/е за тестирање вредности грешке.
- Замене – Обавезно. Формуле за оцену и вредности које се враћају ако су агрументи Вредности који се подударају вратили грешку.
- ДефаултРесулт – Опционо. Формуле за оцену ако формула не нађе никакве грешке.
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, Обавестите( "Постојао је унутрашњи проблем") | Први аргумент враћа вредност грешке (због дељења нулом). Функција процењује други аргумент и приказује поруку кориснику. Повратна вредност IfError је повратна вредност Нотифy , приморана на исти тип као и први аргумент ( IfError број). | 1 |
Једноставно IsError
| Формула | Опис | Резултат |
|---|---|---|
| IsError( 1 ) | Аргумент није грешка. | лажан |
| IsError( Бланк() ) | Аргумент је празан, али није грешка. | лажан |
| IsError( 1/0 ) | Аргумент је грешка. | Истина |
| Иф ( IsError( 1/0 ), Нотифy( "Дошло је до унутрашњег проблема" ) ) | Аргумент да IsError врати вредност грешке (због дељења са нулом). Ова функција враћа true, што узрокује да If кориснику приказује поруку помоћу функције Notify. Враћена вредност од If је враћена вредност од Notify, присиљена на исти тип као и први аргумент од If (логичка вредност). | Истина |
Једноставно IsBlankOrError
| Формула | Опис | Резултат |
|---|---|---|
| IsBlankOrError( 1 ) | Аргумент није грешка нити празна вредност. | лажан |
| IsBlankOrError( Бланк() ) | Аргумент је празна вредност. | Истина |
| IsBlankOrError( 1/0 ) | Аргумент је грешка. | Истина |
Једноставно Error
У овом примеру, датуми се проверавају у односу једни на друге, што резултира грешком ако постоји проблем.
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 јер ово није валидан улаз у функцију Валуе. Без умотавања функције Вредност са IfError, ознака ће показати никакву вредност као вредност грешке се третира као празно .