2015-12-14 61 views
1

我試圖更新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,但它沒有解決問題。

我還能做什麼?

+0

只是一個猜測:調用'oFile.Item.Update()'以及。 –

+0

謝謝!有效! @Cᴏʀʏ – Guid2015

回答

2

實際上,您並未修改SPFile實例,而是關聯的SPItem。因此撥打SPFile.Update()什麼都不做。這是更好地與直接SPItem實例的工作:

SPItem item = oFile.Item; 
item.Properties[xNode.Name] = xNode.InnerText; 
item.Update(); 

此外,AllowUnsafeUpdates屬性是不相關的情況。不要改變它。

0

您的代碼缺少在實際更新之前完成的所有檢查。

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; 
     } 
    } 
+0

雖然您通常對檢查正確,但這不是問題的核心。順便說一句。在這種情況下不需要'SystemUpdate()'。此外,如果在文檔庫上未啓用此功能,則簽入/簽出是多餘的。 –

+0

@OndrejTucny同意......但OP沒有告訴錯誤的細節,如果有的話。只是說修改沒有反映出來。這是一個工作代碼,所以想到分享 –

+0

從OP提供的示例代碼中可以明顯看出這個錯誤。 –