Como configurar o Visual Studio 2012 para desenvolver para Sharepoint 2013.

O Cenário

Você gastou horas criando uma máquina virtual com Windows Server 2012, Sharepoint 2013, Visual Studio 2012, atualizou tudo, configurou tudo e chegou o grande momento de abrir o VS ir em File / New Project / e criar sua primeira WebPart para testar o Sharepoint 2013 e…

 

O Problema

Você não acha nenhum template de projeto para o Sharepoint 2013.

 

A Solução

Você vai digitar no google “Como instalar templates de projeto para Sharepoint 2013″ e vai cair em páginas que vão lhe ensinar o seguinte: a instalação do templates e ferramentas para desenvolvimento de solições do Sharepoint 2013 devem ser feitas através da WebPI (Web Plataform Installer).

O link oficial sobre configuração de um ambiente para desenvolvimento com Sharepoint 2013 pode ser acessado aqui, a seguir eu lhe mostro a mesma informação de forma “mastigada”

  1. Instale a WebPI (se você ainda não tem)
  2. Faça download DESTE arquivo. Este é apenas um atalho de arquivo que abrira a WebPI diretamente na página de download das ferramentas de desenvolvimento para Sharepoint 2013. Se preferir, abra a WebPI, pesquise por “office” e baixe o “Microsoft Office Developer Tools for Visual Studio 2012″.
  3. Instale também os Client Components SDK, AQUI está o link para download.
  4. Abra o Visual Studio e divirta-se

Sharepoint 2013 Templates

Como abrir arquivos do client a partir de uma página web usando ActiveX.

O Cenário

Esta semana recebi uma demanda que dizia o seguinte: O cliente gostaria de ter dois links na sua home page, uma para abrir o Outook (sim, o Microsoft Outlook) e outro para abrir um client do SAP (é um arquivo EXE).

Meu sangue subiu, e na mesma hora esbravejei: – Isso não é possível! A web não permite isso, se permitisse, qualquer site da web teria acesso a qualquer arquivo de qualquer computador, eu estava certo, ou parcialmente certo, depende do ponto de vista.

Como o cliente usa Sharepoint, via de regra tem que usar o Internet Explorer, então minha solução foi direcionada a duas coisas: Silverlight ou ActiveX. Obviamente repudiei as duas ideias, mas o cliente é quem manda né, então lá vai eu “prostituir” meus princípios de desenvolvedor.

 

O Problema

Silverlight tem perfeitas condições de realizar isso, basta que a aplicação rode “Out-Of-Browser”, ou seja, esta opção é inválida pra meu caso. Pesquisei sobre ActiveX e achei um trechinho de código javascript, bem simples e que NÃO funciona, calma, eu explico o porque não funciona. O código é o seguinte:

Vai lá, tenta rodar ai, você vai ver a seguinte mensagem de erro:

Error: Automation server can’t create object

Isso é bom, se este erro não ocorresse, qualquer página poderia executar qualquer ActiveX e você estaria com sérios problemas de segurança. Não precisamos entrar na discussão do problema que é abrir esta brecha né?

 

A “Solução”

A “solução” aqui é apresentada com aspas mesmo, porque este “problema” (que não é um problema) não tem solução, tem é gambiarra, que um programador digno não deveria fazer, mas se o cliente quer, quem é você pra argumentar? Se ele quer abrir uma falha de segurança tremenda no seu site, deixa ele, cabe a nós explicar os perigos disso.

Então, para você não ver mais a mensagem de erro do Automation server e conseguir abrir um arquivo do client você precisa ir nas configurações do IE, e adicionar seu site a zona  trusted.

Em seguida, na aba security mesmo, clique em Custom Level e procure a opção “Initialize and script ActiveX controls not marked as safe for scripting”.

Rode o javascript de novo, sua chamada ActiveX vai funcionar, alias, a sua e a de qualquer outro script, seja ele do bem ou do mal.

Tagged , , , ,

Alterando o valor de uma Custom Property via código (Sharepoint 2010)

O Cenário

Recentemente precisei fazer manutenção em uma webpart que mostrava a famosa frase

Estamos a X dias sem acidente de trabalho, nosso record é de Y dias.

Tão simples que chega a dar preguiça de fazer certo? Nem tanto!

Essa webpart deveria ter duas propriedades customizadas (Custom Properties) uma onde seria informada a Data do Ultimo Acidente e a outra onde seria informado o record atual de dias sem acidente. Aqui esta a webpart

Webpart_acidentes_trabalho

 

O problema

