Pergunta

Estou adicionando um muito simples XsltListViewWebPart para uma página do aplicativo.Igual a:

XsltListViewWebPart lvWebPart = new XsltListViewWebPart { ChromeType = PartChromeType.None, ListUrl = "/somesite/list" };
Page.Controls.Add(lvWebPart);

Tudo funciona bem (posso baixar arquivos, criar pastas, escolher visualizações diferentes, etc.) - mas os links das pastas têm o href errado:eles sempre apontam para a web raiz!

Veja estes exemplos:enter image description here

Como você pode ver, o documento está vinculado corretamente a ../sites/sr/doclib/mydocument.docx, no entanto, ao olhar para as pastas, eles esquecem o contexto em que estão atualmente (eles estão em http://../sites/sr/_layouts/../../..Detail.aspx?RootFolder=..., sendo a parte importante /sites/sr/).Eles tentam acessar a pasta _layouts no contexto raiz do conjunto de sites, conforme mostrado acima: http://../_layouts/../../..Detail.aspx?RootFolder=...

Ou novamente resumido:

  • A localização da página do aplicativo:
    • http://sp/sites/sr/_layouts/my/application/Detail.aspx
  • A lista/doclib que estou acessando
    • http://sp/sites/sr/mylist
  • A URL para pastas dentro de XsltListViewWebPart
    • http://sp/_layouts/my/application/Detail.aspx?RootFolder=...
  • O URL das pastas como deveriam ser
    • http://sp/sites/sr/_layouts/my/application/Detail.aspx?RootFolder=...

Aí vem o chute:Ao usar um ListViewWebPart, tudo funciona como deveria!Então, em vez do XsltListViewWebPart acima, eu apenas uso um ListViewWebpart - e as pastas funcionam, o contexto é levado em consideração, pois as pastas têm a URL que eu quero (http://../sites/sr/_layouts/../../..Detail.aspx?RootFolder=...

Eu tentei definir o ID da Web Propriedade no XsltListViewWebpart esperando que isso definisse o contexto, mas sem sorte.Agora estou pensando que o configurei incorretamente ou o novo XsltListViewWebPart do SharePoint 2010 tem um bug - já que o mesmo código funciona para um ListViewWebPart na mesma página do aplicativo.

Espero que alguém possa verificar esse problema.

Foi útil?

Solução

Resumindo, apenas não use XsltListWebPart nas páginas do aplicativo.

E aqui estão algumas explicações resumidas:

XsltListViewWebPart e outras webparts OOTB do SharePoint (especialmente as complexas), aparentemente não devem funcionar no ambiente de páginas de aplicativos.Ou seja, eles não foram testados lá e, portanto, sua operacionalidade não é garantida.

Isso pode ser confirmado indiretamente lendo pelo menos os seguintes artigos do MSDN:

..Uma página do site também pode hospedar recursos como Web Parts dinâmicos e zonas de web peças.As páginas do aplicativo não podem fazer essas coisas.

Também é afirmado no curso MS 10232.

Em relação ao XsltListViewWebPart (XLV) em particular, ouvi falar de vários problemas ao usá-lo na página do aplicativo e também experimentei alguns deles.

Por exemplo, se você personalizar XLV usando a propriedade XslLink, XLV não conseguirá armazenar em cache o arquivo xsl e, como consequência, o ECB e os botões correspondentes na faixa de opções não funcionarão.Nos logs, você receberá a seguinte mensagem de exceção:

Tentativa de usar um objeto que deixou de existir.

Além disso, você pode verificar a seguinte pergunta para outro exemplo de problemas com webpart OOTB na página do aplicativo (ListViewWebPart, desta vez):

Outras dicas

Primeiro, acho que Andrey acertou em cheio.Além disso, você pode tentar usar o Controle ListViewByQuery em uma página do aplicativo se você estiver procurando por um layout tabular simples de dados (ou seja,uma lista).A Microsoft faz isso na página de status do fluxo de trabalho OOB (ou seja,_layouts/wrkstat.aspx) para exibição de tarefas.

Eu não tentei isso com menus do BCE e coisas assim, mas usei-o para listas de dados somente leitura.Como parece que você o está usando para uma biblioteca de documentos com pastas, não estou confiante de que funcione corretamente sem muito código para fazer com que as pastas, a classificação e a paginação funcionem corretamente.Pode valer a pena tentar, embora eu não gastasse muito tempo com isso, pois a página do site é provavelmente a melhor maneira de usar menos código personalizado.

Se você usar ListViewByQuery, certifique-se de revisar estes links para paginação, etc:

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