Arquivo da tag: Desenvolvimento

Monitorando uma aplicação Node JS com o Application Insights

Olá SharePointers,

Com todas as opções de integrações que o SharePoint fornece, podemos construir ferramentas que consomem dados utilizando qualquer linguagem. Eu mesmo já compartilhei vários exemplos que utilizam o Node JS para consumir os dados do SharePoint de alguma forma, seja diretamente ou através de webhooks.

Para quem tem acompanhado a evolução do Azure, deve ter visto o lançamento do recurso Application Insights. Essa ferramenta está disponível há algum tempo, mas, recentemente a Microsoft tem disponibilizado SDKs para integrarmos o Application Insights com linguagens fora do Stack Microsoft: Node JS e Java.

Do jeito que a Microsoft projetou o SDK, a sua utilização é tão simples como se estivéssemos utilizando .NET.

Para saber como implementar em sua aplicação, eu publiquei um exemplo no Github que mostrará o passo-a-passo da implementação: https://github.com/RARomano/ApplicationInsights.NodeJS

Abraços!

SharePoint Framework – Quick Samples

Olá SharePointers,

Criei um repositório no Github onde colocarei alguns exemplos rápidos, mas que podem ajudar bastante no nosso dia-a-dia.

O link do repositório é: https://github.com/RARomano/SharePointFramework-Samples – Se gostarem, cliquem no ícone Star no Github 😀

O primeiro exemplo, mostra como carregar CSS de um CDN, o que acredito que será muito útil para todo mundo.

Para quem quiser o Link direto dessa dica é esse aqui: https://github.com/RARomano/SharePointFramework-Samples/tree/master/AddCustomStyles

 

Grande Abraço!

SharePoint Framework – Overview

Olá SharePointers,

O SharePoint framework, atualmente em General Availability (https://github.com/SharePoint/sp-dev-docs/wiki/Release-Notes-GA), está pronto para utilizado e precisamos ter algumas coisas em mente:

Contexto de execução

Diferentemente do que acontece com os Add-ins, as webparts criadas utilizando esse framework rodam no contexto da página. Ou seja, não roda dentro de um iFrame.

Isso é muito importante!

Quando instalávamos um add-in, um site isolado era provisionado e a sua aplicação residia lá. No SharePoint Online por exemplo, a URL era: https://[tenant]-[id].SharePoint.com.

Mesmo quando você utilizava uma App Part para colocar o seu App dentro do contexto do seu site principal, internamente isso acontecia dentro de um iFrame e, com isso, a aplicação não conseguiria fazer mal ao seu site principal. (Lembre-se que ao instalar o Add-in, você precisa aceitar as permissões que são solicitadas).

Em uma Webpart do SharePoint Framework, por outro lado, roda diretamente no site, no DOM da página e com as permissões do usuário atual. Apenas para deixar claro, tudo o que o usuário logado tiver permissões para fazer, o código também terá permissões para fazer.

Utilização de Bibliotecas de Terceiros

É muito comum utilizarmos bibliotecas de terceiros em nossas aplicações. E, as vezes, utilizamos essas bibliotecas diretamente de CDNs.

Como eu disse no tópico anterior, como essas WebParts rodam diretamente no contexto do usuário, é preciso ter um critério muito grande em relação aos scripts que for utilizar, caso sejam maliciosos, eles podem causar problemas – fica aí um ponto de atenção para os administradores do portal.

Framework de Desenvolvimento

Uma coisa muito interessante desse modelo é que você tem a liberdade de trabalhar da forma como achar melhor.

Você pode utilizar Angular, React, Knockout, Handlebars ou seja lá o que for mais confortável para você. Isso é um grande passo da Microsoft, nos dá liberdade como desenvolvedores e permite trabalharmos da forma como nosso time estiver mais confortável.

 

E aí pessoal, compartilhem suas experiências com o esse novo framework. Estão utilizando?

Abraços! 😀

“Image Renditions” no SharePoint com Cloudinary

Olá SharePointers, 

O SharePoint possui vários recursos interessantes e, um deles, é o Image Renditions. 

Image Renditions faz parte do SharePoint enterprise e, com ele, você consegue subir uma imagem em alta resolução e fazer com que o SharePoint crie versões alternativas conforme você precisa delas.

Por exemplo, você sobe uma imagem com resolução 1080×1024, mas em algum lugar do site, você tem um espaço de 300×200 para exibir a mesma. O que muitos acabam fazendo é carregar a imagem inteira e formata por CSS. Mas, fazendo dessa forma, o peso de carregar a imagem inteira e transferi-la para o cliente é o mesmo, não importando o tamanho que a mesma está sendo exibida.

Com esse recurso, você melhora muito o carregamento da sua página, pois você transfere exatamente o tamanho que será utilizado.

Seguindo o passo-a-passo abaixo, você configura os renditions em um site:

E quando for utilizar as imagens, você pode utilizar de uma das formas a seguir:

Passando o tamanho desejado

<img src="/sites/pub/Assets/Lighthouse.jpg?Width=400&Height=200" />

 Ou passando o ID do rendition

<img src="/sites/pub/Assets/Lighthouse.jpg?RenditionID=2" />

Dessa forma, a imagem vem do SharePoint da forma que deverá ser utilizada no conteúdo, reduzindo tráfego de rede adicional e acelerando o carregamento da sua página.

Entretanto, esse recurso só está disponível no SharePoint ENTERPRISE.

Infelizmente, nem todas as empresas possuem essa versão e com o surgimento (e consolidação) cada vez mais de serviços baseados em nuvem, muitas tarefas podem nos auxiliar grandemente.

Um desses serviços é o Cloudinary

Esse serviço é simplesmente fantástico! E o melhor, é gratuito! Existem planos que atendem a diversas necessidades, mas a versão gratuita, que é completamente funcional, atende bem na maioria dos casos.

Veja alguns casos que você pode fazer com esse serviço:

Imagem Original

 

Imagem centralizada no rosto e arredondada

(http://res.cloudinary.com/demo/image/upload/w_400,h_400,c_crop,g_face,r_max/w_200/lady.jpg)

Lembre-se que essa imagem é transformada “on-the-fly”, ou seja, você pode alterar os parâmetros conforme quiser para obter resultados diferentes.

 

Imagem centralizada no rosto e arredondada (preto-e-branco)

(http://res.cloudinary.com/demo/image/upload/w_400,h_400,c_crop,g_face,r_max/w_200/e_grayscale/lady.jpg)

Notem que nesse caso, só adicionei o e_grayscale na url para aplicar uma transformação adicional na mesma imagem.

 

As possibilidades são infinitas! Leiam a documentação para mais detalhes. 😀

Além disso tudo, criaram APIs para todas as principais linguagens!

 

Espero que gostem! 

Abraços!

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!

 

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.

 

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

 

Referências

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

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!