Arquivo da tag: Customização

Big Tip: Como copiar uma página e manter todas as webparts?

 

Olá SharePointers,

Hoje vou postar uma dica um pouco mais avançada e quase não documentada. Quem nunca precisou copiar uma página e levar todas as webparts junto e ficou frustrado ao descobrir que não tem um jeito de fazer isso via API?

Tanto faz o meio que você utilize, o resultado sempre é o mesmo: Pode ser Copiar o item via API, exportar o ASPX e importar novamente. Nada funciona.

A única alternativa é fazer isso via SharePoint designer. Pelo menos temos uma alternativa para fazer, mas não é nada agradável quando temos que replicar essa ação em produção. E aí? Qual alternativa que temos?

Como o SharePoint Designer consegue fazer, ele deve usar alguma API. Então nossa tarefa é só descobrir qual é. Abri o Fiddler e identifiquei o request que o SharePoint designer fez e o resto foi só converter em Script.

O script abaixo faz um post na URL “/_vti_bin/_vti_aut/author.dll” do site e passa as informações das páginas que você quer copiar.

A documentação da Microsoft fala o seguinte sobre o Author.dll:

The ISAPI extension that implements authoring operations, such as uploading files, applying themes, renaming and deleting documents, and so forth.
Path: http://www.server.com/subweb/_vti_bin/_vti_aut/author.dll

Ou seja, essa extensão ISAPI é utilizada para operações de “autoria”: Upload de arquivos, aplicar temas, renomear e deletar documentos, copiar documentos copiando todo o histórico (outra função que não tem como fazer “pelas vias comuns”).

 

Abaixo está o script para realização da cópia. Só passar a URL do site onde está a página, a página de onde você quer copiar e o nome da nova página. Exemplo:

clonePageWithParts.ps1 -Url http://site/subsite -ServiceName /subsite -SourcePage “Pages/default.aspx” -DestPage “Pages/newpage.aspx”

[Atualização 16/03/2015 11:05] Coloquei o script no site do MSDN Code mpara facilitar oa cesso: https://code.msdn.microsoft.com/Clone-a-page-with-all-c6512b5b

 

Mais informações e leituras recomendadas:

FrontPage Server Extensions RPC – move document Method: https://msdn.microsoft.com/en-us/library/office/ms440627(v=office.14).aspx

Overview of the SharePoint Team Services Architecture (antigo, mas interessante)

https://msdn.microsoft.com/en-us/library/office/ms463030(v=office.14).aspx

http://www.edinkapic.com/2009/05/what-sharepoint-and-vermeer-have-in.html

Quick Tip: “The name ‘InitializeControl’ does not exist in the current context”

Olá SharePointers,

Em algumas vezes, utilizando o Visual Studio 2012 para criar Visual WebParts, aparece o erro “The name ‘InitializeControl’ does not exist in the current context” ao tentar adicionar um controle que está dentro da sua própria solution.

Após algumas pesquisas, cheguei na solução:

Primeiro você inclui a referência do controle no ASCX: <%@ Register TagPrefix….

Salva o ASCX, e manda fazer o deploy.

Após o deploy concluído, coloca a linha referente ao controle: <cc1:NomeControle ID=….

Salva o ASCX.

Clica com o botão direito do ASCX e escolha a opção RUN Custom Tool e voilá!

 

Abraços! Alegre

TROUBLESHOOT: Erro ao criar campos em uma Lista Personalizada (Custom List)–Javascript: Object Undefined

Olá SharePointers,

Ontem me deparei com uma situação um pouco inusitada: fui tentar criar um campo na lista e não foi minha surpresa ao clicar em OK e acontecer…… NADA.

Achei estranho… Procurei por erros nos LOGS (ULS), olhei Event Viewer do servidor e nada. Não tinha nenhuma mensagem de erro em lugar nenhum. Troquei de usuário, fiz de tudo e não conseguia criar um campo.

Por fim, resolvi trocar de Browser para testar, No IE 8, aparecia um erro de Javascript: Object Is Null or Undefined.

Pensei: "Agora já era, corrompeu a base, o portal está com problemas”… Após os 2 minutos de desespero (portal em produção) fui pesquisar prováveis soluções e encontrei algo que não acreditei que fosse resolver (mas RESOLVEU).

Abra a MasterPage do site,

image

e verifique se o ContentPlaceHolder PlaceHolderUtilityContent está FORA da TAG </FORM>,

igual o exemplo abaixo:

 

image

 

#FicaADica