ItemAdded ItemUpdat...
 
Bildirimler
Hepsini Temizle

ItemAdded ItemUpdated Event  

  RSS
Serdar İlter
(@Serdarilter)
Üye

ItemAdded'tan sonra ItemUpdated event'ini calistirmasini engellemek mumkun mu, sadece item update oldugunda ItemUpdated calissin.


Ya da;


ItemAdded'tan ItemUpdated'a parametre gondermek mumkun mu?

Alıntı
Gönderildi : 16/09/2012 13:36
ilker Alizat
(@ilkerAlizat)
Üye

merhaba

normalde ya itemadded olar ya itemUpdated, ama eyer listiniz Document Library olursa ve gereken(required) fieldiniz varsa, dosyani yukledikden sonra itemAdded işlemeye başlar ve EditForm sayfasi acilir. EditForm sayfasini kayda kecirdikden sonra İtemUpdated işlemeye başlar. bunu durdurmak iyi fikir deyil saniram.

bir Event`den başkasina parametre göndermek çeşitli yollarla ola bilir:

1-statik değişken: Event Handler Class`iniza, ststik bir değişken artirin, o değişken tüm fonksiyonlarda ayni olacak, ornek:

public class TestDoc: SPItemEventReceiver
    {
        static bool updated = false;
        public override void ItemAdded(SPItemEventProperties properties)
        {
            //istediyiniz kod
            updated = true;
        }
        public override void ItemUpdated(SPItemEventProperties properties)
        {
            if (!updated)
            {
                //istediyiniz kod
            }
        }
    }

2- Application State: örnekI

public class TestDoc: SPItemEventReceiver
    {
        public override void ItemAdded(SPItemEventProperties properties)
        {
            //istediyiniz kod
            System.Web.HttpContext.Current.Application.Add(properties.ListItem.File.Name,"Updated");
        }
        public override void ItemUpdated(SPItemEventProperties properties)
        {
            if (System.Web.HttpContext.Current.Application.Get(properties.ListItem.File.Name) as string=="Updated")
            {
                //istediyiniz kod
                System.Web.HttpContext.Current.Application.Remove(properties.ListItem.File.Name)
            }
        }
    }

3- İtem property bag: ornek:

 public class TestDoc: SPItemEventReceiver
    {
        public override void ItemAdded(SPItemEventProperties properties)
        {
            //istediyiniz kod
            properties.ListItem.Properties.Add("Updated","true");
        }
        public override void ItemUpdated(SPItemEventProperties properties)
        {
           if(properties.ListItem.Properties.Contains("Updated")&&(properties.ListItem.Properties["Updated"].ToString()=="true"))
                {
                    //istediyiniz kod
                }
           
        }
    }

CevapAlıntı
Gönderildi : 16/09/2012 19:07
Serdar İlter
(@Serdarilter)
Üye

[quote user="ilker Alizat"]

merhaba


normalde ya itemadded olar ya itemUpdated, ama eyer listiniz Document Library olursa ve gereken(required) fieldiniz varsa, dosyani yukledikden sonra itemAdded işlemeye başlar ve EditForm sayfasi acilir. EditForm sayfasini kayda kecirdikden sonra İtemUpdated işlemeye başlar. bunu durdurmak iyi fikir deyil saniram.


[/quote]


Tekrar test ettim de yanlis anlatmisim kusura bakmayin. Major ve minor verisyonlama ozelligine sahip bir dokuman kutuphanesinde, zaten varolan bir dosya adi ve tipinde bir dosya yuklendigi zaman, item'a yeni bir revizyon veriyor. Bu istedigimiz birsey.


Sistem revizyon olustururken Upload.aspx ekraninda dosyayi secip OK dedikten sonra ItemAdded'a hic girmeden ItemUpdated calisiyor. Hemen arkasindan EditForm.aspx ekrani geliyor. Burada da Save'e tiklandiginda tekrar ItemUpdated calisiyor. ItemUpdated'in cift calisma durumu var yeni ve bu benim akisimi bozuyor.


ItemAdded sadece 0.1 revizyonu olusurken, item ilk defa olusurken bir kez calisiyormus.


parametre gonderme yontemleri icin cok tesekkurler ama gondermenin yaninda yukaridaki cift calisma sorununu da cozmem gerekiyor.

CevapAlıntı
Gönderildi : 17/09/2012 19:56
Serdar İlter
(@Serdarilter)
Üye

[quote user="ilker Alizat"]

3- İtem property bag: ornek:


 public class TestDoc: SPItemEventReceiver
    {
        public override void ItemAdded(SPItemEventProperties properties)
        {
            //istediyiniz kod
            properties.ListItem.Properties.Add("Updated","true");
        }
        public override void ItemUpdated(SPItemEventProperties properties)
        {
           if(properties.ListItem.Properties.Contains("Updated")&&(properties.ListItem.Properties["Updated"].ToString()=="true"))
                {
                    //istediyiniz kod
                }
           
        }
    }


[/quote]


Property Bag her bir item'in durumunu kendi icerisinde tutmak acisindan benim icin cok iyiymis ama ItemAdded'ta set ettigim degeri, ItemUpdated'ta unuttu:


public override void ItemAdded(SPItemEventProperties properties)
        {
            base.ItemAdded(properties);
            properties.ListItem.Properties.Add("Status", "UPLOADED");
        } // method


        public override void ItemUpdated(SPItemEventProperties properties)
        {
            if (properties.ListItem.Properties.Contains("Status") && (Convert.ToString(properties.ListItem.Properties["Status"]).Equals("UPLOADED")))
            {
                properties.ListItem.Properties.Add("Status", "UPDATED_0");
                base.ItemUpdated(properties);
            }
            else if (properties.ListItem.Properties.Contains("Status") && (Convert.ToString(properties.ListItem.Properties["Status"]).Equals("UPDATED_0")))
            {
                properties.ListItem.Properties.Add("Cimtas_Status", "UPDATED_1");
            }
            else if (properties.ListItem.Properties.Contains("Status") && (Convert.ToString(properties.ListItem.Properties["Status"]).Equals("UPDATED_1")))
            {
                properties.ListItem.Properties.Add("Status", "UPDATED_0");
                base.ItemUpdated(properties);
            }
        } // method


 


 


 


 

CevapAlıntı
Gönderildi : 17/09/2012 20:38
ilker Alizat
(@ilkerAlizat)
Üye

property bag`i değiştirdikten sonra Update etmen gerkiyor :

 EventFiringEnabled = false;
            properties.ListItem.SystemUpdate();
            EventFiringEnabled = true;

örnekleri yazarken unutmuşum

CevapAlıntı
Gönderildi : 18/09/2012 19:10
Paylaş: