Бөлісу құралы:


Қате, IfError, IsError, IsBlankOrError функциялары

Қолданылады: Canvas apps Dataverse формула бағандары Жұмыс үстелі ағындары CLI моделі басқарылатын бағдарламалар Power Platform

Қателерді анықтайды және балама мәнді береді немесе әрекет жасайды. Реттелетін қатені жасаңыз немесе қатені жіберіңіз.

Ескертпе

IfError

IfError функциясы қатені тапқанша мәндерді тексереді. Функция қатені тапса, функция есептеледі және сәйкес ауыстыру мәнін қайтарады және одан әрі есептеуді тоқтатады. Сондай-ақ қателер табылмаған жағдайға әдепкі мәнді беруге болады. IfError құрылымы If функциясына ұқсайды: IfError қателер бар-жоғын тексереді, ал If функциясы true мәнін беретінін тексереді.

IfError функциясын кейінгі есептеулер жалғаса алуы үшін қатені жарамды мәнмен ауыстыру үшін пайдаланыңыз. Мысалы, бұл функцияны пайдаланушының енгізуі нөлге бөлуге әкелуі мүмкін болса пайдаланыңыз:

IfError( 1/x, 0 )

Бұл формула x мәні нөл болса, 0 мәнін қайтарады, өйткені 1/x қатені тудырады. x нөл болмаса, 1/x қайтарылады.

Одан әрі өңдеуді тоқтату

Мінез-құлық формулаларында формулаларды тізбектегенде, мысалы:

Patch( DS1, ... );
Patch( DS2, ... )

DS2 екінші Patch функциясын орындауға тіпті DS1Patch функциясы сәтсіз болса да орындалады. Қатенің аумағы тізбектелетін әрбір формуламен шектеледі.

IfError функциясын әрекетті орындау және өңдеуді осы әрекет сәтті болса ғана жалғастыру үшін пайдаланыңыз. Осы мысалға IfError функциясын қолдану:

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

DS1Patch мәселесі болса, алдымен Notify орындалады. Одан әрі өңдеу, соның ішінде DS2 екінші Patch орын алмайды. Бірінші 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 функциясы Ауыстыру формулалары немесе DefaultResult үшін пайдаланылған логикалық мәндермен үйлесімді емес жазбаны қайтарады. Бұл дұрыс, өйткені бұл 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!" )

Жоғарыда көретіндей, Replacement немесе DefaultResult қате болса, IfError қатені қайтаруы мүмкін.

FirstError / AllErrors

Ауыстыру формулаларында табылған қателер туралы ақпарат FirstError жазбасы және AllErrors кестесі арқылы қолжетімді. AllErrors кестесі FirstError осы кестенің бірінші жазбасына таңбаша болатын қате туралы ақпарат жазбаларының кестесі болып табылады. FirstError кестесі әрдайым First( AllErrors ) кестесімен бірдей мәнді қайтарады.

Қате жазбалар келесілерді қамтиды:

Өріс Түр Сипаттама
Түрі ErrorKind санамалауы (сан) Қате санаты.
Хабарлама Мәтін жолы Соңғы пайдаланушыға көрсетуге жарайтын қате туралы хабар.
Бастапқы көз Мәтін жолы Қате пайда болған орын есеп беру үшін пайдаланылады. Мысалы, басқару сипатына байланыстырылған формула үшін бұл ControlName.PropertyName пішінінде болады.
Бақыланады Мәтін жолы Қате пайдаланушыға көрсетілетін орын есеп беру үшін пайдаланылады. Мысалы, басқару сипатына байланыстырылған формула үшін бұл ControlName.PropertyName пішінінде болады.
Толық мәліметтер Жазба Қате туралы мәліметтер. Қазіргі уақытта мәліметтер тек желі қателері үшін берілген. Бұл жазбада HTTP күй кодын қамтитын HttpStatusCode және коннектор немесе қызметтегі жауаптың негізгі мәтінін қамтитын 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 функциясы қате мән бар-жоғын тексереді.

Қайтарылатын мән — логикалық true немесе false.

IsError функциясын пайдалану қатені кез келген одан әрі өңдеуді болдырмайды.

IsBlankOrError

IsBlankOrError функциясы бос мәнді немесе қате мәнді тексереді және Or( IsBlank( X ), IsError( X ) ) баламасы болып табылады.

Бұрыннан бар бағдарламалар үшін қате өңдеуді қосқанда, бағдарламаның бұрыннан бар әрекетін сақтау үшін IsBlank функциясын IsBlankOrError функциясымен ауыстыруды қарастырыңыз. Қатені өңдеуді қоспас бұрын, дерекқордың нөлдік мәндерін және қате мәндерін көрсету үшін бос мән пайдаланылды. Қатені өңдеу IsBlank функциясын пайдалануды жалғастыратын бұрыннан бар бағдарламалар әрекетін өзгертуі мүмкін бос мәннің осы екі түсіндірмесін бөледі.

