Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
| Functions | Şunlar için geçerlidir: |
|---|---|
| Error IfError IsError |
|
| IsBlankOrError |
|
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
İşlev, IfError bir hata bulana kadar değerleri test eder. İş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. yapısı IfErrorIf işlevinin yapısına benzer: IfError hataları test ederken , Ifise true için test eder.
Aşağı akış hesaplamalarının devam edebilmesi için bir hatayı geçerli bir değerle değiştirmek için kullanın IfError . Ö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, ... )
için Patch işlevi başarısız olsa bile DS2 için ikinci işlevi denenir. Bir hatanın kapsamı, zincirlendiği her bir formülle sınırlıdır.
Eylem yapmak ve işlemeye yalnızca eylem başarılı olursa devam etmek için kullanın IfError . Bu örne uygulanıyor IfError :
IfError(
Patch( DS1, ... ), Notify( "problem in the first action" ),
Patch( DS2, ... ), Notify( "problem in the second action" )
)
'in DS1 işlevinde bir sorun varsa ilk Notify işlevi yürütülür.
için ikinci DS2 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 oluşturulan dönüş değeri IfError , herhangi bir sorun olup olmadığını belirlemek için 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. tarafından IfError 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 Düzeltme Eki çağrılarından gelen dönüş değerinin tarafından IfErrordöndürüleceği bir durum olmadığından sorun yoktur.
Not
Değişiklik davranışı devam ederken, tüm bağımsız değişkenlerin IfError türlerinin şu anda uyumlu olması gerekir.
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ğıdakileri göz önünde bulundurun IfError :
IfError( 1/x, "#DIV/0!" )
Yukarıdaki formül çalışmaz. Metin dizesi "#DIV/0!" , bir sayı olan için ilk bağımsız değişkenin türüne IfErrorzorlamalı.
IfError sonucu, metin dizesinin zorlaması gerçekleştirilebileceğinden başka bir hatadır. Düzeltme olarak, her zaman bir metin dizesi döndürmek için ilk bağımsız değişkeni bir metin dizesine IfError dönüştürün:
IfError( Text( 1/x ), "#DIV/0!" )
Yukarıda görüldüğü gibi, IfErrorReplacement veya DefaultResult bir hataysa 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.
Error 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
İşlev bir IsError hata değeri için sınar.
Döndürülen değer, true veya false şeklinde bir Boole değeridir.
kullanmak IsError , hatanın daha fazla işlenmesini engeller.
IsBlankOrError
İşlev boş IsBlankOrError bir değer veya hata değeri için sınar ve eşdeğeridir Or( IsBlank( X ), IsError( X ) ).
Mevcut uygulamalar için hata işlemeyi etkinleştirirken, mevcut uygulama davranışını korumak için IsBlank'ı ile IsBlankOrError değiştirmeyi göz önünde bulundurun. 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. Errorişleme, IsBlank kullanmaya devam eden mevcut uygulamaların davranışını değiştirebilecek bu iki boş yorumunu ayırır.
Döndürülen değer, true veya false şeklinde bir Boole değeridir.
kullanmak IsBlankOrError , hatanın daha fazla işlenmesini engeller.
Error Özel bir hata oluşturmak ve bildirmek için 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. İşlev için IfError yukarıda açıklanan kaydı kullanarak Kind ve Message ile tamamlanan kendi hatanızı oluşturabilir ve döndürebilirsiniz.
bağlamında IfError, işlevini kullanarak Error bir hatayı yeniden yazın veya geçirin. Örneğin, içindeki IfError mantığınız bazı durumlarda bir hatanın güvenli bir şekilde yoksayılabilir, ancak diğer durumlarda hatanın gönderilmesinin önemli olduğuna karar verebilir. IfError veya App.OnError içinde, bir hata geçirmek için ( FirstError ) kullanınError.
İşleve Error, AllErrors tablosunda bulunabileceği gibi bir hata tablosu da geçirilebilir. Yalnızca ilk hataları değil tüm hataları yeniden kullanmak için ( AllErrors ) kullanınError.
Boş bir kayıt veya geçirilen Error boş bir tablo hatayla sonuçlanır.
Sözdizimi
Error( HataKayıt )
Error( ErrorTable )
- ErrorRecord – Gerekli. Error Kind, Message ve diğer alanlar dahil olmak üzere bilgi 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, ... [, DefaultResult ] ] )
- 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ç |
|---|---|---|
| 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( "Bir iç 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. dönüş değeri IfError, notify değerinin dönüş değeridir ve ilk bağımsız değişkenle (bir sayı) aynı türe IfError zorlamalı. | 1 |
Basit IsError
| Formül | Açıklama | Sonuç |
|---|---|---|
| IsError( 1 ) | Bağımsız değişken bir hata değil. | YANLIŞ |
| IsError( Blank() ) | 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( "Bir iç sorun oluştu" ) ) | için IsError bağımsız değişkeni bir hata değeri döndürür (sıfıra bölme 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( Blank() ) | Bağımsız değişken boş. | doğru |
| IsBlankOrError( 1/0 ) | Bağımsız değişken bir hata. | doğru |
Basit Error
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. İşlevle birlikte Error kullanıldığında, beklenen hatalar kaldırılabilir ve kalan hatalar korunur ve bildirilir. Ö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 ile IfErrorsarmalanmadan, hata değeri boş olarak kabul edilirken etiket hiçbir değer göstermez.