Rodrigo Romano – MVP SharePoint Server

Registros de um Especialista SharePoint :)

Windows 10 – Technical Preview

leave a comment »


Olá SharePointers,

Para quem não está muito antenado com as novidades, hoje (01/10) foi liberado para o público em geral os testes do Windows 10 – Technical Preview. Para quem quiser fazer o download, está disponível aqui: http://windows.microsoft.com/pt-br/windows/preview-download

ATENÇÃO: Para quem quiser instalar, lembre-se de fazer um backup e pontos de restauração para voltar a máquina ao estado original.

Como um “Early Adopter”, instalei em minha máquina…. Confiram o resultado:

A tela de instalação é semelhante à do Windows 8.1

image

Achei bem interessante à interligação com o OneDrive. Tudo nativo, sem instalar nenhum utilitário.

image

 

Esse é o seu desktop, logo após a instalação:

image

Menu Iniciar

image

 

image

Janelas sem bordas, menu iniciar expandido:

image

Suporte à multiplos desktops

image

E o mais importante…… kkkk CTRL+C e CTRL+V dentro do command e do powershell 😀

 

O que acharam?

Written by Rodrigo Romano

October 1, 2014 at 3:02 pm

MVP Showcast – 2014

leave a comment »


Olá SharePointers,

Anualmente acontece uma série de Webcasts realizados por MVPs brasileiros que abordam assuntos diversos de suas especialidades. São 3 trilhas, infra-estrutura, desenvolvimento e produtividade.

O conteúdo das palestras são bem interessantes, vale a pena conferir. O site do evento é: https://mvpshowcast.azurewebsites.net.

Eu participarei desse evento fazendo um webcast junto com o Carlos Citrangulo falando sobre produtividade com o SharePoint 2013. Inscrevam-se: https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032594716&Culture=pt-BR&community=0

Abraços!

Written by Rodrigo Romano

August 26, 2014 at 10:53 am

Posted in Dicas, SharePoint

Tagged with , , ,

SharePoint 2013: Shredded storage

leave a comment »


Olá SharePointers,

Hoje vou falar um pouco sobre Shredded storage e como o SharePoint se comporta utilizando esse recurso.

Antes de mais nada, vamos ao significado do verbo “Shred” que significa cortar, despedaçar, retalhar. Trazendo para o mundo do SharePoint, Shredded storage é uma grande melhoria na gestão de objetos binários (os “BLOBs” – que basicamente são arquivos como Planilhas do Excel, Documentos do Word, Vídeos, etc.).

Quem trabalha com o SharePoint desde as versões anteriores (pode ser a 2010 :D) sabe que versionamento, por exemplo, era um grande problema quando o ponto de vista era armazenamento. A cada alteração no documento, o SharePoint realizava uma cópia completa do arquivo e armazenava isso no banco de dados.

Agora, imaginem o seguinte cenário: Supondo que em arquivo de 10MB seja alterado 5 vezes por dia, logo, consumirá 50MB de espaço por dia.

É importante ressaltar que os softwares client da Microsoft (leia: o Pacote Office – Word, Excel, PowerPoint, etc.) já possuiam a tecnologia para que quando um arquivo aberto do SharePoint fosse salvo, somente o diferencial era enviado pela rede (over-the-wire, de volta ao SharePoint) e o SharePoint fazia o trabalho de fazer um “Merge” do arquivo original com o diferencial e salvar esse arquivo inteiro novamente.

O que mudou?

Com o SharePoint 2013 e a criação do Shredded storage (que utiliza o Cobalt –Sincronização de arquivos via SOAP – HTTP), esse BLOB que antes era armazenado em 1 linha do banco de dados SQL Server, agora é dividido em várias linhas. Quando um usuário faz a alteração em algum arquivo, o SharePoint é capaz de identificar qual registro foi alterado e alterar somente esse pedaço – bem reduzido – do arquivo, reduzindo o overhead de utilização de disco, estimada em 2x.

Isso funciona somente com arquivos do Office?

Não. A grande sacada é que funciona com qualquer tipo de arquivo. Não precisa ser do Office e nem muito menos a versão mais atual do Office. Qualquer arquivo se beneficiará dessa tecnologia.

 

Como ficou o armazenamento do BLOB?

Até a versão 2010, os documentos eram armazenados da seguinte forma: os metadados (propriedades do arquivo e do formato) e o stream contendo a representação binária do arquivo.

