Rodrigo Romano – MVP SharePoint Server

Registros de um Especialista SharePoint :)

Posts Tagged ‘SharePoint 2013

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

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

SharePoint 2013: Service Pack 1 Liberado

leave a comment »


Olá SharePointers,

Recentemente fiz um post falando para não instalar o Service Pack 1 do SharePoint 2013 até futuros pronunciamentos da Microsoft.

Pois é! Esse dia chegou.

A boa notícia é que quem já havia instalado o SP1 não enfrentará muitos problemas para corrigir o seu ambiente, basta baixar o “novo” SP1 e instalar em seu ambiente. 😀

Abaixo, a tabela com os links para os KBs.

SharePoint Foundation http://support.microsoft.com/kb/2880551
SharePoint Server http://support.microsoft.com/kb/2880552
Project Server http://support.microsoft.com/kb/2880553
SharePoint Server Language Pack http://support.microsoft.com/kb/2880554
SharePoint Foundation Language Pack http://support.microsoft.com/kb/2880555
Office Web Apps Server http://support.microsoft.com/kb/2880558

 

Abraços! 😀

Written by Rodrigo Romano

April 22, 2014 at 9:02 pm

SharePoint 2013: Criar e importar Thesaurus

leave a comment »


Olá SharePointers,

Fiz um posto falando de como criar e importar Thesaurus no SharePoint 2013.

 

Para ver o artigo, acessem o link: http://social.technet.microsoft.com/wiki/pt-br/contents/articles/22503.sharepoint-2013-criar-e-importar-thesaurus.aspx

 

Estou adotando a política de quando for um artigo mais técnico, e para IT Pros, lançar no Technet Wiki e fazer a referência no meu blog. Dessa forma, todos podem contribuir e gerar um conteúdo melhor.

 

Abraços! Alegre

Written by Rodrigo Romano

January 17, 2014 at 5:33 pm

QuickTip: Como adicionar itens no Site Settings do SharePoint

with 3 comments


Olá SharePointers,

Hoje vou postar uma dica para ensinar como inserir uma Categoria e Links dentro do Site Settings, como na imagem abaixo.

image

 

Então, mãos à obra!!

 

1 – Abra o Visual Studio

2 – Escolha um SharePoint Empty Project e dê um nome para ele. Após isso, clique em OK.

image

3 -  Com a Solution criada, clique com o botão direito no Projeto e vá em Add, New Item…

image

image

 

4 – Escolha Empty Element e dê um nome, e depois clique em Add.

image

 

5 – Coloque o texto abaixo e faça o deploy! Smiley de boca aberta

<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
  <CustomActionGroup
    Id="5363598A-9CC6-42ED-8C35-B6DAFFE76427"
    Title="Rodrigo Romano – Meus Links"
    Location="Microsoft.SharePoint.SiteSettings"
    Sequence="110"
    ImageUrl="_layouts/images/lg_icdotx.png"
    >    
  </CustomActionGroup>
 
  <CustomAction
    Id="A2C6049B-F561-4BDA-A37A-E30ED4C95223"
    Title="Meu Blog"
    Location="Microsoft.SharePoint.SiteSettings"
    GroupId="5363598A-9CC6-42ED-8C35-B6DAFFE76427"
    Sequence="120"
    RequireSiteAdministrator="FALSE">
    <UrlAction Url="http://rodrigoromano.net"/>
  </CustomAction>    
</Elements>

image

 

Entendendo as TAGs

A tag <CustomActionGroup> representa a Categoria. Dentro dela, a propriedade Id deve ser gerada utilizando uma ferramenta, como o “Create GUID” que vem junto com o Visual Studio.

A tag <CustomAction> representa os Links internos da categoria. A sua propriedade GroupId deve ser igual ao Id da CustomActionGroup para dizer que esse link ficará dentro daquela categoria. A mesma regra de formação do Id é válida.

 

Para baixar a solução, utilizem esse link: http://sdrv.ms/1aI6utX.

 

Para saber mais sobre os elementos acima, acessem:

Custom Action Group – http://msdn.microsoft.com/en-us/library/ms438085.aspx

Custom Action – http://msdn.microsoft.com/en-us/library/ms460194.aspx

 

Obs: Esse post foi uma dica dada pelo Thiago Silva (http://thiagottss.com.br/). Man, OBRIGADO! Smiley de boca aberta

 

Abraços!

Written by Rodrigo Romano

January 16, 2014 at 2:40 pm