una ubicacion servidor que office especifica documentos crear como carpetas carpeta cargar biblioteca sharepoint wss

que - la ubicacion no especifica un servidor de sharepoint



SharePoint 2007, cómo verificar si una carpeta existe en una biblioteca de documentos (2)

Estoy accediendo a SharePoint a través de sus servicios web ... que son un poco limitados, como resultado he recurrido a WebDav para realizar algunas funciones de la carpeta de creación ...

Tengo una biblioteca de documentos, y estoy a punto de crear una carpeta usando webdav, pero no puedo encontrar ninguna documentación en Internet ni en ningún otro lugar sobre cómo verificar si ya existe una carpeta usando webdav, por lo que hay una manera de verificar si existe una carpeta en una biblioteca de documentos en SharePoint, ¡todos los métodos de hack y slash son bienvenidos!


No necesita, si ya existe, intentar crear una nueva carpeta con ese nombre devolverá "silenciosamente" la carpeta ya existente.


De alguna manera, no entiendo tu pregunta. La primera oración indica que está utilizando el servicio web (normalmente lo entendería como los servicios web SOAP proporcionados por SharePoint). El siguiente dice que estás usando WebDAV, que es un protocolo completamente diferente.

Entonces, WebDAV es el protocolo que "Windows Explorer" usa para acceder a SharePoint, si lo abre, el "modo Explorador". Dado que todas estas solicitudes son en realidad solicitudes HTTP, puede espiarlas utilizando la herramienta "Fiddler" .

Creo que, antes de abrir una carpeta, el Explorador de Windows intenta consultar SharePoint, si tal carpeta existe. Si intento abrir una ruta inexistente //mysrv/sites/myweb/mylib/notthere (pero //mysrv/sites/myweb/mylib es una biblioteca de documentos existente!) A través de Windows Explorer, la última llamada HTTP que veo es:

PROPFIND /sites/myweb/mylib HTTP/1.1 User-Agent: Microsoft-WebDAV-MiniRedir/6.1.7600 Depth: 1 translate: f

Donde SharePoint responde: una lista de subcarpetas y páginas en esta carpeta (XML muy largo, pero contiene elementos como este):

<D:multistatus xmlns:D="DAV:" xmlns:Office="urn:schemas-microsoft-com:office:office" xmlns:Repl="http://schemas.microsoft.com/repl/" xmlns:Z="urn:schemas-microsoft-com:"> <D:response> <D:href>http://sites/myweb/mylib</D:href> <D:propstat> <D:prop> <D:displayname>mylib</D:displayname> <D:lockdiscovery/> <D:supportedlock/> <D:isFolder>t</D:isFolder> <D:iscollection>1</D:iscollection> <D:ishidden>0</D:ishidden> <D:getcontenttype>application/octet-stream</D:getcontenttype> <D:getcontentlength>0</D:getcontentlength> <D:resourcetype> <D:collection/> </D:resourcetype> <Repl:authoritative-directory>t</Repl:authoritative-directory> <D:getlastmodified>2009-12-07T09:07:19Z</D:getlastmodified> <D:creationdate>2009-11-06T13:30:26Z</D:creationdate> </D:prop> <D:status>HTTP/1.1 200 OK</D:status> </D:propstat> </D:response> <!---List of other <D:response> elements --> </D:multistatus>

Si el elemento contenido es una carpeta, debe tener el valor "t: isFolder". De esta forma puede encontrar si la carpeta principal contiene la carpeta que va a crear.

EDITAR: creó una pequeña muestra de c # que primero lee el flujo de resultados y luego analiza el resultado un poco. Necesita mejorarlo, para ver si la lista contiene las carpetas que necesita o no.

System.Net.HttpWebRequest oReq; string sUrl = "http://yoursite/sites/somesite/DocumentLibrary"; oReq = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(sUrl); oReq.Method = "PROPFIND"; oReq.Credentials = System.Net.CredentialCache.DefaultCredentials; oReq.AllowAutoRedirect = true; oReq.UserAgent = "Microsoft-WebDAV-MiniRedir/6.1.7600"; //this causes all of the items to be enumerated, //if it is 0, only the folder itself is returned in the response oReq.Headers["Depth"] = "1"; oReq.Headers["translate"] = "f"; System.IO.StreamWriter oRequest = new System.IO.StreamWriter(oReq.GetRequestStream()); oRequest.WriteLine(); oRequest.Close(); System.IO.StreamReader oResponse = new System.IO.StreamReader(oReq.GetResponse().GetResponseStream()); string sResponse = oResponse.ReadToEnd(); oResponse.Close(); //done with the webclient stuff, check the results System.Xml.XmlDocument oMyDoc = new System.Xml.XmlDocument(); oMyDoc.LoadXml(sResponse); System.Xml.XmlNamespaceManager oNsMgr = new System.Xml.XmlNamespaceManager(oMyDoc.NameTable); oNsMgr.AddNamespace("D", "DAV:"); System.Xml.XmlNodeList oAllResponses = oMyDoc.SelectNodes(".//D:multistatus/D:response", oNsMgr); foreach (System.Xml.XmlNode oNode in oAllResponses) { Console.WriteLine("Name: " + oNode.SelectSingleNode("./D:propstat/D:prop/D:displayname", oNsMgr).InnerText); if (oNode.SelectNodes("./D:propstat/D:prop/D:isFolder", oNsMgr).Count > 0) { Console.WriteLine("Is folder: " + oNode.SelectSingleNode("./D:propstat/D:prop/D:isFolder", oNsMgr).InnerText); } else { Console.WriteLine("Is folder: f"); } Console.WriteLine(); }