Error, IfError, IsError, IsBlankOrError işlevleri

Şunlar için geçerlidir: Tuval uygulamaları Dataverse formül sütunları Masaüstü akışları Model temelli uygulamalar Power Platform CLI

Hataları tespit edip alternatif bir değer sağlar veya eyleme geçer. Özel bir hata oluşturun veya bir hatanın üzerinden geçin.

Not

IfError

IfError işlevi değerleri bir hata buluncaya kadar sınar. İşlev bir hata bulursa, işlev değerlendirerek yerini alacak karşılık gelen bir değer döndürür ve değerlendirmeyi durdurur. Bir hata bulunamadığında, varsayılan bir değer de sağlanabilir. IfError işlevinin yapısı If işlevine benzer: IfError hataları sınar, Iftrue değeri için sınama yapar.

Bir hatayı geçerli bir değerle değiştirmek için IfError kullanın; böylece, aşağı akış hesaplamaları devam edebilir. Örneğin, kullanıcı girişi sıfıra bölmeye neden olabilecekse bu işlevi kullanın:

IfError( 1/x, 0 )

Bu formül x değeri sıfır olduğunda, 1/x hata oluşturacağından 0 döndürür. x sıfır değilse, 1/x döndürülür.

Daha fazla işlemeyi durdurma

Formülleri davranış formüllerinde bir arada zincirlerken, örneğin:

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

DS1 için Patch işlevi başarısız olsa bile DS2 için ikinci Patch işlevi denenir. Bir hatanın kapsamı, zincirlendiği her bir formülle sınırlıdır.

IfError işlevini bir eylemi yapmak için kullanın ve yalnızca eylem başarılı olmuşsa işleme devam edin. Bu örneğe IfError uygulama:

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

DS1'in Patch işlevinde bir sorun varsa ilk Notify işlevi yürütülür. DS2 için ikinci Patch işlevi dahil olmak üzere başka bir işlem yapılmaz. İlk Patch başarılı olursa ikinci Patch yürütülür.

Sağlanmışsa, herhangi bir hata bulunmadığında isteğe bağlı DefaultResult bağımsız değişkeni döndürülür. Bu bağımsız değişken olmadığında son Değer bağımsız değişkeni döndürülür.

Son örnekte, sorun olup olmadığını belirlemek için IfError ile döndürülen değer denetlenebilir:

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

Tür uyumluluğu

IfError bağımsız değişkenlerinden birinin değerini döndürür. IfError tarafından döndürülebilecek tüm değerlerin türleri uyumlu olmalıdır.

Son örnekte, PatchDeğiştirme formülleri veya DefaultResult için kullanılan Boole değerleriyle uyumlu olmayan bir kayıt döndürecektir. Bu durum, bu Patch çağrılarından alınan dönüş değerinin IfError tarafından döndürülebileceği bir durum olmadığından sorun olmaz.

Not

Bir değişiklik için işlemdeki davranış sırasında, IfError'daki tüm bağımsız değişkenlerin türleri şu anda uyumlu olmalıdır.

Daha önce açıklanan basit örnekte:

IfError( 1/x, 0 )

1/x ve 0 türleri her ikisi de sayı olduğu için uyumludur. Aksi durumda, ikinci bağımsız değişken ilk bağımsız değişkenin türüyle eşleşmek üzere zorlanacaktır.

Sıfıra bölünme yapıldığında Excel #DIV/0! görüntüler.

Bunun yerine aşağıdakiyle birlikte IfError kullanmayı düşünün:

IfError( 1/x, "#DIV/0!" )

Yukarıdaki formül çalışmaz. "#DIV/0!" metin dizesi, IfError birinci bağımsız değişkeninin sayı olan türüne zorlanır. Metin dizesi zorlanamayacağından IfError sonucu yine de hata olacaktır. Düzeltme olarak, ilk bağımsız değişkeni bir metin dizesine dönüştürün; bu durumda IfError daima bir metin dizesi döndürür:

IfError( Text( 1/x ), "#DIV/0!" )

Yukarıda görüldüğü gibi, IfErrorDeğiştirme veya DefaultResult'un hata olması durumunda bir hata döndürebilir.

FirstError / AllErrors

Yenileme formülleri içinde, bulunan hatalar hakkındaki bilgilere FirstError kaydı ve AllErrors tablosu üzerinden ulaşabilirsiniz. AllErrors, bu tablonun ilk kaydı için kısayol olarak FirstError içeren hata bilgileri kayıtları tablosudur. FirstError her zaman First( AllErrors ) ile aynı değeri döndürür.

Hata kayıtları şunlardır:

