Forum
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?
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
}
}
}
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.
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.
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
}
}
}
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
property bag`i değiştirdikten sonra Update etmen gerkiyor :
EventFiringEnabled = false;
properties.ListItem.SystemUpdate();
EventFiringEnabled = true;
örnekleri yazarken unutmuşum