我正在尝试获取名称,标题,内容类型&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();
答案 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;
}
}