SharePoint 2010 Sandbox Solutions–Limitações e onde utilizar

Durante o Roadshow do time de audiências técnicas da Microsoft eu tenho falado de desenvolvimento para SharePoint 2010 e falo muito rapidamente de sandbox solutions. Para ajudar a decidir quando utilizar soluções sandboxed temos que levar em considerações alguns pontos.

Primeiramente é bom lembrar a todos que quando desenvolvemos para o SharePoint 2010 temos os arquivos WSPs que são os pacotes de nossa solução. Dessa forma temos uma unidade que facilita o reuso, teste e implantação. Com esses pacotes podemos colocar uma atualização no SharePoint para estender ou corrigir um bug de uma solução customizada já implantada anteriormente.

Os pacotes WSPs podem ser implantados como Farm Solutions ou como Sandbox Solutions. E quais são as diferenças dessas duas opções?

Para fazer a implantação de um pacote como Farm Solution você precisa ser o administrador da farm do SharePoint. Os assemblies dessa solução serão implantadas no Global Assembly Cache (GAC) do Web Server (rodarão em mode Fulltrust) o que pode colocar em risco a saúdo do ambiente. Por esse motivo, muitos administradores proíbem esse tipo de solução ou implantam o processo rigoroso de revisão de código e testes antes de fazer a implantação.

Quando uma solução é implantada como Farm Solution, ela tende a ter um melhor desempenho, porém você tem melhor flexibilidade de ambientes nos quais poderá implantar o pacote (lembre existem ambientes que o administrador proíbe esse tipo de solução e esse tipo implantação não é suportado no SharePoint Online (do Office 365 que no momento de post ainda está em beta).

Então devo sempre fazer soluções sandboxed? Também não é bem assim. As soluções sandboxed possuem uma grande flexibilidade de ambientes nos quais podem ser utilizadas (uma solução sandboxed também pode ser implantada como farm solution), possuem um processo de implantação muito rápido (como administrador do site collection, ou como owner do site você só precisa fazer o upload do pacote e ativar a solução), e possuem muitas restrições / limitações. E quais são essas limitações?

image

Quando falamos na implantação de soluções sandbox, estamos falando que não será feito nenhuma implantação de arquivos fisicamente no file system do servidor web. Dessa forma, não podemos desenvolver soluções que necessitem colocar arquivos fisicamente no servidor, tais como:

  • Assemblies que necessitem estar no GAC
  • Soluções que são ativadas nos níveis da Farm ou da Web Application
  • Application Pages, user controls
  • Templates de workflow (tanto sequencial quanto maquina de estado)
  • Projetos do tipo Business Data Connectivity Services Model

Além da limitação referente ao modo de implantação, temos limitação no que podemos fazer / acessar utilizando o modelo de objetos do SharePoint ou o .Net Framework.

Falando sobre acesso, é bom saber que nada fora do escopo da site collection de onde a aplicação está implantada pode ser acessado, não é possível criar novos objetos com base no SPSite (para você não conseguir acessar outras site collections), muito menos criar / utilizar objetos do tipo SPFarm ou SPWebApp. Também não é possível:

  • Criar e configurar Web Applications ou Content Databases
  • Criar site collections
  • Agregar conteúdos de 2 ou mais site collections (lembre, você não tem acesso a eles)

Já pelo lado do .Net Framework, não conseguimos utilizar diversas bibliotecas. Para garantir isso, a solução sandboxed roda em um processo isolado que é inicializado utilizando Code Access Security (CAS). Então você não consegue acessar o namespace System.IO, e nem classes / bibliotecas que acessem recursos pela rede (você não acessará um banco de dados, web service e nem mesmo uma requisição Get HTTP). Ou seja, com soluções sandboxed você só terá acesso a dados que estão no site collection onde a solução está ativada.

Mas nem tudo está perdido. Você pode criar uma solução sandboxed que tenha uma aplicação ECMAScript ou Silverlight onde, com Client Object Model do SharePoint, você pode acessar os dados do SharePoint e essas aplicações não estão limitadas pelo Sandbox, então você pode acessar a partir delas recursos de rede.

Dessa forma, Sandbox Solutions são muito limitadas para diversos cenários, porém existem alguns cenários de uso tais como:

  • Criar site columns, content types, e definição de listas
  • Criar listas e adicionar event handlers para fazer validações de dados
  • Criar nós de navegação no Quick Launch ou no menu de navegação
  • Web Parts que buscam e atualizam listas
  • Site Pages para hospedar WebParts e aplicações Silverlight
  • Fazer o branding do site, criando Master Pages, CSSs e imagens.
  • Criar ações customizadas para utilizar em Workflows

Espero ter ajudado um pouco a entender quais os pontos que temos que prestar atenção antes de escolher entre Farm e Sandbox Solutions. E se vocês tiverem mais cenários de onde utilizar soluções Sandbox, deixem comentários.

[]s

Alex Schulz