none
Recuperar ID de pasta na Biblioteca usando Web Services

    Pergunta

  • Boa tarde a todos,

    eu estou fazendo um método para retornar ID da pasta em uma biblioteca do SharePoint.

    Segue código Abaixo:

    public string RecuperaId(string nomePasta)
    {
    try
    {
    string id = string.Empty;
    XmlNode resultNode = null;
    WebServiceLists.Lists service = new WebServiceLists.Lists();
    service.Url = "http://sharepoint/_vti_bin/lists.asmx";
    service.Credentials = new System.Net.NetworkCredential("usuario", "senha", "dominio");
    XmlDocument xDoc = new XmlDocument();
    XmlNode ndQuery = xDoc.CreateNode(XmlNodeType.Element, "Query", "");
    XmlNode ndViewFields = xDoc.CreateNode(XmlNodeType.Element, "ViewFields", "");
    XmlNode ndQueryOptions = xDoc.CreateNode(XmlNodeType.Element, "QueryOptions", "");
    ndQuery.InnerXml = "<Query><Where><And><Eq><FieldRef Name='FileLeafRef' /><Value Type='Text'>" + nomePasta + "</Value><FieldRef Name='FSObjType'/>" +
    "<Value Type='Text'>1</Value></Eq></And></Where></Query>";
    ndViewFields.InnerXml = "";
    ndQueryOptions.InnerXml = "<QueryOptions><ViewAttributes Scope='RecursiveAll'/></QueryOptions>";
    resultNode = service.GetListItems("Unidade", string.Empty, ndQuery, ndViewFields, null, ndQueryOptions, null);
    WriteMessage(resultNode.ToString());
    foreach (XmlNode node in resultNode.ChildNodes)
    {
    if (node.Name == "rs:data")
    {
    for (int i = 0; i < node.ChildNodes.Count; i++)
    {
    if (node.ChildNodes[i].Name == "z:row")
    {
    foreach (XmlAttribute attr in node.ChildNodes[i].Attributes)
    {
    if (attr.Name == "ows_ID")
    {
    id = attr.Value.ToString().Split(';')[0];
    break;
    }
    }
    }
    }
    }
    }
    return id;
    }
    catch (Exception ex)
    {
    WriteMessage("\n " + ex.ToString());
    }
    return string.Empty;
            }

    O problema é que ele não traz o ID da pasta que eu desejo, e sim de outras pastas quaisquer existentes na biblioteca.

    Quem puder me ajudar, agradeço.

    Atc,

    André Machado




    segunda-feira, 13 de maio de 2013 19:21

Respostas

  • André,

    Fiz algumas alterações no seu código e postei no blog Obtendo Pastas Utilizando o WebService Lists.ASMX do SharePoint 2010.


    Atenciosamente,

    Fabian André Gehrke
    MCITP e MCPD SharePoint 2010
    http://fabiangehrke.com.br


    domingo, 19 de maio de 2013 03:18
    Moderador
  • Consegui resolver da seguinte forma.

    Como meu objetivo era renomear pastas através de um Web Services e não estava conseguindo isso. Por isso criei uma lista no SharePoint com duas colunas, uma com o nome antigo e outra com o novo nome. E associado a essa lista eu criei um Work Flow no Visual Studio que ao incluir algum registro na lista, ele inicia o fluxo que vai na Biblioteca desejada e renomeia a pasta. O código de renomear as pastas segue abaixo:

    private void codeActivity1_ExecuteCode(object sender, EventArgs e)
            {
                string urlNova = workflowProperties.Item["URLNOVA"].ToString();
                string urlAntiga = workflowProperties.Item["URLANTIGA"].ToString();
                using (SPSite site = new SPSite("http://sharepoint/"))
                {
                    using (SPWeb web = site.OpenWeb())
                    {
                        string pathFolder = "http://sharepoint/biblioteca/" + urlAntiga;
                        SPFolder folder = web.GetFolder(pathFolder);
                        folder.Item["Name"] = urlNova;
                        folder.Item.Update();
                    }
                }
            }

    • Marcado como Resposta Andre_Machado quinta-feira, 16 de maio de 2013 13:46
    quinta-feira, 16 de maio de 2013 13:46

Todas as Respostas