2015-07-31 1 views
-2

Мне нужно получить файлы из списка «Общие папки». Они вложены в несколько вложенных папок, это выглядит следующим образом:Не удается получить вложенные папки List в Sharepoint

Shared Folders 
\- Incoming Documents 
    \- Work Trips 
     \- ####(code) 
      \- the file I'm looking for 

Я использовал исходный код ответа на этот вопрос в в https://social.msdn.microsoft.com/Forums/office/en-US/16a2d993-2f5e-4242-8e5a-451a78c064a3/retrieving-folders-from-document-library?forum=sharepointdevelopmentlegacy и я ничего не получаю. Я имею в виду, когда я передаю ссылку «http://SITE/DocLst/Входящие» из «ows_EncodedAbsUrl» в «QueryOptions - Folder» - я получаю просто ничего взамен при вызове GetListItems. Нулевые строки.

Что я могу делать неправильно?

EDIT: Поскольку люди подозревают, что msdn от Microsoft является «подозрительной ссылкой», вот мой исходный код (слегка модифицированный код из ссылки).

static void FillNodes(string querytext, out XmlNode query, out XmlNode viewFields, out XmlNode queryOptions) 
    { 
     XmlDocument xmlDoc = new System.Xml.XmlDocument(); 
     xmlDoc.LoadXml(querytext); 
     query = xmlDoc.SelectSingleNode("//Query"); 
     viewFields = xmlDoc.SelectSingleNode("//ViewFields"); 
     queryOptions = xmlDoc.SelectSingleNode("//QueryOptions"); 
    } 

    static XmlNode GetFoldersNode(XmlNodeList oNodes) 
    { 
     // Find the node with root folders 
     XmlNode folderNode = null; 
     foreach (XmlNode node in oNodes) 
     { 
      if (node.ChildNodes.Count == 0) 
       continue; 
      folderNode = node; 
      break; 
     } 
     if (folderNode == null) 
      throw new Exception("Folders not found!"); 

     return folderNode; 
    } 
    static string FindFolder(XmlNode folderNode, string folderName) 
    { 
     string folderPath = null; 
     foreach (XmlNode node in folderNode.ChildNodes) 
     { 
      if (node.Attributes == null || node.Attributes["ows_EncodedAbsUrl"] == null) 
       continue; 
      if (!node.Attributes["ows_EncodedAbsUrl"].Value.Contains(folderName)) 
       continue; 
      folderPath = node.Attributes["ows_EncodedAbsUrl"].Value; 
      break; 
     } 
     return folderPath; 
    } 

    static void Main(string[] args) 
    { 
     XmlDocument resdoc = new System.Xml.XmlDocument(); 
     XmlNode resnode = null; 
     string strURL = ""; 
     string strFileName = ""; 

     sharepointsrv.Lists objLists = new sharepointsrv.Lists(); 
     objLists.Credentials = new System.Net.NetworkCredential("(login)", "(pw)", "(domain)"); 
     objLists.Url = "http://(site)/_vti_bin/lists.asmx"; 

     XmlNode ndQuery; 
     XmlNode ndViewFields; 
     XmlNode ndQueryOptions; 
     FillNodes("<mylistitemrequest><Query><Where><Eq><FieldRef Name=\"FSObjType\" /><Value Type=\"Lookup\">1</Value></Eq></Where></Query><ViewFields><FieldRef Name=\"EncodedAbsUrl\"/><FieldRef Name=\"ID\" /><FieldRef Name=\"FileRef\" /><FieldRef Name=\"ID\" /><FieldRef Name=\"Title\" /></ViewFields><QueryOptions></QueryOptions></mylistitemrequest>", 
      out ndQuery, out ndViewFields, out ndQueryOptions); 

     XmlNode ndListItems; 
     XmlNodeList oNodes; 
     XmlNode folderNode; 
     string folderPath; 
     // Get top level folders 
     ndListItems = objLists.GetListItems("Общие документы", null, ndQuery, ndViewFields, null, ndQueryOptions, null); 
     oNodes = ndListItems.ChildNodes; 

     // Find the node with root folders 
     folderNode = GetFoldersNode(oNodes); 

     // Find the "Входящие" folder 
     folderPath = FindFolder(folderNode, "Входящие"); 

     FillNodes("<mylistitemrequest><Query><Where><Eq><FieldRef Name=\"FSObjType\" /><Value Type=\"Lookup\">1</Value></Eq></Where></Query><ViewFields><FieldRef Name=\"EncodedAbsUrl\"/><FieldRef Name=\"ID\" /><FieldRef Name=\"Title\" /></ViewFields><QueryOptions><Folder>" + folderPath + "</Folder></QueryOptions></mylistitemrequest>", 
      out ndQuery, out ndViewFields, out ndQueryOptions); 

     // Get subfolder contents 
     ndListItems = objLists.GetListItems("Общие документы", null, ndQuery, ndViewFields, null, ndQueryOptions, null); 
     oNodes = ndListItems.ChildNodes; 

     // At this point I am getting zero rows, even though I should be getting multiple folders 
     // Following code digs deeper down the hierarchy of folders, but it's not working because nothing arrives at this point 

     // Get node with folders 
     folderNode = GetFoldersNode(oNodes); 

     // Get "Командировки" folder 
     folderPath = FindFolder(folderNode, "Командировки"); 

     // Get subfolder contents 
     ndListItems = objLists.GetListItems("Общие документы", null, ndQuery, ndViewFields, null, ndQueryOptions, null); 
     oNodes = ndListItems.ChildNodes; 

     ... 
    } 

Когда я оценить oNodes после кода «Получить содержимое подпапок», я вижу нулевые строки, в то время как должен быть список вложенных папок в папке «Входящие».

+0

мы не будем нажимать на ссылки, которые выглядят подозрительно, так сказать. Опубликуйте свой реальный код, и, возможно, кто-то может определить, что вы делаете неправильно, и если вы передаете ссылку, возможно, вам следует попробовать использовать отладчик для шаг через код .. начать настройку некоторых точек останова – MethodMan

+0

Что !? Microsoft msdn подозревается? – Istrebitel

+0

И, очевидно, я отлаживал его, поэтому я знаю, что есть нулевые строки – Istrebitel

ответ

0

Оказывается, пример, который я использовал из msdn, был неверным. Вставка значения «ows_EncodedAbsUrl» в «Папка» queryOption не будет работать, потому что требуется относительный путь.

«ows_EncodedAbsUrl» возвращался «http://SITE/DocList/Folder», в то время как «DocList/Folder» требуется для правильной работы «Папка».

 Смежные вопросы

  • Нет связанных вопросов^_^