Arquivo da tag: SharePoint 2013

Criação de sites Self-Service em ambientes híbridos no SharePoint Server 2013

Olá SharePointers,

Conforme anunciado pelo Bill Baer, agora é possível habilitar a criação self-service de sites em ambientes híbridos no SharePoint 2013, ou seja, você pode direcionar os usuários a utilizarem a página de criação de sites do Office 365 ao invés da on-premises e criar um grupo no Office 365.

Essa opção está disponível para administradores, na página de Self-service Site Collection Management (Central Administration).

Quando o usuário clicar em criar um site e essa opção estiver habilitada, ele irá para a página abaixo (/_layouts/15/scsignup.aspx)

Para os usuários restantes, os que não estão sincronizados com a nuvem ou não estão na audiência desejada, continuarão utilizando a versão on-premises.

Atenção: essa funcionalidade foi incluída no Public Update de Março de 2017. Faça o download utilizando esse link: https://technet.microsoft.com/en-us/library/mt715807(v=office.16).aspx#BKMK_2013

Veja mais em: https://techcommunity.microsoft.com/t5/SharePoint-Blog/Hybrid-Self-Service-Site-Creation-now-available-for-SharePoint/ba-p/52977

Muito interessante, não acham?

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!

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!

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

SharePoint Workflows–Acessando dados de um outro site

Olá SharePointers,

Hoje vou falar de uma dica muito útil: como acessar dados de um outro site, utilizando workflows. Nesse exemplo, acessarei uma lista do site pai.

O Workflow manager veio para simplificar a forma como os workflows são feitos. De forma declarativa, ficou bem mais simples.

Internamente,  a engine de workflows converte todas as ações em chamadas REST. Resumindo, tudo o que podemos fazer utilizando workflows, podemos fazer utilizando as APIs REST disponíveis.

Introdução

O Workflow roda como um add-in. Dessa forma, ao criar um workflow, ele é autorizado a executar naquele site. Mas, você pode dar permissões para o Add-in e rodar algumas ações em contexto app-only.

Para rodar o exemplo abaixo, é necessário ativar uma feature (de Web) no site que o workflow será criado:

image

Após isso, vá em Configurações do Site e clique  em Permissões de Aplicativo de Site

image

Copie o Id do aplicativo

image

Abra o outro site que deseja consultar informações e abra a página http://[site]/_layouts/15/appinv.aspx

Cole o Id do aplicativo e clique em pesquisa.

image

Cole o xml abaixo no último campo e clique em criar.

Atenção: O xml abaixo está dando permissão Manage em uma lista que você selecionará na próxima tela. Altere o xml conforme a sua necessidade de negócio.

<AppPermissionRequests AllowAppOnlyPolicy="true"> <AppPermissionRequest Scope="http://sharepoint/content/sitecollection/web/list" Right="Manage" /> </AppPermissionRequests>

Aparecerá uma tela para você confiar no Workflow e escolher a lista que deseja extrair informações.

image

 

Workflow

Crie o workflow e adicione um App Step.

image

Coloque uma ação Build Dictionary

Coloque duas entradas no Build Dictionary: Accept e Content-Type com o mesmo valor

image

e outra Call HTTP Web Service

image

Faça a sua chamada REST, clique nas propriedades da ação REST

image

e configure o RequestHeaders para ter o valor da variável que você criou no Build Dictionary

image

Pegue o valor da resposta e utilize-o conforme desejar.

image

 

Conclusão

Demonstrei como acessar dados, via REST, de outro site utilizando o workflow manager. Muitas vezes, por questões de organização e estruturação dos dados, precisamos acessar dados que não estão no site que estamos trabalhando e as APIs REST nos permitem isso de maneira bem simples. Entretanto, pode ser um pouco complicado fazer o passo-a-passo para fazer com que o mesmo processo funcione dentro do workflow.

 

Abraços Smile

Definir tamanho máximo por extensão no SharePoint 2013

Olá SharePointers,

Em alguns cenários, precisamos definir o tamanho máximo dos arquivos que podem ser armazenados em um site no SharePoint.

Para realizar essa configuração, você pode ir na Central Admin, Clicar em Manage Web Applications.

image

Escolha sua Aplicação e clique em General Settings e depois em General Settings.

 

image

 

Procure pelo item Maximum Upload Size. Nesse item, você poderá definir o tamanho máximo (em MB) dos arquivos que serão armazenados no SharePoint.

 

image

 

 

Entretanto, as vezes precisamos ter exceções para algum tipo de extensão ou até mesmo configurar valores diferentes para cada tipo de arquivo.

Para fazer isso, você pode fazer por PowerShell:

1 $webApp = Get-SPWebApplication "[Site URL]" 2 $webApp.MaximumFileSizePerExtension

 

Rodando o código abaixo, você verá que nativamente o SharePoint já tem uma extensão configurada como exceção.

Para arquivos do OneNote, o limite default é de 1 GB.

image

Para adicionar uma extensão, você pode usar o código abaixo:

1 $webApp = Get-SPWebApplication "[Site Url]" 2 $webApp.MaximumFileSizePerExtension.Add("WMV",20) 3 $webApp.Update()

Criar uma HighTrust SharePoint App

Olá SharePointers, 

Nesse post vou falar como criar um High-Trust SharePoint App.

Antes de mais nada, é importante entender o seguinte:

  • High-Trust não é igual a Full-Trust.
  • Esse tipo de App não pode ser instalado no SharePoint Online.
  • Esse tipo de App utiliza um Certificado para estabelecer a confiança entre o SharePoint e a Web Application do App.

 

Quando você cria um “Low Trust” App, o Azure ACS serve como servidor de Autorização. Mas, quando você está nesse modelo de HighTrust, o próprio App é o servidor de autorização.

 

Basicamente, o processo é o seguinte:

  1. O usuário acessa o SharePoint
  2. O servidor do SharePoint responde com a página, caso o usuário tenha acesso
  3. O Usuário clica no App.
  4. O App se comunica com o SharePoint para ver se um confia no outro.
  5. Caso exista a confiança entre eles, o App é autorizado a acessar o SharePoint
  6. A resposta da transação é apresentada para o usuário

 

Para visualizar o passo-a-passo, acessem o projeto no GitHub (onde o código-fonte está disponível): https://github.com/RARomano/HighTrustSharePointApps

 

Referências:

https://msdn.microsoft.com/en-us/library/office/fp179901.aspx

https://msdn.microsoft.com/en-us/library/office/jj945118.aspx

http://blogs.msdn.com/b/shariq/archive/2013/05/07/how-to-set-up-high-trust-apps-for-sharepoint-2013-amp-troubleshooting-tips.aspx

https://msdn.microsoft.com/en-us/library/office/dn790706.aspx