Қайтарылатын мән — логикалық шын немесе жалған.

IsBlankOrError функциясын пайдалану қатені одан әрі өңдеуге жол бермейді.

Реттелетін қатені жасау және есеп беру үшін Error функциясын пайдалануға болады. Мысалы, сізде кез келген берілген мән мәнмәтін үшін жарамды немесе жарамсыз екенін анықтау логикасы болуы мүмкін, яғни мәселе автоматты түрде тексерілмеген кезде. IfError функциясы үшін жоғарыда сипатталған бірдей жазбаны пайдалану арқылы Түрі және Хабар параметрі бар жеке қате жасауға және қайтаруға болады.

IfError мәнмәтінінде Error функциясын қатені қайта шығару немесе одан өту үшін пайдалануға болады. Мысалы, IfError ішіндегі логика кейбір жағдайларда қатені қауіпсіз елемеу мүмкін екенін шешуі мүмкін, бірақ басқа жағдайларда қатеден өту маңызды болады. IfError немесе App.OnError ішінде Error( FirstError ) функциясын қатеден өту үшін пайдаланыңыз.

Сонымен қатар Error функциясын AllErrors кестесіндегі қателер кестесіне жіберуге болады. Error( AllErrors ) функциясын бірінші қатені ғана емес, барлық қателерді қайта шығару үшін пайдаланыңыз.

Бос жазба немесе Error функциясына жіберілген бос кесте қатеге әкелмейді.

Синтаксис

Error( ErrorRecord )
Error( ErrorTable )

  • ErrorRecord – Міндетті. Түрі, Хабар және басқа өрістері бар қате туралы ақпарат жазбасы. Түрі өрісі міндетті. FirstError функциясын тікелей жіберуге болады.
  • ErrorTable – Міндетті. Қате туралы ақпарат жазбаларының кестесі. AllErrors функциясын тікелей жіберуге болады.

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

  • Value(s) – Міндетті. Қате мән бар-жоғы тексерілетін формула(лар).
  • Replacement(s) – Міндетті. Сәйкес Value аргументтері қатені қайтарса, есептейтін формулалар және қайтаратын мәндер.
  • DefaultResult – Міндетті емес. Формула ешбір қателерді таппаса есептейтін формулалар.

IsError( Value )
IsBlankOrError( Value )

  • 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( "Ішкі мәселе болды" ) ) Бірінші аргумент қате мәнді қайтарады (нөлге бөлуге байланысты). Бұл функция екінші аргументті есептейді және пайдаланушыға хабарды көрсетеді. IfError функциясының қайтарылатын мәні — Notify функциясының IfError функциясының бірінші аргументімен бірдей түрге (сан) мәжбүрлеп орнатылған қайтарылатын мәні. 1

Қарапайым IsError

Формула Сипаттама Нәтиже
IsError( 1 ) Бұл аргумент қате емес. false
IsError( Blank() ) Аргумент бос, бірақ қате емес. false
IsError( 1/0 ) Бұл аргумент қате. true
If( IsError( 1/0 ), Notify( "Ішкі мәселе болды" ) ) IsError аргументі қате мәнді қайтарады (нөлге бөлуге байланысты). Бұл функция шын мәнін қайтарады, бұл If операторының пайдаланушыға Notify функциясымен хабар көрсетуіне себеп болады. If функциясының қайтарылатын мәні — Notify функциясының If функциясының бірінші аргументімен бірдей түрге (логикалық мән) мәжбүрлеп орнатылған қайтарылатын мәні. true

Қарапайым IsBlankOrError

Формула Сипаттамасы Нәтиже
IsBlankOrError( 1 ) Аргумент қате емес немесе бос. false
IsBlankOrError( Blank() ) Аргумент бос. true
IsBlankOrError( 1/0 ) Бұл аргумент қате. true

Қарапайым қате

Бұл мысалда күндер бір-біріне қатысты тексеріледі, нәтижесінде ақаулық туындаса, қате пайда болады.

If( StartDate > EndDate,
    Error( { Kind: ErrorKind.Validation, Message: "Start Date must be before End Date" } ) )

Бұл мысалда кейбір қателерден өтуге рұқсат етілген, ал басқалары басылып, мәнмен ауыстырылады. Бірінші жағдайда b нұсқасы қате күйі болады, себебі Мәні функциясында жарамсыз аргумент бар. Мұны формула авторы күтпегендіктен, ол пайдаланушы көруі үшін жіберіледі. Екінші жағдайда, бірдей формуламен 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. Text input басқару элементін қосыңыз және әдепкі бойынша мұндай аты болмаса, оған 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 үшін формула сілтемесі