SharePoint Framework – Visão e Futuro

Olá SharePointers,

Para quem acompanha meu blog, venho falando das novas formas de desenvolvimento para SharePoint e incluindo minhas experiências com novos frameworks há algum tempo.

A Microsoft disponibilizou, ainda em preview, um novo framework para desenvolvimento de soluções para o SharePoint – falei sobre isso nesse link:  http://rodrigoromano.net/2016/09/01/sharepoint-framework/.

Vendo os movimentos mais recentes da Microsoft, podemos perceber a sua estratégia de aproximação com as comunidades/plataformas Open Source e como isso têm transformado a experiência com os próprios produtos da Microsoft.

Dito isso e, pensando em toda a transformação que o próprio modelo de Add-ins nos propiciou – ou nos forçou – podemos inferir/constatar que o desenvolvimento Server Side para SharePoint, se ainda não deixou de existir, tende a morrer. 

Quando eu falo isso, estou me referindo apenas a códigos de servidor rodando no mesmo box do SharePoint. É claro, que se você fizer um add-in provider hosted, você poderá ter códigos de servidor rodando normalmente em qualquer linguagem que preferir.

 

Add-Ins

Tenho falado bastante sobre esse assunto, também. Nesses posts http://rodrigoromano.net/2015/11/04/aumentando-a-produtividade-com-sharepoint-add-ins-parte-1/ e http://rodrigoromano.net/2015/11/23/aumentando-a-produtividade-com-sharepoint-add-ins-parte-2-a-beleza-do-upgrade/ falei sobre como utilizar esse modelo para ganhar produtividade.

Quando esse modelo foi introduzido, a mensagem chegou para a comunidade de forma distorcida e não entendemos a sua proposta e como ele poderia nos ajudar. Para nós, desenvolvedores de SharePoint acostumados a fazer tudo da mesma maneira, foi complicado aceitar essa alteração na nossa metodologia de trabalho. Muitas pessoas acabaram por simplesmente deixar esse modelo de lado e não aproveitar os seus benefícios.

Concordo que essas mudanças são muito grandes, principalmente para quem estava acostumado com desenvolvimento somente do lado do servidor e tiveram que passar para o lado do cliente e entender todos os seus desafios e características.

Muito embora as aplicações web tenham evoluído para modelo semelhantes, não estávamos acostumados e talvez nem preparados pra isso.

 

SharePoint Framework

A Microsoft tenta, cada vez mais, aproximar os desenvolvedores de outras plataformas e permitir que eles trabalhem com o SharePoint de maneira mais simples, sem uma curva de aprendizado muito alta.

Com o modelo de Add-ins, nesse caso específico os SharePoint-Hosted, isso era uma meia verdade. Embora a linguagem utilizada seja o Javascript, todo o tooling e os processos de desenvolvimento eram todos muito distintos. 

Na minha visão, o modelo de Add-ins foi um primeiro passo nessa transformação. 

O segundo passo, foi a criação do SharePoint Framework.

Com esse novo modelo, que ainda está em preview, a Microsoft aproximou esses mundos de uma forma nunca vista antes. Veja abaixo, um comparativo entre os toolings utilizados no desenvolvimento Server-Side e no novo modelo:

Tooling SharePoint Atual Tooling SharePoint Framework
IIS / .NET Framework Node
NuGet NPM
MS Build Gulp
Visual Studio Templates Yeoman
C# TypeScript

Notem que agora, as ferramentas são as mesmas utilizadas pelos desenvolvedores front-end por muito tempo. Eles não terão nenhum tipo de dificuldade de se adaptar nesse mundo novo, ou seja, a Microsoft atingiu seu objetivo.

Eu acredito que, eventualmente, esse modelo substitua o de add-ins, pelo menos o SharePoint-Hosted.

Uma das coisas que posso comentar, é que a Microsoft está investindo bastante nesse modelo. Recomendo, portanto, que o utilizem. Testem-no. Deem feedback. A Microsoft está focada em pegar tudo o que ela tem aprendido com a comunidade, principalmente no PnP e tentando trazer para o produto.

 

O que acham desse assunto? Comentem aí! 😀

 

Abraços!

 

Single Sign On utilizando Apache e Azure AD

Olá SharePointers,

