Error, IfError, IsError, IsBlankOrError функції

Функції Застосовується до
Error
IfError
IsError
Canvas apps Copilot Studio Desktop flows Dataverse formula columns Model-driven apps Power Platform CLI Dataverse functions Power Pages
IsBlankOrError Програми Canvas Copilot Studio Desktop flows Model-driven apps Power Platform CLI Dataverse functions Power Pages

Виявлення помилок і надання альтернативного значення або виконання дії. Створіть настроювану помилку або передайте повідомлення про помилку.

Нотатка

Якщо програма вимкнула функцію керування помилками на рівні формули в розділі «Оновлення>налаштувань>припинено», ці функції не працюватимуть належним чином.

IfError

Функція IfError перевіряє значення, доки не знайде помилку. У разі виявлення функцією помилки вона обчислює та повертає відповідне значення заміни і припиняє подальше оцінювання. Також може забезпечуватися значення за замовчуванням, якщо не буде знайдено помилок. Структура схожа IfError на функцію If : IfError перевіряє на наявність помилок, а якщо – на істину.

Використовується 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" )
)

У разі виникнення проблеми з функцією Patch для DS1 спочатку виконується функція Notify. Подальша обробка, включно з другою функцією Patch для DS2, не відбувається. Якщо перша функція Patch виконується успішно, буде виконано другу функцію Patch.

Якщо вказано необов’язковий аргумент DefaultResult, він повертатиметься, якщо не буде виявлено помилок. Якщо його не вказати, повертатиметься останній аргумент Value.

У останньому прикладі можна перевірити повернуте значення IfError , щоб визначити, чи виникли проблеми:

IfError(
    Patch( DS1, ... ), Notify( "problem in the first action" );  false,
    Patch( DS2, ... ), Notify( "problem in the second action" ); false,
    true
)

Сумісність за типом

IfError повертає значення одного з аргументів. Типи всіх значень, які можуть повертатися IfError , мають бути сумісні.

В останньому прикладі Patch повертає запис, несумісний з логічними значеннями, що використовуються для формул заміни або результату за замовчуванням. Це нормально, оскільки немає ситуації, коли повернуте значення з цих виправлень буде повернуто 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 ) )

Наведений вище приклад формули відображатиме наведений нижче банер, якщо послідовно натиснути обидві кнопки:

Активований елемент керування «Кнопка», що відображає сповіщення від функції «Notify».

Як правило, буде тільки одна помилка, з якою FirstError може в достатній мірі працювати. Проте існують сценарії, в яких може повертатися кілька помилок. Наприклад, під час використання оператора побудови ланцюжка формул або функції Concurrent . Навіть у цих ситуаціях звітування firstError може виявити проблему, а не перевантажувати користувача кількома помилками. Якщо все ще потрібно працювати з кожною помилкою окремо, можна скористатися таблицею AllErrors.

IsError

Функція IsError перевіряє значення помилки.

Функція повертає логічне значення – true або false.

Використання IsError запобігає подальшій обробці помилки.

IsBlankOrError

Функція IsBlankOrError перевіряє пусте значення або значення помилки та еквівалентна Or( IsBlank( X ), IsError( X ) ).

Активуючи обробку помилок для наявних програм, радимо замінити IsBlankIsBlankOrError на, щоб зберегти наявну поведінку програм. До додавання обробки помилок порожнє значення використовувалося для представлення як нульових значень з баз даних, так і значень помилок. Error обробка розділяє ці два тлумачення пустих , які можуть змінити поведінку наявних програм, які продовжують використовувати IsBlank.

Функція повертає логічне значення – true або false.

Використання IsBlankOrError запобігає подальшій обробці помилки.

Скористайтеся функцією Error , щоб створити та повідомити про настроювану помилку. Наприклад, може існувати логіка для визначення, чи припустиме будь-яке значення для контексту чи ні – те, що не перевіряється на наявність проблеми автоматично. Ви можете створити та повернути власну помилку, в комплекті з kind і Message, використовуючи той самий запис, описаний вище для IfError функції.

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

Функцію Error також можна передати таблицею помилок, як це можна зробити в таблиці AllErrors . Використовуйте Error(AllErrors), щоб переростити всі помилки, а не тільки перші.

Пустий запис або пуста таблиця, передана до Error результатів помилки.

Синтаксис

Error( Запис помилки )
Error( ErrorTable )

  • ErrorRecord – обов’язковий. Error інформаційний запис, зокрема "Вид", "Повідомлення" та інші поля. Потрібна добра. FirstError можна передати безпосередньо.
  • Таблиця помилок– обов’язковий. Таблиця записів відомостей про помилки. AllErrors можна передавати безпосередньо.

IfError( Значення1, заміна1 [, значення2, заміна2; ... [, DefaultResult ] ] )

  • Цінності – обов’язкові . Формула або формули, які потрібно перевірити на наявність значення помилки.
  • Заміни – обов’язкові. Формули для обчислення і значення для повернення, якщо відповідні аргументи Value повернуть помилку.
  • DefaultResult – необов’язковий. Формули, які потрібно обчислити, якщо не буде знайдено помилок.

IsError( Значення )
IsBlankOrError( Значення )

  • Value – обов’язковий. Формула для перевірки.

Приклади

Простий IfError

Формула Опис Результат
IfError( 1, 2 ) Перший аргумент не є помилкою. Більше немає помилок для перевірки та значень за замовчуванням для повернення функцією. Функція повертає останній обчислений аргумент Value. 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 ) Аргумент не є помилкою. Брехня
IsError(Blank() ) Аргумент пустий, але не є помилкою. Брехня
IsError( 1/0 ) Аргумент є помилкою. Справжній
If( IsError( 1/0 ), Notify( "Виникла внутрішня проблема" ) ) Аргумент, який IsError повертає значення помилки (через ділення на нуль). Ця функція повертає значення «істина», що призводить If до відображення повідомлення для користувача із функцією Notify. Значення, повернуте функцією If є значенням, що повертається функцією Notify, приведеним до типу першого аргументу функції 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 ) )

Покрокові інструкції

  1. Додайте елемент керування Ввід тексту та назвіть його TextInput1 (ВвідТексту1), якщо це ім’я не було присвоєно йому за замовчуванням.

  2. Додайте елемент керування Підпис та назвіть його Label1 (Підпис1), якщо це ім’я не було присвоєно йому за замовчуванням.

  3. Настройте властивість Text елемента керування з ім’ям Label1 відповідно до нижчезазначеної формули.

    IfError( Value( TextInput1.Text ), -1 )
    
  4. В елементі керування TextInput1 уведіть 1234.

    Label1 показує значення 1234 , оскільки це коректне введення для функції Value.

  5. В елементі керування TextInput1 уведіть ToInfinity (До нескінченності).

    Label1 показує значення-1 , оскільки це не є коректним введенням для функції Value. Без обтікання функції Value із підписом IfErrorне відображатиметься жодне значення, оскільки значення помилки розглядається як пусте.

Статті за темою:

Посилання на формулу для Power Apps