Я столкнулся с той же проблемой, когда пытался обновить некоторые пользовательские поля своей библиотеки документов при загрузке новых документов, поле было (ProjectID), которое я поместил в сеанс в своей веб-части (шаг перед загрузкой документа) .
Что я сделал: я поместил projectID
в кеш (для каждого пользователя) внутри пользовательской веб-части, которая действует как сеанс следующим образом:
if (Request.QueryString["ProjectID"] != null)
{
HttpRuntime.Cache.Remove(SPContext.Current.Web.CurrentUser.LoginName);
HttpRuntime.Cache.Add(SPContext.Current.Web.CurrentUser.LoginName,
ProjectID, null, DateTime.UtcNow.AddMinutes(60),
System.Web.Caching.Cache.NoSlidingExpiration,
System.Web.Caching.CacheItemPriority.Normal, null);
}
Затем я реализовал событие ItemAdded
и получаю значение кэшированного projectId
через:
public override void ItemAdded(SPItemEventProperties properties)
{
try
{
string ProjID = "";
string CreatedBy = null;
if (properties.ListItem["Created By"] != null)
CreatedBy = properties.ListItem["Created By"].ToString().Split(';')[1].Replace("#","");
if (HttpRuntime.Cache[CreatedBy] != null)
{
//SPContext.Current.Web.CurrentUser.LoginName;
ProjID = HttpRuntime.Cache[CreatedBy].ToString();
if (properties.ListItem["Project"] == null)
{
properties.ListItem["Project"] = new SPFieldLookupValue(ProjID);
properties.ListItem.SystemUpdate();
}
base.ItemAdded(properties);
}
}
catch (Exception ex)
{ }
}