Pergunta

o meu problema é que eu tenho uma biblioteca de documentos com sub-pastas.Também a biblioteca de documentos tem mais de um tipo de conteúdo.

Existe uma maneira de criar um CAML ou consulta LINQ para obter todos os arquivos de um determinado tipo de conteúdo a partir de uma das sub-pastas.

A sub-pasta de nome é conhecido.

Obrigado antecipadamente!

Foi útil?

Solução

Para SPQuery, use SPQuery.Pasta para definir a pasta:

SPFolder folder = list.RootFolder.SubFolders["Folder 1"];

SPQuery query = new SPQuery();
query.Folder = folder;

Em seguida, para definir tipo de conteúdo, você deve incluir a seguinte condição em sua cláusula Where:

SPContentType contentType = list.ContentTypes["MyContentType"];
query.Query = "<Where><Eq><FieldRef Name='ContentTypeId' /><Value Type='Text'>" + contentType.Id + "</Value></Eq></Where>";

Em seguida, para incluir todas as subpastas da Pasta "1", você deve especificar Scope="Recursive" na consulta ViewAttributes:

query.ViewAttributes = "Scope=\"Recursive\"";

P. S.No caso de você estiver usando o Modelo de Objeto Cliente e CamlQuery, a sintaxe é um pouco diferente.I. e.em vez de Folder, você vai precisar de FolderServerRelativeUrl:

query.FolderServerRelativeUrl = "/Shared Documents/Folder 1";

E também recursiva escopo é definido como atributo do elemento de Vista, que, neste caso, deve ser incluído na consulta.

Outras dicas

Você pode criar consulta CAML que é algo como isto (eu omissos as partes não relacionadas):

<View>
..........
    <QueryOptions>
        <ViewAttributes Scope='Recursive' />
    </QueryOptions>
    <Query>
      <Where>
          <And>
              <Eq>
                  <FieldRef Name="ContentType"></FieldRef>
                  <Value Type="Text">$Resources:ResourceFileName,ContentTypeName</Value>
              </Eq>
              <Eq>
                  <FieldRef Name="FileDirRef"></FieldRef>
                  <Value Type="Text">Server Relative URL of the Folder</Value>
              </Eq>
          </And>
      </Where>
    </Query>
..........
</View> 

Isso retornará todos os documentos do tipo de conteúdo especificado em uma subpasta.

Aqui estão alguns links que podem ser úteis:
Obter os Itens na Pasta CAML e Filtro de pasta de biblioteca de Documentos através de Consulta CAML

Licenciado em: CC-BY-SA com atribuição
Não afiliado a sharepoint.stackexchange
scroll top