Pergunta

Estou tentando construir uma visualização em árvore que mostre listas e pastas de sites.Este é um aplicativo externo, então preciso me comunicar com o WSS3 por meio de serviços da web.

Site
|-List
|  |-Folder
|  |-Folder
|     |-Folder
|
|-List
|  |-Folder
|
|-List

Consegui detalhar meu SPWeb.Lists objeto para obter o SPListCollection.Contudo a partir do SPList.Folders coleção você recebe o SPListItemCollection, não SPFolderCollection.Não parece haver uma propriedade para objetos filhos no SPList objeto.

Como você não pode lançar SPListItem para SPFolder Eu tenho o SPFolderCollection diretamente de SPWeb.Folders em vez disso, mas isso parece retornar coisas estranhas.

Eu tenho uma lista chamada "Desenvolvedor" que contém uma pasta chamada "Primeiro" que possui uma subpasta chamada "Mais profundo".

Este é o método recursivo que escrevi para criar nós para as pastas.

    private TreeNode[] CreateBranch(SPFolder folder)
    {
        if (folder.SubFolders.Count > 0)
        {
            List<TreeNode> branchList = new List<TreeNode>();

            TreeNode child;
            foreach (SPFolder item in folder.SubFolders)
            {
                if (item.SubFolders.Count > 0)
                    // Start recursion
                    child = new TreeNode(item.Name, CreateBranch(item));
                else
                    child = new TreeNode(item.Name);

                // Collect folders
                branchList.Add(child);
            }
            return branchList.ToArray();
        }
        return null;
    }

Isso cria uma árvore para mim, como deveria, mas as subpastas das pastas não parecem aparecer na coleção como um loop por ela.A lista “Desenvolvedor” também apareceu como uma pasta, assim como os diretórios web.

TreeView

Isso me deixou um pouco confuso sobre qual coleção devo usar e como devo saber se uma pasta possui subpastas.Alguém pode me ajudar a apontar a direção certa?

Foi útil?

Solução

Esta é uma resposta e tanto, mas mais um comentário que não cabia no espaço permitido para comentários ...

Parece que você deseja exibir as listas e depois as pastas nessas listas.Isso não é o mesmo que exibir as pastas de um site.

SPWeb.Folders retorna a lista de pastas na raiz de um site do SharePoint.Pense neles como 'caminhos de URL' que existem no site.Sua lista de 'Desenvolvedores' (uma biblioteca de documentos, presumo?) está acessível como http://site/Developer/, é por isso que aparece como uma lista e uma pasta.SPFolder.SubFolders deve retornar pastas de nível inferior.

Você provavelmente está atrás das pastas de uma lista específica.SPList.Folders retorna todas as pastas de uma lista.Para uma lista, uma pasta é apenas um item com tipo de conteúdo 'Pasta', e é por isso que retorná-la como SPListItemCollection não é tão estranho.Cada SPListItem possui uma propriedade SPFolder, mas não acho que você precise disso.Observe que SPList.Folders retorna todas as pastas da lista (recursivamente).

Conforme apontado acima por Kit Menke, seu código parece usar o modelo de objeto servidor, obtendo as informações de serviços web não é exatamente a mesma coisa, mas ajudará primeiro a entender o modelo de objeto e usá-lo para descobrir o que você deseja exibir.

Outras dicas

Encontrei este artigo enquanto procurava uma função para obter todas as pastas de uma determinada biblioteca de documentos como uma árvore.Devido a alguns erros no método recursivo mostrado pelo Amicable reescrevi o método.Pode ser útil para outros:

A função recursiva:

private void CreateBranch(SPFolder folder, TreeNode tnParent)
{
    if (folder.SubFolders.Count > 0)
    {
        foreach (SPFolder item in folder.SubFolders)
        {
            TreeNode child = new TreeNode(item.Name);

            if (item.SubFolders.Count > 0)
            {
                // Start recursion
                CreateBranch(item, child);
            }
            tnParent.ChildNodes.Add(child);
        }
    }
}

Chame a função:

SPFolder listRootFolder = SPContext.Current.Web.Lists["Shared Documents"].RootFolder;
TreeNode parentNode = new TreeNode("root");
CreateBranch(listRootFolder, parentNode);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a sharepoint.stackexchange
scroll top