Программное редактирование свойств элемента, загруженного в библиотеку документов 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;
    }
}
Другие вопросы по тегам