2009-10-29 72 views
0

WSS 3.0列表服務WSS GetListItems不與GUID調用時沒有繼承的權限返回文件夾

我使用的後續CAML查詢在圖片庫(名稱圖片)運行GetListItems()

<Query> 
</Query> 
<ViewFields> 
    <FieldRef Name="EncodedAbsUrl"/> 
    <FieldRef Name="Title"/> 
    <FieldRef Name="ContentType"/> 
</ViewFields> 
<QueryOptions> 
    <Folder>Pictures\Uploads</Folder> 
    <ViewAttributes Scope="RecursiveAll"/> 
</QueryOptions> 

此查詢正確返回上傳文件夾中的所有文件和文件夾。

但是,如果我瀏覽到上傳文件夾並選擇編輯權限的上傳文件夾然後選擇操作>編輯權限然後單擊OK 確認框此查詢不再起作用。

我不相信這與權限有關,因爲我根本沒有修改權限,我只是「父親的權限」,然後停止[ped]繼承權限,「通過選擇編輯權限 。另外,運行此查詢時,我沒有收到錯誤消息,我剛收到一個空的結果集。

其他的事情我已經嘗試:

  • 去除QueryOptions所有標籤:這仍然沒有返回上傳文件夾或下的任何文件或文件夾直接
  • 添加文件夾的權限爲我的用戶帳戶:這不會幫助
  • 搜索一些類似的問題或某種形式的解決方案:無濟於事

其他信息:

  • 調用該從C#贏表單應用

有誰知道如何解決這個固定或工作?如果需要更多細節或澄清,請告訴我。

因此經過一些更多的實驗後,發現了一個解決方案,雖然沒有很好的解釋或記錄。該問題涉及到如何在被稱爲GetListItems功能,這裏是未正常工作代碼:

System.Xml.XmlNode ndListView = listProxy.GetListAndView("Pictures", ""); 
string strListID = ndListView.ChildNodes[0].Attributes["Name"].Value; 
XmlNode returnNode = listProxy.GetListItems(strListID, strViewID, queryNode, viewNode, _maxFolders, optionNode, null); 

如預期的情況上面解釋這是行不通的,但是,它是在爲每隔一個文件夾和文件。解決的辦法是發送GetListItems列表名稱,而不是列表中的「圖片」 GUID,就像這樣:

XmlNode returnNode = listProxy.GetListItems("Pictures", strViewID, queryNode, viewNode, _maxFolders, optionNode, null); 

更新
此外,MSDN documentation建議GUID的使用,而不是列表名稱當使用列表。GetListItem方法:

LISTNAME:包含任一 顯示名稱或的GUID 列表的字符串。建議您使用GUID的 ,該GUID必須用大括號({})包圍 。當查詢 UserInfo表時,該字符串包含 「UserInfo」。

我不知道爲什麼這段代碼能正常工作,而且原來沒有。雖然我的問題已經解決,但是有沒有人知道爲什麼我的原始代碼不起作用(僅適用於上面解釋的情況)和修改後的代碼的工作原理?

回答

0

因此經過一些更多的實驗後,發現了一個解決方案,雖然沒有很好地解釋或記錄。該問題涉及到如何在被稱爲GetListItems功能,這裏是未正常工作代碼:

System.Xml.XmlNode ndListView = listProxy.GetListAndView("Pictures", ""); 
string strListID = ndListView.ChildNodes[0].Attributes["Name"].Value; 
XmlNode returnNode = listProxy.GetListItems(strListID, strViewID, queryNode, viewNode, _maxFolders, optionNode, null); 

如預期的情況上面解釋這是行不通的,但是,它是在爲每隔一個文件夾和文件。解決的辦法是發送GetListItems列表名稱,「圖片」,而不是名單GUID,就像這樣:

XmlNode returnNode = listProxy.GetListItems("Pictures", strViewID, queryNode, viewNode, _maxFolders, optionNode, null);