Pense, a partir do dia em que o record fosse batido, o administrador do site deveria, todos os dias, alterar a webpart e incremetar o valor do record, então começei a pesquisar como se altera o valor de uma propriedade via código, descobri a a API do Sharepoint não fornece uma meio “oficial” de se fazer isso.

 

A solução

A solução? bem, ela não é nada elegante, olha só:

Não é elegante mas funciona muito bem.

Tagged

Resolvendo a exception “Code block are not allowed in this file”

O Cenário

Você acabou de restaurar um backup, tentou rodar o site pela primeira vez e viu o seguinte erro:

Code Block Not Allowed

Este problema é bem simples de resolver, o próprio erro já nos qual é, e onde esta o problema.

 

O Problema

Não é comum, mas alguns programadores insistem em usar código de server no cliente, ou seja, escrevem código C# em arquivos aspx ou ascx, não vejo motivos para se fazer isso, mas é fato que tem gente que faz, nestes casos você irá ver códigos parecidos com este

O Sharepoint não permite este tipo de coisa, pois, em tese, um usuário poderia fazer upload de um aspx com código mal intencionado e executá-lo como se ele fosse uma página legítima e confiável do Sharepoint. Sendo assim, você já pode deduzir que utilizar a técnica “spaghetti code”, demonstrada acima, não é uma boa estratégia. Porém, se você esta dando manutenção em algum projeto, não vai querer resolver os “erros” dos outros, neste caso, você deve configurar o Sharepoint para permitir esse sacrilégio.

 

A Solução

Edite o webconfig

e adicione o seguinte

No código acima, configuramos o sharepoint para permitir “spaghetti code” tanto na masterpage como nas demais páginas.

Feio né?

 

 

Tagged

Como usar a AjaxControlToolkit com o Sharepoint 2010

O cenário

Se você, assim como eu, já desenvolve em asp.net e está se aventurando com Sharepoint, provavelmente irá querer usar as funcionalidades da  AjaxControlToolkit em suas webparts. E se você, assim como eu, tem prazos apertados em seus projetos, você irá abrir o console do Nuget, digitar:

Pronto, tudo instalado, configurado e funcionando. Pelo menos até você compilar ou tentar implantar sua webpart!

O problema

Com este método a ultima versão a AjaxControlToolkit será adicionada ao seu projeto, e ai é que está o problema, a ultima versão da AjaxControlToolkit, não funciona com o Sharepoint 2010.

Provavelmente os erros que você encontrará são estes:

  • AjaxControlToolkit requires ASP.NET Ajax 4.0 scripts. Ensure the correct version of the scripts are referenced. If you are using an ASP.NET ScriptManager, switch to the ToolkitScriptManager in AjaxControlToolkit.dll.
  • Sys.registerComponent is not a function

 

A solução

Existe uma outra versão mais antiga que, até onde eu sei, é a unica que funciona bem com o Sharepoint 2010, ela foi disponibilizada no release 30930 e pode ser baixada no link abaixo:

Link para a versão correta da AjaxControlToolkit para o Sharepoint 2010

Adicione a DLL ao seu projeto e referencie ela no ascx da webpart que deseja desta forma:

Abra sua MasterPage no Sharepoint Designer, antes faça um backup dela, o arquivo deve estar em “_catalogs/masterpage” e provavelmente será a v4.master. Referencie a Ajaxtoolkit na sua Master (da mesma forma que foi mostrado no snippet acima) e altere a declaração do ScriptManager da sua MasterPage para utilizar o ToolkitScriptManager da AjaxControlToolkit, desta forma:

Quase pronto, você já pode desenvolver utilizando as funcionalidades da AjaxControlToolkit em seu projeto, mas você deve se preocupar com o processo de implantação do seu pacote de webparts, afinal, a AjaxControlToolkit é uma DLL de terceiros que foi adicionado ao seu projeto.

 

Implantando a Solução

Este processo faz com que a AjaxControlToolkit seja incorporada ao seu pacote de implantação e registra os namespaces desta dll como seguros para o Sharepoint. No Visual Studio, dê dois cliques para abrir o seu pacote de implantação.

Print1

Na parte debaixo da tela que irá abrir, clique em Advanced.

Print2

Na tela seguinte, clique em Add -> Add Existing Assembly. Você verá uma tela igual a esta

Print3

Nesta tela, localize a AjaxControlToolkit e na lista SafeControls cadastre os namespaces conforme mostrado na imagem acima.

Pronto, seu pacote de implantação esta feito e seu problema resolvido.

Tagged ,