Alan Tür Açıklama
Tip ErrorKind sabit listesi (sayı) Hatanın kategorisi.
İleti Metin dizesi Hatayla ilgili, son kullanıcıya görüntülenmesi uygun bir ileti.
Kaynak Metin dizesi Raporlama için kullanılan, hatanın kaynaklandığı konum. Örneğin, denetim özelliğine bağlı bir formül için bu, ControlName.PropertyName formunda olur.
Gözlemlendi Metin dizesi Raporlama için kullanılan, hatanın kullanıcıya sunulduğu konum. Örneğin, denetim özelliğine bağlı bir formül için bu, ControlName.PropertyName formunda olur.
Ayrıntılar Kayıt Hatayla ilgili ayrıntılar. Şu anda yalnızca ağ hataları için ayrıntılar sağlanmaktadır. Bu kayıtta, HTTP durum kodu içeren HttpStatusCode ve bağlayıcı veya hizmetten gelen yanıtın gövdesini içeren HttpResponse bulunur.

Örneğin, aşağıdaki formülü bir Button denetiminin OnSelect özelliği olarak düşünün:

Set( a, 1/0 )

İkinci Button denetiminin OnSelect özelliğindeki bu formül:

IfError( a, Notify( "Internal error: originated on " & FirstError.Source & ", surfaced on " & FirstError.Observed ) )

Yukarıdaki örnek formül iki düğme sırayla etkinleştirildiğinde aşağıdaki başlığı görüntüleyecektir:

Button denetimi etkindir, Notify işlevinden bir bildirim gösterir.

Genellikle FirstError işlevinin yeterli şekilde çalışabildiği yalnızca bir hata vardır. Ancak, birden çok hatanın döndürülebildiği senaryolar vardır. Örneğin, formül zincirleme işleci veya Concurrent işlevini kullanırken. Bu durumlarda bile FirstError raporlaması, kullanıcıyı birden fazla hatayla aşırı yüklemek yerine bir sorunu ortaya çıkarmak için yeterli olabilir. Hala her hatayla ayrı ayrı çalışma gereksiniminiz varsa AllErrors tablosunu kullanabilirsiniz.

IsError

IsError işlevi bir hata değeri için sınama yapar.

Döndürülen değer, true veya false şeklinde bir Boole değeridir.

IsError kullanılması, hatanın daha fazla işlenmesini engelleyecektir.

IsBlankOrError

IsBlankOrError işlevi, bir boş değer veya bir hata değeri olup olmadığını test eder ve Or( IsBlank( X ), IsError( X ) ) eşdeğeridir.

Mevcut uygulamalar için hata işlemeyi etkinleştirirken mevcut uygulama davranışını korumak için IsBlank yerine IsBlankOrError kullanın. Hata işleme eklenmeden önce hem veritabanlarındaki null değerleri hem de hata değerlerini temsil etmek için boş değeri kullanılıyordu. Hata işleme bu iki boş yorumunu ayırır ve dolayısıyla IsBlank kullanmaya devam eden mevcut uygulamaların davranışı değişebilir.

Döndürülen değer, true veya false şeklinde bir Boole değeridir.

IsBlankOrError kullanıldığında, hatanın daha fazla işlenmesi engellenecektir.

Özel hata oluşturup raporlamak için Error işlevini kullanın. Örneğin, belirli değerlerin bağlamınız için geçerli olup olmadığını veya bir sorun için otomatik olarak kontrol edilmeyen bir şeyin olup olmadığını belirlemek için mantığınız olabilir. IfError işlevi için yukarıda açıklanan aynı kaydı kullanarak kendini hatanızı oluşturup döndürebilir, Tip ve İleti ile tamamlayabilirsiniz.

IfError bağlamında, bir hatayı yeniden oluşturmak veya hatanın üzerinden geçmek için Error işlevini kullanın. Örneğin, IfError işlevindeki mantığınız bazı durumlarda bir hatanın güvenli şekilde yoksayılabileceğine karar verebilir ancak diğer durumlarda hatanın gönderilmesi önemlidir. IfError veya App.OnError içinde, hatanın üzerinden geçmek için Error( FirstError ) kullanın.

Error işlevi ayrıca AllErrors tablosunda bulunacağından hata tablosu aktarabilir. Yalnızca ilk hatayı değil, tüm hataları yeniden oluşturmak için Error( AllErrors ) kullanın.

Hata olmadan Hata sonuçlarına aktarılan boş bir kayıt veya boş tablo.

Sözdizimi

Hata( ErrorRecord )
Hata( ErrorTable )

  • ErrorRecord – Gerekli. Tip, İleti ve diğer alanlar dahil olmak üzere hata bilgileri kaydı. Tip gereklidir. FirstError doğrudan aktarılabilir.
  • ErrorTable – Gerekli. Hata bilgileri kayıtları tablosu. AllErrors doğrudan aktarılabilir.

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

  • Değerler: Gerekli. Hata değeri için test edilecek formüller.
  • Değişiklikler – Gerekli. Eşleşen Değer bağımsız değişkenleri hata döndürdüyse değerlendirilecek formüller ve döndürülecek değerler.
  • DefaultResult – İsteğe bağlı. Formül herhangi bir hata bulamazsa değerlendirilecek formüller.

IsError( Değer )
IsBlankOrError( Değer )

  • Değer: Gerekli. Test edilecek formül.

Örnekler

Basit IfError

