Обновление свойств SPFile с помощью SPFile.Update()
Я пытаюсь обновить SPFile
свойства.
Вот мой код:
using (SPSite oSite = new SPSite(sFileURL))
{
using (SPWeb oWeb = oSite.OpenWeb())
{
oWeb.AllowUnsafeUpdates = true;
oFile = oWeb.GetFile(sFileURL);
foreach (XmlNode xNode in oXmlDoc.FirstChild.ChildNodes)
{
oFile.Item.Properties[xNode.Name] = xNode.InnerText;
string itemmm =oFile.Item.Properties[xNode.Name].ToString();
}
oFile.Update();
oWeb.AllowUnsafeUpdates = false;
}
}
Проблема в том, что при проверке свойств файла в SharePoint я не вижу внесенных изменений. Я пытался добавить AllowUnsafeUpdates = true
но это не решило проблему.
Что еще я могу сделать?
2 ответа
Решение
На самом деле, вы не модифицируете SPFile
экземпляр, но связанный SPItem
, Отсюда зовет SPFile.Update()
ничего не делает. Лучше работать с SPItem
экземпляр напрямую:
SPItem item = oFile.Item;
item.Properties[xNode.Name] = xNode.InnerText;
item.Update();
Также, AllowUnsafeUpdates
собственность не имеет отношения к вашей ситуации. Не изменяйте это.
В вашем коде отсутствуют все проверки, которые необходимо выполнить до фактического обновления.
using (SPSite oSite = new SPSite(sFileURL))
{
using (SPWeb oWeb = oSite.OpenWeb())
{
oWeb.AllowUnsafeUpdates = true;
SPFile oFile = oWeb.GetFile(sFileURL);
if (oFile == null)
{
return false;
}
SPListItem item = oFile.GetListItem();
if (item.File.Level == SPFileLevel.Checkout)
{
item.File.UndoCheckOut();
}
if (item.File.Level != SPFileLevel.Checkout)
{
item.File.CheckOut();
}
item["Your Column name"] = "Value";
item.SystemUpdate(false);
item.File.CheckIn("SystemCheckedin");
item.File.Publish("SystemPublished");
oWeb.AllowUnsafeUpdates = false;
}
}