Recentemente eu compartilhei no Github (https://github.com/RARomano/SSO-Apache-Azure) um repositório que mostra como fazer single sign on utilizando Azure AD, Apache e Open ID.

Utilizarei esse artigo para explicar um pouco mais sobre o conceito utilizado.

 

Open ID Connect

É um protocolo criado com base no OAuth para permitir que usuários se conectem, com segurança, à aplicações web.

Veja mais detalhes do fluxo de autenticação, na imagem abaixo:

 

Single Sign On

SSO é um conceito bastante comum em aplicações, consiste em utilizar somente um login para se autenticar em diversas aplicações diferentes. No nosso cenário, utilizaremos o login do Azure AD para se autenticar em aplicações customizadas.

Entretanto, como é um conceito comum e cada vez mais desejado, é normal encontrarmos em cada aplicação os códigos/parâmetros que permitem esse tipo de integração. 

Alguns links falando sobre SSO, com Azure AD:

 

Em um cenário corporativo, onde hospedamos várias aplicações distintas, é muito mais interessante termos essas configurações em um só lugar, centralizado e tirar essa responsabilidade das aplicações.

 

Apache

Apache é um servidor web, livre e disponível para vários sistemas operacionais, inclusive o windows. Segundo estatísticas, ele possui um domínio de cerca 60% do mercado. (https://news.netcraft.com/archives/2016/02/22/february-2016-web-server-survey.html)

Pensando nisso, resolvi utilizar o Apache nesse artigo.

Para realizar a autenticação, utilizei esse módulo do apache mod_auth_openidc (https://github.com/pingidentity/mod_auth_openidc).

Docker

Outra coisa que utilizei no meu exemplo foi o Docker, visando portabilidade e escalabilidade dos meus testes, por exemplo: instanciar 2 servidores apache distintos e testar se ao autenticar em uma aplicação de um servidor a outra também estaria autenticada.

 

Resultados Obtidos

  • Autenticação em aplicações distintas no mesmo servidor
  • Autenticação em aplicações em servidores diferentes
  • Ao autenticar em uma aplicação customizada, você não precisará se autenticar novamente para utilizar outros serviços da Microsoft, como o e-mail por exemplo
  • Ao se autenticar em outro serviço da Microsoft primeiro e depois acessar uma aplicação, você não precisará se autenticar novamente.

 

Eu, particularmente, tenho gostado bastante de testar esses cenários de interoperabilidade. Tenho buscado, cada vez mais, utilizar essas ferramentas para desenvolver os projetos em que atuo e tenho me surpreendido bastante com o resultado.

SharePoint WebHooks

Olá SharePointers,

Como eu postei recentemente aqui, a Microsoft tem apresentado uma série de novidades interessantes em toda a sua gama de produtos e não tem deixado faltar o nosso amado SharePoint.

Uma das features que devem ser anunciadas em breve para o SharePoint é o “SharePoint Webhooks“.

 

O que são os Webhooks?

Webhook é um conceito atual que está ganhando cada vez mais popularidade. Com ele é possível receber notificações em tempo real, sem ter que ir consultar no sistema fonte. É conhecido como Web Callback or HTTP Push API.

Muitos lugares já utilizam/disponibilizam esse tipo de APIs, como:

Github – envia notificações quando alguma ação acontece em um repositório. 

Foursquare – envia notificações quando um usuário faz um checkin em algum lugar.

 

SharePoint Webhooks

No SharePoint, a previsão é que este recurso esteja disponível, em modo General Preview, nesse trimestre e de forma final no final do ano.

 

Alguns podem perguntar: e os Remote Event Receivers? Quando escolher um ou outro?

Os Webhooks não suportarão os eventos do tipo “ING”, ou seja, você não será notificado enquanto uma ação está acontecendo, e consequentemente, não poderá interferir nelas. As notificações serão somente depois que a ação ocorrer.

Eles são mais seguros, nenhuma informação sobre o evento é passada durante a chamada.

Os Webhooks são mais “industry standard”, ou seja, os desenvolvedores de outras tecnologias já estão acostumados com esse padrão e será mais fácil a adoção.

Não será necessário utilizar serviços baseados em WCF, Serviços HTTP comuns já são suficientes.

 

Para mais informações, veja o video abaixo:

 

Referências:

https://dev.office.com/blogs/introducing-sharepoint-webhooks

https://blogs.technet.microsoft.com/stefan_gossner/2016/05/04/sharepoint-developer-announcement-the-sharepoint-framework-an-open-and-connected-platform/

https://github.com/SharePoint/sp-dev-samples

 

 

Migrando uma aplicação ASP.NET (MVC) para Provider-Hosted

Olá SharePointers,

Muitas vezes temos aplicações desenvolvidas em .NET mas precisamos colocá-las no SharePoint. Mesmo que no início, acabamos por não utilizar nada efetivo do SharePoint.

Avaliando as opções do Visual Studio, acabei passando, sem querer, por uma opção que me chamou muito a atenção: “Convert to App for SharePoint Project

 

Para chegar lá, segui o passo-a-passo abaixo:

1- Criar uma solução ASP.NET MVC

 

Com a solução criada, cliquei com o botão direito no projeto, fui em Convert e depois em Convert to App for SharePoint

Escolhi a URL do Site e depois marquei como SharePoint Online e pronto! Open-mouthed smile

A solução estava migrada automaticamente para mim…

 

Ao apertar o F5, para rodar a solução o Visual Studio subiu no SharePoint Online e apareceu a tela para confiar na aplicação

E após isso, estava rodando a partir da minha máquina local!

 

O processo é bem simples, e pode ajudar bastante no nosso dia-a-dia!

 

Abraços!

SharePoint Framework

Olá SharePointers,

Nas últimas semanas (talvez meses) podemos notar um movimento diferente da Microsoft. Para muitas pessoas, eu estou incluso, seria muito dificil acreditar em alguns movimentos que ela tomou como empresa.

Podemos citar algumas coisas, dentre tantas outras:

SQL Server no Linuxhttps://blogs.microsoft.com/blog/2016/03/07/announcing-sql-server-on-linux/

PowerShell no Linuxhttps://azure.microsoft.com/en-us/blog/powershell-is-open-sourced-and-is-available-on-linux/

.NET Open Source e com código disponível no GitHub (não é tão novidade assim, mas é bem interessante) – https://blogs.msdn.microsoft.com/dotnet/2014/11/12/net-core-is-open-source/ 

 

Com tantos movimentos, alguns podem ter pensado: “E o nosso querido SharePoint?”

 

Recentemente a Microsoft publicou no GitHub um repositório relacionado ao SharePoint (https://github.com/sharepoint).  Nesse repositório tem um guia detalhada de como você montar uma aplicação (add-in) utilizando os conceitos de mercado utilizados na maioria das tecnologias front-end:

          

 

Até pouco tempo atrás, quando a Microsoft “mudou” a forma, ou talvez o conceito, de como o desenvolvimento para SharePoint deveria ser, saindo do ASP.NET (Server-side) e indo para o client (front-end) e mexeu com o status-quo dos profissionais que estavam acostumados a fazer as coisas sempre de uma maneira já havia causado uma revolução no mercado.

Muitos não sabiam, ou não imaginavam como fariam as coisas que estavam acostumados…

Olhando agora para trás, depois de alguns anos que os add-ins (na época Apps) foram apresentados para nós como conceito, vemos com um olhar diferente. Eu, pelo menos, evito ao máximo soluções Server-Side para SharePoint. Aliás, nem consigo lembrar direito a última vez que utilizei uma solução assim para fazer webparts.. Claro que existem situações e regras de negócio que vão forçar a usar uma solução que tenha código server-side mas, ainda assim, provider-hosted.

No começo, me pegava pensando… “Vou fazer sempre Farm Solutions e, se não houver outra maneira, utilizo os Add-ins”..  E hoje, acontece justamente o contrário…. Só utilizo Farm Solutions em último caso.. Só de pensar no deploy, no tempo de instabilidade da farm acabo desistindo!

Acredito que isso tenha acontecido com a maioria de vocês!

 

Voltando ao assunto do post, a Microsoft em uma tentativa de aproximar ainda mais os desenvolvedores de outras tecnologias, deu mais um passo interessante..

Convido vocês a olharem com carinho esses links: https://github.com/SharePoint/sp-dev-docs, https://github.com/SharePoint/sp-dev-docs/wiki/Setup-your-machine e https://github.com/SharePoint/sp-dev-docs/wiki/HelloWorld-WebPart.

Vocês serão apresentados a alguns conceitos novos, que falarei em outras oportunidades com mais detalhes: “Client WebParts” e “SharePoint Workbench”.

Por ora, deixo um vídeo mostrando essas novas e fantásticas ferramentas:

 

Abraços!

Registrando um Add-in e concedendo permissões utilizando PowerShell

Olá SharePointers,

Muitas vezes é necessário criarmos Add-ins no SharePoint. Entretanto, nem sempre é possível utilizar o modelo SharePoint-hosted.

Para facilitar o processo, podemos utilizar um script powershell para criar um Client ID e fazer o deploy do .app.

$targetWeb = “https://site.sharepoint.com”
$appDisplayName = “App”
$clientID = [Guid]::NewGuid().ToString()

$authRealm = Get-SPAuthenticationRealm -ServiceContext $targetWeb
$AppIdentifier = $clientID + “@” + $authRealm

Write-Host “Creating the new app principal registration…”
Register-SPAppPrincipal -NameIdentifier $AppIdentifier -Site $targetWeb -DisplayName $appDisplayName
$appPrincipal = Get-SPAppPrincipal -Site $targetWeb -NameIdentifier $AppIdentifier

write-host “Display Name:” $appPrincipal.DisplayName
write-host “Name Identifier:” $appPrincipal.NameIdentifier
write-host “ClientID:” $clientID

Write-Host “Uploading the app…”
$spapp = Import-SPAppPackage -Path D:\MyApp.app -Site $targetWeb –Source ObjectModel
$instance = Install-SPApp -Web $targetWeb -Identity $spapp

Write-Host “Granting permissions…”
$web = Get-SPWeb $targetWeb
 
Set-SPAppPrincipalPermission -Site $web -AppPrincipal $appPrincipal -Scope SiteCollection -Right FullControl

$web.Dispose()

Esse script substitui aquelas operações que temos que fazer nas páginas [SiteUrl]/_layouts/AppRegNew.aspx e [SiteUrl]/_layouts/AppInv.aspx.

image

image

 

Esse script funciona tanto para SharePoint On-Premises quanto para SharePoint Online.

 

Referências

http://www.manasbhardwaj.net/powershell-alternative-sharepoint-2013-appregnew-aspx/

SharePoint 2016 RTM

Olá SharePointers,

Para quem não está acompanhando o dia-a-dia do time de produto do SharePoint, foi anunciado (14/03) que a versão RTM do SharePoint está disponível para download.

O post no blog oficial está aqui: https://blogs.office.com/2016/03/14/sharepoint-2016-rtm-and-the-future-of-sharepoint-event/

Para baixar o trial, utilize esse link: http://aka.ms/GetSharePoint2016

 

Aproveito a oportunidade para reiterar a importância de seguir o blog oficial e ficar por dentro das novidades Open-mouthed smile

 

Abraços!

SharePoint 2016 Release Candidate disponível

Olá SharePointers,

Não sei se todos estão acompanhando a evolução do SharePoint 2016, mas o time de produto anunciou no dia 20/01/2016 que a versão RC do SharePoint estava disponível para download https://blogs.office.com/2016/01/20/sharepoint-server-2016-and-project-server-2016-release-candidate-available/.

Notem que essa versão também funcionará como um update do Beta 2, então quem tinha essa versão instalada pode fazer o update diretamente. Open-mouthed smile

Link para download: https://www.microsoft.com/en-us/download/details.aspx?id=50737

 

Atenção:

  • O SharePoint 2016 continuará a suportar o InfoPath Forms Services. O InfoPath Form Services será suportador por toda a duração do ciclo de suporte do SharePoint 2016, ou seja, até 2026.
  • InfoPath Forms Services no Office 365 continuará a ser suportado.
  • InfoPath 2013 e SharePoint Designer 2013 serão as últimas versões desses produtos.

 

Abraços!

Request Digest no SharePoint

Olá SharePointers,

Hoje vou falar um pouco sobre o RequestDigest. Para quem está acostumado a trabalhar com códigos client-side, com certeza já teve que usá-lo para criar itens ou outros objetos no SharePoint.

Toda vez que desejamos alterar algo no SharePoint, precisamos passá-lo no cabeçalho do request para que a operação seja concluída com sucesso. Para evitar ataques, o SharePoint gera um token específico para o usuário atual, site atual e por um tempo específico. Esse token é conhecido como Request Digest ou Form Digest.

Sendo assim, quando for executar uma chamada basta pegar o valor do RequestDigest e colocar no cabeçalho X-RequestDigest, como demonstrado abaixo:

image

Porém, se o usuário abrir a página e deixar aberta, sair do computador por um tempo e depois tentar clicar em algum botão, pode ser que o tempo de duração do token já tenha expirado. 

Para resolver esse problema, existe uma função Javascript que gera um token novo para você: UpdateFormDigest.

Para facilitar o entendimento, criei uma função que chamei de getRequestDigest que sempre me retorna o valor do token e, caso esteja vencido, ele renova o token e me retorna o valor atualizado.

image

e utilizo, onde precisar, essa função.

image

 

Abraços!

Como pegar os anexos de um item de lista através do Search do SharePoint

Olá SharePointers,

Eu estava com a necessidade de mostrar se um item (que era retornado pelo search) tinha anexo ou não. Não encontrei uma propriedade managed ou crawled que pudesse retornar o que eu esperava e estava quase perdendo as esperenças disso funcionar.

Depois de algumas pesquisas, encontrei uma referência a uma propriedade LinkOfficeChild que supostamente deveria trazer o resultado que eu esperava.

Para confirmar, busquei essa propriedade na lista de Managed Properties existente e nenhum resultado apareceu.

image

Abri o Search Query Tool para testar se mesmo assim essa propriedade não era retornada e, para minha surpresa, ela É!

image

 

Referência

http://www.techmikael.com/2014/04/solution-to-displaying-attachments-for.html