以编程方式编辑在sharepoint文档库中上传的项目的属性

时间:2014-12-29 06:57:02

标签: c# asp.net visual-studio-2012 sharepoint sharepoint-2013

我正在尝试获取名称,标题,内容类型&amp; 文档的文档标记文档编辑,使用带有 Sandbox解决方案的Visual Studio 2012以编程方式。< / p>

我已成功获取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 个答案:

答案 0 :(得分: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;
    }
}