Error, IfError, IsError, IsBlankOrError işlevleri
Şunlar için geçerlidir: Tuval uygulamaları Dataverse formül sütunları Masaüstü akışları Model yönetimli uygulamalar Power Pages 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
Bir uygulama, Ayarlar Güncelleştirmeleri Kullanımdan Kaldırıldı altında>Formül düzeyinde hata yönetimi>özelliğini devre dışı bıraktıysa, bu işlevler düzgün çalışmaz.
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, If true 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, değeri 0
sıfırsa döndürür x
ve 1/x
bir hata üretir. 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 Patch, Değiştirme formülleri veya DefaultResult içinkullanılan Boolean'larla uyumlu olmayan bir kayıt döndürür. 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 takdirde, ikinci bağımsız değişken, ilk bağımsız değişkenin türüyle eşleşmeye zorlanır.
Excel görüntüleri #DIV/0! sıfıra bölme gerçekleştiğinde.
Bunun yerine aşağıdakiyle birlikte IfError kullanmayı düşünün:
IfError( 1/x, "#DIV/0!" )
Yukarıdaki formül çalışmaz. Metin dizesi "#DIV/0!"
, bir sayı olan IfError öğesinin ilk bağımsız değişkeninintürüne zorlanır. IfError sonucu , metin dizesi zorlanamadığından başka bir hatadı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, IfError Değ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 , hata bilgileri kayıtlarından oluşan bir tablodur ve FirstError bu tablonun ilk kaydının kısayoludur. FirstError her zaman First( AllErrors) ileaynı değeri döndürür.
Hata kayıtları şunlardır:
Alan | Tür | Açıklama |
---|---|---|
Tür | 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, bir denetim özelliğine bağlı bir formül için bu değer ControlName.PropertyName biçimindedir. |
Gözlenen | Metin dizesi | Raporlama için kullanılan, hatanın kullanıcıya sunulduğu konum. Örneğin, bir denetim özelliğine bağlı bir formül için bu değer ControlName.PropertyName biçimindedir. |
Ayrıntılar | Kaydet | Hatayla ilgili ayrıntılar. Şu anda, ayrıntılar yalnızca ağ hataları için 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:
Genellikle, FirstError'un yeterince çalışabileceği tek bir hata olacaktı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 kullanmak , hatanın daha fazla işlenmesini engeller.
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 boş değerleri hem de hata değerlerini temsil etmek için boş bir değer 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 kullanmak , hatanın daha fazla işlenmesini engeller.
Ö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ı. Tür gereklidir. FirstError doğrudan geçirilebilir.
- ErrorTable – Gerekli. Hata bilgileri kayıtları tablosu. AllErrors doğrudan geçirilebilir.
IfError(Değer1,Değiştirme1 [, Değer2,Değiştirme2 , ... [, VarsayılanSonuç ] ] )
- Değerler – Gerekli. Hata değeri için test edilecek formüller.
- Değiştirmeler – 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ç |
---|---|---|
EğerHata( 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 |
EğerHata( 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 |
EğerHata( 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( "Dahili bir sorun oluştu" ) ) | İ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. | YANLIŞ |
IsError( Boş() ) | Bağımsız değişken boş ancak bu bir hata değil. | YANLIŞ |
IsError( 1/0 ) | Bağımsız değişken bir hata. | doğru |
If( IsError( 1/0 ), Notify( "Dahili bir sorun oluştu" ) ) | 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. | doğru |
Basit IsBlankOrError
Formül | Açıklama | Sonuç |
---|---|---|
IsBlankOrError( 1 ) | Bağımsız değişken bir hata değil veya boş değil. | YANLIŞ |
IsBlankOrError( Boş() ) | Bağımsız değişken boş. | doğru |
IsBlankOrError( 1/0 ) | Bağımsız değişken bir hata. | doğru |
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. İlk durumda, Değer işlevinin geçersiz bir bağımsız değişkeni olduğu için b bir hata durumundadır . Bu, formül yazarı tarafından beklenmeyen bir durum olduğundan, kullanıcının görmesi için geçirilir. İkinci durumda, aynı formülle,b 0 değerine sahiptir ve sıfıra bölünme ile sonuçlanı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 bir 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
Bir Text input denetimi ekleyin ve varsayılan olarak TextInput1 adına sahip değilse bu şekilde adlandırın.
Bir Label denetimi ekleyin ve varsayılan olarak Label1 adına sahip değilse bu şekilde adlandırın.
Label1 denetiminin Text özelliğini şu şekilde ayarlayın:
IfError( Value( TextInput1.Text ), -1 )
TextInput1'de 1234 girin.
Label1, Value işlevi için geçerli bir giriş olduğu için 1234 değerini gösterir.
TextInput1'e ToInfinity girin.
Label1, Value işlevi için geçerli bir giriş olmadığı için value-1'i 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.