guclusat

Tanınmış Üye
Süper Moderatör
Birçok uygulama gerçekleştirirken hata kontrolü kaçınılmazdır. Eee ne demişler "Hatasız kul olmaz". Doğru demişler gerçekten hatasızda program olmuyor maalesef . Neyse gelelim hata kontrolümüze peki bunu nasıl yapacağız basit bir örnek vermek istiyorum sizlere.

-------XML YÜKLEME--------

XML.Load("C:\\dosya.xml");

Yukarıdaki kodda bir xml dosyası yükledik kod alanımıza. Peki bu xml dosyası kesinlikle yüklenecek mi sadece bu kodu yazdığımızda? Tabiki hayır yükleme esnasında herhangi bir hata meydana gelebilir. Örneğin xml dosyasının yapısı bozuk olabilir veya xml doğru kodlanmamış olabilir. Ya da en önemlisi xml dosyası belirtilen konumda olmayabilir( Bu durumda mümkün yani dosya yok :S). Peki bu durumda ne yapmalıyız işte bu durumda yardımımıza Application.GetLastError() fonksiyonumuz yetişiyor. Fonksiyonumuz bize number türünde (yani sayı )değer döndürür. İşte bu döndürdüğü sayıyla ne hata meydana gelmiş veya başarılı yükleme gerçekleştiğini anlayabiliriz. İşlem ancak geriye 0 değerini döndürdüğünde başarılı gerçekleşir. Şimdi kodu düzenleyelim.

Kod:
-------XML YÜKLEME--------
XML.Load("C:\\dosya.xml");
-- Hata Kontrolü
error = Application.GetLastError(); ----error adlı değişkene atadık geri  dönecek number değerini
if (error ~= 0) then -----hata varsa kontrol yapısını gerçekleştir.
Dialog.Message("Hata", _tblErrorMessages[error], MB_OK,  MB_ICONEXCLAMATION);
end

Bu şekilde yapabiliriz ya da Dialog.Message() fonksiyonunu istediğimiz doğrultusunda değiştirebiliriz. Mesela
Dialog.Message("Hata","XML dosyası yüklenirken bir hata meydana geldi."); de diyebiliriz. Bu size kalmış tabi örnekleri çoğaltabiliriz. Son bir örnek daha verelim daha iyi anlayın konuyu.

Kod:
-----------zip dosyasını dışarı çıkartma---------------------
Zip.Extract("AutoPlay\\Docs\\dosya.zip", {"*.*"}, "C:\\Yukle", true, true,  "", 3, nil);
-----------hemen hata var mı kontrol edelim---------------
hata=Application.GetLastError();
if (hata~=0) then
Dialog.Message("Hata","Zip dosyası çıkartılırken bir hata meydana  geldi.");
else ------hata kodu 0 dan farklı ise yani işlem başarılı ise
Dialog.Message("İşlem","Zip dosyası başarılı bir şekilde çıkartıldı.");
end

Şimdilik bu kadar kolay gelsin...
 
Son düzenleme:

AMS Projelerinde Hata Kontrolü (Error Handling)

Yazılım geliştirirken her şeyin her zaman yolunda gitmeyeceğini varsaymalıyız. Dosya yolu yanlış olabilir, kullanıcı dosyayı silmiş olabilir veya yetki sorunu çıkabilir. İşte bu durumları yönetme yöntemleri:

1. Dosya Varlık Kontrolü (File.DoesExist)

Bir kurulumu başlatmadan önce, o dosyanın gerçekten orada olup olmadığını kontrol etmek en temel hata yönetimidir.
Kod:
local dosya_yolu = "AutoPlay\\Docs\\winrar.exe";

if (File.DoesExist(dosya_yolu)) then
    -- Dosya varsa kur
    File.Run(dosya_yolu, "/S", "", SW_SHOWNORMAL, true);
else
    -- Dosya yoksa kullanıcıyı uyar
    Dialog.Message("Hata", "Kurulum dosyası bulunamadı: " .. dosya_yolu, MB_OK, MB_ICONSTOP);
end

2. Son İşlem Hatasını Yakalama (Application.GetLastError)

AMS'de bir komut çalıştırıldıktan sonra bir hata oluşup oluşmadığını Application.GetLastError() ile anlarız. Eğer sonuç 0 ise hata yok demektir.
Kod:
File.Run("AutoPlay\\Docs\\setup.exe", "/S", "", SW_SHOWNORMAL, true);

error = Application.GetLastError();
if (error ~= 0) then
    -- Hata koduna göre mesaj ver
    Dialog.Message("Sistem Hatası", "İşlem sırasında bir hata oluştu. Hata Kodu: " .. error, MB_OK, MB_ICONEXCLAMATION);
end

3. Global Fonksiyon İçinde Hata Kontrolü

Daha önce yazdığımız ProgramKur fonksiyonunu hata kontrollü hale getirelim:
Kod:
function ProgramKur(DosyaAdi, Mesaj)
    local yol = "AutoPlay\\Docs\\" .. DosyaAdi;
    
    if (File.DoesExist(yol)) then
        StatusDummy.Show(true, Mesaj .. " Kuruluyor...");
        File.Run(yol, "/S", "", SW_SHOWNORMAL, true);
        StatusDummy.Show(false);
    else
        Dialog.Message("Eksik Dosya", Mesaj .. " dosyası Docs klasöründe bulunamadı!", MB_OK, MB_ICONSTOP);
    end
end

Teknik İpucu (Usta Notu)

Dükkandaki yoğunlukta hazırladığın bir AIO'yu müşteriye verdiğinde "bu çalışmıyor" geri dönüşü almamak için bu kontroller hayati önem taşır. Özellikle "Yönetici Olarak Çalıştır" yetkisi olmayan bilgisayarlarda Application.GetLastError size 1014 gibi yetki hatası kodlarını döndürür. Bu durumda müşteriye "Lütfen programı sağ tıklayıp yönetici olarak çalıştırın" uyarısı veren bir if bloğu eklemek teknik desteğe ayıracağın zamandan tasarruf etmeni sağlar.
 
Geri
Yukarı