1 Ağustos 2012 Çarşamba

Arayuz Validation Yetersizligi ve Session Kullanimi

Selamlar,
Yine guzel bir senaryo ile karsinizdayiz.

Arayuz validation’in yetersizligini kanıtlayan, dikkatli Session kullaniminin onemini gosteren super bir ornek.

Uygulamamızda Booking listesi isimli bir sayfamiz var. Bu sayfada arama yapiliyor, donen kayitlarin toplam adetlerini gosteren ekipman adetlerini goster isimli bir buton var. Bu buton kayit gelirse aktif, kayit gelmezse pasif gorunuyor. Kayit gelirse, bunlarin idleri Session’a aktariliyor. Ekipman adetlerini goster tıklaninca bir Dialog aciliyor ve bu dialog Session’daki bilgileri okuyup listeleme yapiyor.



Acilan Dialog’un calistirdigi kod su sekilde:
protected override void CustomExecute(BookingBaseRequest requestMessage, BookingBaseResponse responseMessage)
        {
            EkipmanAdetleriListeleRequest ekipmanAdetleriListeleRequest = (EkipmanAdetleriListeleRequest)requestMessage;
            EkipmanAdetleriListeleResponse ekipmanAdetleriListeleResponse = (EkipmanAdetleriListeleResponse)responseMessage;

            IPredicateExpression filtre = new PredicateExpression();
            if (ekipmanAdetleriListeleRequest.BookingIdList.Count > 0)
            {
                int count = ekipmanAdetleriListeleRequest.BookingIdList.Count;
                if (count >= 1000)
                {
                    int mod = count % 500;
                    count = count - mod;
                    int parcaSayisi = count / 500;
                    if (mod > 0)
                    {
                        parcaSayisi++;
                    }
                    IPredicateExpression idListFilter = new PredicateExpression();
                    for (int parIndex = 0; parIndex < parcaSayisi; parIndex++)
                    {
                        List<long> parcaList = new List<long>();
                        for (int index = parIndex * 500; index < count && index < ((500 * (parIndex + 1))); index++)
                        {
                            parcaList.Add(ekipmanAdetleriListeleRequest.BookingIdList[index]);
                        }
                        if (parcaList.Count != 0)
                        {
                            if (parIndex == 0)
                                idListFilter.Add(BkgBookingFields.Id == parcaList);
                            else
                                idListFilter.AddWithOr(BkgBookingFields.Id == parcaList);
                        }
                    }
                    filtre.Add(idListFilter);
                }
                else
                    filtre.AddWithAnd(BkgBookingFields.Id == ekipmanAdetleriListeleRequest.BookingIdList.ToArray());
            }
            filtre.AddWithAnd(DokKonsKonteynerYukuFields.AnaDokKonsKonteynerYukuId == DBNull.Value);

            #region Tip Tur Adet Hesaplama
            DataTable tipTurAdetDT = BkgDataTableFiller.FillBookingEkipmanTipTurAdetDetaylari(filtre);
            // BookingIdListesini içeren ekipmanlar dolu ve boş olanlar olarak iki
            // ayrı DataTable' a alınır.
            DataTable tipTurDoluAdetRow = (from tipTurAdetRow in tipTurAdetDT.AsEnumerable()
                                           where tipTurAdetRow.Field<bool>("DoluMu") == true
                                           group tipTurAdetRow by
                                                            new
                                                            {
                                                                Adet = tipTurAdetRow.Field<long?>("Adet"),
                                                                YukEkpBoyut = tipTurAdetRow.Field<short?>("YuklemeEkipmaniBoyutuKod"),
                                                                YukEkpTip = tipTurAdetRow.Field<string>("YuklemeEkipmaniTipiKod")
                                                            } into g
                                           select new
                                           {
                                               Adet = g.Key.Adet,
                                               YukEkpBoyut = g.Key.YukEkpBoyut,
                                               YukEkpTip = g.Key.YukEkpTip
                                           }).CustomCopyToDataTable();
            DataTable tipTurBosAdetRow = (from tipTurAdetRow in tipTurAdetDT.AsEnumerable()
                                          where tipTurAdetRow.Field<bool>("DoluMu") == false
                                          group tipTurAde

Arayuzden idlist gelirse filtreye ekliyor. Gelmezse eklemiyor, bunu validate’te kontrol de etmiyor. Nasil olsa arayuzden buton kapali diye dusunulmus.

Kullanici multi tab calissin.
Ilk actigi sayfada booking listesi dondu, Session’a data yazildi, buton aktif.
Ikinci actigi sayfada booking listesi donmedi, Session bosaltildi, buton pasif.
Ilk actigi sayfaya dondu, butona basti. Gümm. Bomba patladi, Tüm dbyi ayaga kaldirdi J)

Su an icin Cozum olarak Metodun validation’a ilave yapildi.

Hiç yorum yok:

Yorum Gönder