Formül Açıklama Sonuç
IfError( 1, 2 ) İlk bağımsız değişken bir hata değil. İşlevin denetleyeceği başka hata ve varsayılan bir dönüş değeri yoktur. İşlev, en son değerlendirilen değer bağımsız değişkenini döndürür. 1
IfError( 1/0, 2 ) İlk bağımsız değişken, bir hata değeri döndürür (sıfıra bölünme nedeniyle). İşlev ikinci bağımsız değişkeni değerlendirir ve sonuç olarak döndürür. 2
IfError( 10, 20, 30 ) İlk bağımsız değişken bir hata değil. İşlevin denetleyeceği başka hata yoktur ancak varsayılan bir dönüş değeri vardır. İşlev, VarsayılanSonuç bağımsız değişkenini döndürür. 30
IfError( 10, 11, 20, 21, 300 ) İlk bağımsız değişken olan 10 bir hata değildir, bu nedenle işlev bu bağımsızın yerini alacak karşılık gelen 11 değerini değerlendirmez. Üçüncü bağımsız değişken olan 20 de bir hata değildir, bu nedenle işlev bu bağımsızın yerini alacak karşılık gelen 21 değerini değerlendirmez. Beşinci bağımsız değişken olan 300'ün yerini alacak karşılık gelen bir değer yoktur ve bu varsayılan sonuçtur. İşlev, formülde hata olmadığı için bu sonucu döndürür. 300
IfError( 1/0, Notify( "There was an internal problem" ) ) İlk bağımsız değişken, bir hata değeri döndürür (sıfıra bölünme nedeniyle). İşlev ikinci bağımsız değişkeni değerlendirir ve kullanıcıya bir ileti gösterir. IfError işlevinin dönüş değeri, IfError işlevinin ilk bağımsız değişkenine (bir sayı) zorlanan Notify işlevinin dönüş değeridir. 1

Basit IsError

Formül Açıklama Sonuç
IsError( 1 ) Bağımsız değişken bir hata değil. false
IsError( Blank() ) Bağımsız değişken boş ancak bu bir hata değil. false
IsError( 1/0 ) Bağımsız değişken bir hata. true
If( IsError( 1/0 ), Notify( "There was an internal problem" ) ) IsError için bağımsız değişken, bir hata değeri döndürür (sıfıra bölünme nedeniyle). Bu işlev, true değerini döndürür ve bu da If ifadesinin Notify işleviyle birlikte kullanıcıya bir ileti görüntülemesini sağlar. If işlevinin dönüş değeri, If işlevinin ilk bağımsız değişkenine (boole değeri) zorlanan Notify işlevinin dönüş değeridir. true

Basit IsBlankOrError

Formül Açıklama Sonuç
IsBlankOrError( 1 ) Bağımsız değişken bir hata değil veya boş değil. false
IsBlankOrError( Blank() ) Bağımsız değişken boş. true
IsBlankOrError( 1/0 ) Bağımsız değişken bir hata. true

Basit Hata

Bu örnekte, tarihler birbirlerine göre doğrulanır ve sorun varsa hatayla sonuçlanır.

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

Bu örnekte, diğerleri bastırılırken ve bir değerle değiştirilirken bazı hataların üzerinden geçilmesine izin verilir. Birinci durumda, Value işlevi geçersiz bir bağımsız değişken olduğundan b bir hata durumu olacaktır. Bu, formül yazarı tarafından beklenmedik bir durum olduğundan kullanıcının görebileceği şekilde üzerinden geçilir. İkinci durumda, aynı formülle b 0 değerine sahip olacak ve sıfıra bölmeyle sonuçlanacaktır. Bu durumda, formül yazarı bunun bu mantık için kabul edilebilir olduğunu bilir, hatayı bastırır (başlık gösterilmez) ve bunun yerine -1 döndürür.

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 tablosu, diğer tablolar gibi filtrelenebilir. Error işlevi kullanıldığında, beklenen hatalar kaldırılabilir ve kalan hatalar korunup raporlanabilir. Örneğin, sıfıra bölmenin belirli bir bağlamda sorun olmayacağını bilseydik bu hatalar filtrelenebilir ve diğer tüm hatalar aşağıdaki formülle olduğu gibi bırakılabilirdi:

Error( Filter( AllErrors, Kind <> ErrorKind.Div0 ) )

Adım adım

  1. Bir Text input denetimi ekleyin ve varsayılan olarak TextInput1 adına sahip değilse bu şekilde adlandırın.

  2. Bir Label denetimi ekleyin ve varsayılan olarak Label1 adına sahip değilse bu şekilde adlandırın.

  3. Label1 denetiminin Text özelliğini şu şekilde ayarlayın:

    IfError( Value( TextInput1.Text ), -1 )
    
  4. TextInput1'de 1234 girin.

    Value işlevi için geçerli bir giriş olduğundan Etiket1 1234 değerini gösterir.

  5. TextInput1'e ToInfinity girin.

    Value işlevi için geçerli bir giriş olmadığından Etiket1 -1 değerini gösterir. Value işlevi IfError ile sarmalanmadığında, hata değeri boş olarak işlendiği için etiket hiçbir değer göstermez.

Ayrıca bkz.

Power Apps için Formül başvurusu