Com o SharePoint 2013, isso mudou! Temos uma tabela adicional no banco de dados de conteúdo (DocStreams) para armazenar cada pedaço do BLOB do arquivo e, ainda, temos um cache para otimizar a leitura do arquivo.

image

 

Para mais detalhes sobre o assunto, consultem as referências abaixo:

http://blogs.technet.com/b/wbaer/archive/2012/11/12/introduction-to-shredded-storage-in-sharepoint-2013.aspx

http://www.metalogix.com/blog/blog-article/13-03-18/Dispelling_the_Myths_of_Shredded_Storage_in_SharePoint_2013

http://www.microsoft.com/en-us/download/details.aspx?id=39719

Written by Rodrigo Romano

August 25, 2014 at 9:14 am

Office 365 + Salesforce

leave a comment »


Olá SharePointers,

Para quem ainda não sabe, a Microsoft investe cada vez mais em integração de forma a consolidar a sua plataforma de nuvem como sólida e líder de mercado.

A plataforma Office 365 (SharePoint, Exchange, Lync e outros produtos – http://office.microsoft.com/en-001/business/what-is-office-365-for-business-FX102997580.aspx) assume um papel interessante no mercado e sua oferta e funcionalidades fazem com que o produto seja cada vez mais lúder de mercado.

Gartner_Social_Software_Workplace.png

Magic Quadrant for Social Software in the Workplace

Além disso, vimos “recentemente” a aquisição e integração do Yammer com essa plataforma, adicionando recursos ainda mais intereressantes para o usuário final.

Não bastasse isso, foi anunciado há algum tempo uma integração forte com o Salesforce, vejam o anúncio aqui: http://www.microsoft.com/en-us/news/press/2014/may14/05-29mayannouncementpr.aspx.

Essa notícia não é propriamente nova, mas como muitos desconhecem achei que valia a pena escrever um post e comentar sobre o assunto.

O que vocês acham disso?

 

Abraços 🙂

Written by Rodrigo Romano

August 22, 2014 at 2:59 pm

SharePoint Apps: Como utilizar o People Picker?

leave a comment »


Olá SharePointers,

Hoje vou falar sobre como utilizar o People Picker quando estamos desenvolvendo uma app para SharePoint.

O primeiro passo, é carregar os scripts que serão utilizados (ver imagem abaixo) e colocar a div quer será utilizada para criação do controle dinamicamente.

image

 

Após a criação dos controles acima, basta colocar o código abaixo em um arquivo .js e adicioná-lo a página como referência que o People Picker funcionará perfeitamente.

 

// Run your custom code when the DOM is ready. $(document).ready(function () { // Specify the unique ID of the DOM element where the // picker will render. initializePeoplePicker('peoplePickerDiv'); }); // Render and initialize the client-side People Picker. function initializePeoplePicker(peoplePickerElementId) { // Create a schema to store picker properties, and set the properties. var schema = {}; schema['PrincipalAccountType'] = 'User,DL,SecGroup,SPGroup'; schema['SearchPrincipalSource'] = 15; schema['ResolvePrincipalSource'] = 15; schema['AllowMultipleValues'] = true; schema['MaximumEntitySuggestions'] = 50; schema['Width'] = '280px'; // Render and initialize the picker. // Pass the ID of the DOM element that contains the picker, an array of initial // PickerEntity objects to set the picker value, and a schema that defines // picker properties. this.SPClientPeoplePicker_InitStandaloneControlWrapper(peoplePickerElementId, null, schema); } // Query the picker for user information. function getUserInfo() { // Get the people picker object from the page. var peoplePicker = this.SPClientPeoplePicker.SPClientPeoplePickerDict.peoplePickerDiv_TopSpan; // Get information about all users. var users = peoplePicker.GetAllUserInfo(); var userInfo = ''; for (var i = 0; i < users.length; i++) { var user = users[i]; for (var userProperty in user) { userInfo += userProperty + ': ' + user[userProperty] + '<br>'; } } $('#resolvedUsers').html(userInfo); // Get user keys. var keys = peoplePicker.GetAllUserKeys(); $('#userKeys').html(keys); // Get the first user's ID by using the login name. getUserId(users[0].Key); } // Get the user ID. function getUserId(loginName) { var context = new SP.ClientContext.get_current(); this.user = context.get_web().ensureUser(loginName); context.load(this.user); context.executeQueryAsync( Function.createDelegate(null, ensureUserSuccess), Function.createDelegate(null, onFail) ); } function ensureUserSuccess() { $('#userId').html(this.user.get_id()); } function onFail(sender, args) { alert('Query failed. Error: ' + args.get_message()); }

Bem simples, não acharam?

 

Abraços! 😀

 

Referência

http://msdn.microsoft.com/en-us/library/jj713593.aspx

Written by Rodrigo Romano

August 11, 2014 at 9:47 am

Troubleshooting SharePoint/Office365: Sideloading of apps is not enabled on this site

leave a comment »


Olá SharePointers,
Estava desenvolvendo uma SharePoint Hosted app para o Office 365 e, para minha surpresa, apareceu o erro abaixo.
Esse erro acontecia quando quando tentava fazer o deploy via Visual Studio.

 

Para resolver esse erro, basta rodar o script que está disponível nesse link: http://1drv.ms/1qDs0oy

 

Referência:

http://blogs.msdn.com/b/officeapps/archive/2013/12/10/enable-app-sideloading-in-your-non-developer-site-collection.aspx

Abraços! 😀

Written by Rodrigo Romano

August 2, 2014 at 12:28 pm

Troubleshooting: Failed to call GetTypes on assembly Microsoft.Office.TranslationServices

leave a comment »


 

Olá SharePointers,

Hoje peguei um cenário “diferente”.

Após aplicar o Cumulative Update de Março/2013 no SharePoint 2013 RTM, todas as vezes que tentava rodar o Configuration Wizard aparecia o erro abaixo:

Failed to initial the upgrade sequence.

An exception of type Microsoft.SharePoint.Upgrade.SPUpgradeException was thrown. Additional exception information: Exception of type ‘Microsoft.SharePoint.Upgrade.SPUpgradeException’ was thrown.

Fui no REGEDIT e alterei o valor da chave SetupType para CLEAN_INSTALL. O caminho da chave é: "HKLM\Software\Microsoft\Shared Tools\Web Server Extensions\14.0\WSS".

Após esse processo, rodei novamente o erro abaixo apareceu:

image

 

Após verificar o Cumulative Update, identifiquei que o que foi utilizado era para SharePoint Foundation e não SharePoint Server, o que fez com que algumas dlls não estivessem mais disponíveis.

 

Abraços 😀

Written by Rodrigo Romano

July 30, 2014 at 3:54 pm

Microsoft Curah

leave a comment »


Olá SharePointers,

Hoje quero falar sobre uma ferramenta muito útil, o Curah.

O Curah tem o objetivo de ajudar as pessoas encontrarem informações úteis de forma simples. Basicamente, é uma coletânea de links, com informações relevantes, registrados por experts de uma certa área de atuação (Ex: SharePoint, Segurança, System Center e por aí vai).

Juntem-se a nós e começem a fazer suas publicações. É simples, veja o passo-a-passo abaixo:

  • Cadastre-se no site http://curah.microsoft.com usando sua conta Microsoft (LiveID). O processo é muito rápido e leva apenas 1 minuto.
  • Coloque os seus links favoritos e adicione seus comentários sobre eles. Explique o motivo do link ser importante.

 

Eu já comecei a preencher os meus links. Comecei com o conteúdo de um artigo que escrevi falando sobre algumas ferramentas úteis para desenvolvedores: http://curah.microsoft.com/74533/ferramentas-para-desenvolvedores-sharepoint.

Participem 😀

Written by Rodrigo Romano

July 15, 2014 at 11:16 am

Posted in Dicas, SharePoint

Tagged with

SharePoint e Javascript – Amor ou ódio?

leave a comment »


Olá SharePointers,

Javascript e suas bibliotecas assumem um papel cada vez mais relevante na vida de um desenvolvedor moderno. É comum encontrar pessoas que digam que atualmente é uma das “linguagens” mais importantes para um desenvolvedor de SharePoint. Sei que esse ponto é controverso, mas esse é um tema que está cada vez mais presente no nosso dia-a-dia.

Notamos que a Microsoft fez um grande esforço para “mudar” um pouco a nossa cabeça e colocou no SharePoint 2013 o conceito de Apps, que, de uma forma bem simplista, é HTML e JavaScript.

Para quem ainda não está familiarizado, David Mann (SharePoint MVP – EUA) fez um curso muito interessante no Pluralsight: http://pluralsight.com/training/Courses/TableOfContents/developing-sharepoint-2013-javascript.

O SharePoint contém uma quantidade enorme de funções prontas que podem ser reutilizadas para nos ajudar durante o desenvolvimento de alguma solução. Algumas delas não estão documentadas no MSDN.

Para ajudar no desenvolvimento, existem alguns plugins para o Visual Studio. Dentre eles, recomendo esse aqui: http://visualstudiogallery.msdn.microsoft.com/288a2b0f-1357-47b4-8215-1134c36bdf30

Voltando ao código, vou citar algumas funções que podem ajudar bastante no desenvolvimento e não estão documentadas em lugar nenhum:

  • url = SP.Utilities.UrlBuilder.replaceOrAddQueryString(url, key, value): Esse método recebe uma URL e modifica ou inclui um parâmetro na QueryStrig. O Retoro é a URL modificada.
  • url = SP.Utilities.UrlBuilder.removeQueryString(url, key): Esse método remove um parâmetro da query string (e seu valor) de uma URL.
  • url = SP.Utilities.UrlBuilder.urlCombine(url1, url2): Combina duas URLs e garante que não tenha nenhuma “/” redundante.

 

O ideal, antes de sair desenvolvendo, é pensar se o que precisamos fazer não existe no SharePoint. E, se existir, tentar entender como ele realiza tal operação e fazermos do mesmo jeito.

Referências Adicionais

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

http://chuvash.eu/2012/01/24/parameterize-an-javascript-object-and-create-url/

http://www.wictorwilen.se/Post/Working-with-URLs-in-SharePoint-2010-JavaScripts.aspx

 

Abraços!

Written by Rodrigo Romano

July 11, 2014 at 9:32 am

SharePoint: Alterações no banco de dados

leave a comment »


Olá SharePointers,

É muito comum ouvirmos falar que qualquer alteração nos bancos de dados do SharePoint resultam em perda da garantia do produto.

Mas, já pararam para pensar o que realmente acontece? Quais mudanças implicam na perda da garantia? O que deve ser feito em caso de alguém descobrir essas alterações?

Vamos lá:

Primeiro, vamos identificar o que não é suportado:

  • Adicionar triggers no banco de dados
  • Adicionar novos índices ou alterar os existentestables
  • Adicionar, modificar ou deletar qualquer chave primária ou estrangeira
  • Modificar ou deletar stored procedures
  • Chamar stored procedures diretamente, com exceção das descritas em SharePoint Protocols documentation

    (http://msdn.microsoft.com/en-us/library/cc339475.aspx)

  • Adicionar novas stored procedures
  • Adicionar, modificar ou deletar qualquer dado de qualquer tabela referente ao produto
  • Adicionar, modificar ou deletar qualquer coluna nas tabelas do produto
  • Fazer qualquer modificação ao schema do banco de dados
  • Adicionar tabelas em qualquer um dos bancos do produto
  • Trocar o collation do banco de dados
  • Rodar a stored procedure DBCC_CHECKDB WITH REPAIR_ALLOW_DATA_LOSS (Entretanto, rodar DBCC_CHECKDB WITH REPAIR_FAST e REPAIR_REBUILD é suportado, porque esses comandos só atualizam os índices do banco associado.)
  • Habilitar SQL Server change data capture (CDC)
  • Habilitar SQL Server transactional replication
  • Habilitar SQL Server merge replication
  •  

    Caso seja descoberto alguma dessas modificações (durante uma call com o suporte da Microsoft) você deverá fazer uma das ações abaixo:

    • Fazer um restore do banco de dados para a última versão que não contém essas modificações
    • Roll back em todas as modificações do banco de dados

     

    Embora todas essas modificações se refiram a alterações, operações de leitura também são proibidas.

    Qualquer operação de leitura programaticamente ou manual pode causar locks dentro do SQL Server e, com isso, resultar em queda de performance. Sendo assim, qualquer leitura ao banco de dados que não seja utilizando um artefato providenciado pelo time de desenvolvimento do SharePoint ou pelo time de suporte é considerado “não suportado” e são barreiras para que o time de suporte continue te atendendo.

    Para quem quiser ler mais sobre o assunto, acesse esse link: http://support.microsoft.com/kb/841057/en-us

    Abraços 😀

    Written by Rodrigo Romano

    July 10, 2014 at 11:41 am