Программное редактирование свойств элемента, загруженного в библиотеку документов sharepoint
Я пытаюсь получить имя, заголовок, тип содержимого и тег документа, хранящиеся в библиотеке документов SharePoint, и редактировать их программно, используя Visual Studio 2012 с Sandbox Solution.
Я успешно получил все эти свойства в VS2012, а также успешно обновляюсь, но когда я нажимаю кнопку обновления, выдается ошибка: Файл не найден.
и после этого, когда я перехожу на страницу своего документа, все эти свойства выглядят как обновленные. Итак, почему он выдает ошибку каждый раз, когда я нажимаю кнопку обновления, так как все свойства также обновляются успешно.
мой код здесь:
SPSite oSite = new SPSite("http://<sitename>/");
2: SPWeb oWeb = oSite.OpenWeb();
3: oWeb.AllowUnsafeUpdates = true;
3: SPList oList = oWeb.Lists["Shared Documents"];
4: SPListItem oListItem = oList.Items[0];
5: oListItem.File.CheckOut();
6: oListItem["Name"] = "xyz";
7: oListItem["Title"] = "abc";
8: oListItem["Content_Type"] = "lmn";
9: oListItem["Document_Tag"] = "pqr";
7: oListItem.Update();
8: oListItem.File.CheckIn("file name has been changed");
11: oWeb.AllowUnsafeUpdates =false;
9: oWeb.Dispose();
1 ответ
Решение
Перед обновлением предмета его необходимо получить таким способом.
using (SPSite oSite = new SPSite("siteUrl"))
{
using (SPWeb oWeb = oSite.OpenWeb())
{
oWeb.AllowUnsafeUpdates = true;
oWeb.Site.AllowUnsafeUpdates = true;
SPList oList = oWeb.Lists["Shared Documents"];
SPFile file = oList.Items.Cast<SPListItem>()
.Select(x => x.File)
.FirstOrDefault();
if (file == null)
{
return false;
}
SPListItem item = file.GetListItem();
if (item.File.Level == SPFileLevel.Checkout)
{
item.File.UndoCheckOut();
}
if (item.File.Level != SPFileLevel.Checkout)
{
item.File.CheckOut();
}
//Do update here
//item["Content_Type"] = "lmn";
item.SystemUpdate(false);
item.File.CheckIn("SystemCheckedin");
item.File.Publish("SystemPublished");
oWeb.AllowUnsafeUpdates = false;
oWeb.Site.AllowUnsafeUpdates = false;
}
}