Introdução

O SharePoint é uma ferramenta bastante dinâmica mas a sua riqueza de recursos e opções leva a alguma complexidade na configuração dos comandos existentes nos sites de SharePoint.

As diversas versões do SharePoint o utilizador tem vindo a aumentar o numero de comandos que se podem realizar de forma a realizar as mais diversas acções em documentos, items ou site de SharePoint.

Com a introdução de Ribbons em SharePoint 2010 a sua complexidade aumentou de forma que este capitulo seja tratado em outro artigo, para este artigo foram criados exemplos de como podemos criar comando personalizados.

A capacidade de configurar os comandos através de expressões de XML leva a flexibilidade de transportar a solução para os mais diversos sites de SharePoint tornando bastante útil e reutilizável.

Para Configuração destas comandos personalizados o SharePoint permite a capacidade de através de Visual Studio e soluções de SharePoint (Farm e Sandbox).

Os próximos exemplos demostram a capacidade dos comandos personalizados e como estes podem ser configurados de uma forma simples e transportados através de soluções de SharePoint em Visual Studio 2010.

Criar uma solução para SharePoint em Visual Studio 2010.

Criar uma nova Solução de SharePoint, para criar comandos personalizados podemos escolher entre SharePoint Farm Solutions ou sandbox Solutions.

Se os comados personalizados forem criados para SharePoint Online "Office 365" recomendo criar uma Sanbox Solution para SharePoint.

 
Apos criar a solução de SharePoint será necessário criar uma nova Feature onde ira todos os ficheiros onde ficam a configurações dos comando personalizados e ficheiros de apoio aos sites de SharePoint.

 
Adicionar um elemento em "Empty Element", Este ficheiro de configuração do SharePoint em XML ira ficar todos os nosso comando personalizados que iremos adicionar em um site de SharePoint.

 
Configurar os nosso comando personalizados no ficheiro Elements.xml.
Este ficheiro será o ficheiros onde se ira encontrar as novos comandos e instruções que será adicionado ou alterado no SharePoint.

 

Novos Comando Personalizado em Listas

No primeiro exemplo foi criado os script para 2 botões que ira abrir as paginas correspondentes. O script ira criar uma nova tab chamada "Comando Personalizados" e adicionar os botões criados.

<CustomAction Id="UserInterfaceCustomActions.DocLibNewToolbar"
RegistrationType="List"
RegistrationId="101"
GroupId="NewMenu"
Rights="ManagePermissions"
Location="Microsoft.SharePoint.StandardMenu"
Sequence="1000"
Title="Botao 1">
<UrlAction Url="javascript:SP.UI.ModalDialog.ShowPopupDialog('/_layouts/ Botao1.aspx');"/>
</CustomAction>
<!-- Novo Botao 2 em Comando Personalidado-->
<CustomAction Id="UserInterfaceCustomActions.DocLibUploadToolbar"
RegistrationType="List"
RegistrationId="101"
GroupId="UploadMenu"
Rights="ManagePermissions"
Location="Microsoft.SharePoint.StandardMenu"
Sequence="1000"
Title="Botao 2">
<UrlAction Url="javascript:SP.UI.ModalDialog.ShowPopupDialog('/_layouts/Botao2.aspx');"/>
</CustomAction>

Ao instalar a solução e activar a feature, terá que aceder a uma lista e a nova opção "Comandos Personalizados" irá aparecer.

 

Adicionar Comando personalizado em JavaScript para todas as Pagina

Este novo comando personalizado tem como função adicionar um ficheiro de Javascript no Site de SharePoint e automaticamente associar o JS na pagina mestra (MasterPage) para realizar uma acção, neste case uma alerta de Javascript.
Para o comando realizado realizei o download da ultima versão do ficheiro em Jquery e adicionei da minha solução de SharePoint.
No ficheiro elements.xml adicionei a instrução para adicionar no Site um novo script Location="ScriptLink"  e adicionar o ficheiro “jquery-1.7.1.min.js” na biblioteca de documentos “Libraria de estilos”.

 <!-- Adiciona o Javascript -->
    <CustomAction
      ScriptSrc="~SiteCollection/Style Library/JS/JQuery1/jquery-1.7.1.min.js"
      Location="ScriptLink"
      Sequence="10">
    </CustomAction>
  <!-- executa em todas as paginas-->
  <CustomAction
Location="ScriptLink"
ScriptBlock="$(document).ready(function()
{alert('Alerta, tem Mensagem nova!!!'); });"
Sequence="101"
>
  </CustomAction>
<!—-adiciona o ficheiro JS no Site-->
  <Module Name="JS" Url="Style Library/JS/JQuery1" RootWebOnly="TRUE">
    <File Path="JQuery1\jquery-1.7.1.min.js" Url="jquery-1.7.1.min.js" Type="GhostableInLibrary"/>
  </Module>

Depois de realizar a alteração no ficheiro Elements.xml foi realizado a instalação da Solução de SharePoint e quando acedemos a pagina de SharePoint aparece um alerta em cada pagina.

Para visualizar a alteração no site deveremos visualizar o código de html da pagina de SharePoint, pode ser realizado através do botão direito e opção "View Source" do Internet Explorer.

 
Ao Aceder ao Html podemos visualizar que o ficheiro Jquery-*.js foi adicionado com sucesso em todas as paginas do nosso site de SharePoint.


Esta operação pode ser bastante útil se pretender realizar operações globais, alertas aos utilizadores ou personalizações no site de SharePoint.

Editar Menu de opções no item e novo link em Ações do Site


Estes novos comandos personalizados tem como função adicionar um novo comando no menu de opções dos items e adicionar uma nova opção e link no menu "Ações do Site" neste exemplo irei criar uma novo controlo personalizado com a função de realizar Check-out do documento e guarda o documento como "draft" no computador local.

Por defeito estes são os comandos disponibilizados pelo SharePoint;

Para este exemplo irei criar comando personalizado utilizando o ID associado ao Menu de item, que pode ser encontrado no seguinte link.
Nesta solução foi definida uma permissão de forma que todos os utilizadores com permissões de edição possam aceder a esta novo comando, para mais informação podem aceder ao seguinte link.
Para o exemplo foi utilizado os comandos Edit Control Block (ECB) para definir a nova opção no menu dos items.

<CustomAction
    Id="UserInterfaceCustomActions.ECBItemToolbar"
    Rights="EditListItems"
    RegistrationType="ContentType"
    RegistrationId="0x0101"
    Location="EditControlBlock"
    Sequence="250"
    Title="Editar Documento">
 
    <UrlAction Url="javascript:editDocumentWithProgID2('{ItemUrl}', '', 'SharePoint.OpenDocuments', '1', '{SiteUrl}', '0');return false;"/>
  </CustomAction>

Apos instalada a Solução de SharePoint a nova opção irá ser visível aos utilizadores com permissões e pronta para funcionar.

 

 

O Segundo comando personalizador ira criar uma nova opção no menu "Ações do Site" que ira redireccionar para as opções de administrador do site numa janela de dialogo.

<CustomAction Id="UserInterfaceCustomActions.SiteActionsToolbar"
    GroupId="SiteActions"
    Location="Microsoft.SharePoint.StandardMenu"
    Sequence="1000"
    Title="Nova Opção em Ações do Site">
    <UrlAction Url="javascript:SP.UI.ModalDialog.ShowPopupDialog('/_layouts/Settings.aspx');"/>
  </CustomAction>

Apos instalar a soluçao, quando aceder-mos a opção "Ações do Site" ira aparecer ums nova Ação chamada "Nova Opção em Ações do Site".

 

Dicas:

SharePoint “On-Premise” vs. SharePoint Online

 

Os Comandos personalizados em SharePoint são muito flexíveis, mas é necessário entender o que se pode realizar no SharePoint On-Premise e SharePoint Online.
A limitação deste tipo de soluções é a definição dos seu escopo.
Por defeito podemos escolher os seguintes escopo.

Farm (Todos as Aplicações)

 

 

SharePoint On-Premise

(Farm/Sandbox)

 

WebApplication (Todas as Colecções de Sites)

 

Site (Colecção de Sites)

 

SharePoint Online (365)

(Sandbox)

 

Web (Sites)

 

Para cada tipo de ambiente de SharePoint sera preciso definir o seu escopo escolhendo a solução de SharePoint ideal para responder ao requisitos do utilizador.

Atributos nos Scripts:

Na construção das comandos podemos definir acções e instruções em script. Algumas destas operações estão ligadas Sites, Listas ou items que são geradas dinamicamente.

O SharePoint disponibiliza símbolos que representa atributos gerais que simplificam a construção dos nosso script de forma a poder responder capturar URL/ID do Site, Listas, items onde se encontra o nosso comando personalizado.
Os símbolos seguintes são reconhecidos na construção dos nossos scripts:

  • {ItemId} – ID (GUID) Item da Lista.
  • {ItemUrl} –URL relativo de onde se encontra o item da lista.
  • {RecurrenceId} – ID de um item recorrente (RecurrenceID).
  • {SiteUrl} – A URL totalmente qualificado para o site (URL).
  • {ListId} – ID (GUID) da lista (ID).
  • {ListUrlDir} – Servidor-URL relativa do site mais pasta da lista.
  • {Source} – Fully qualified request URL.
  • {SelectedListId} – ID (GUID) da lista que está atualmente selecionado a partir de uma exibição de lista.
  • {SelectedItemId} – ID do item que está selecionado no momento da vista de lista

No próximo link encontras todas os atributos que podem ser utilizados na construção
“CommandUIHandler Element”
http://msdn.microsoft.com/en-us/library/ff458385.aspx

Definir as permissões de acesso ao comandos personalizados

 Uma das opções que podemos utilizar quando estamos a configurar o comando personalizado são as permissões de forma a limitar o acesso aos diversos comandos, esses permissões são as roles que se encontram definidas nos Sites de SharePoint e são bastantes uteis para controlar associar os grupos de SharePoint com as permissões associadas.

Exemplo:

<CustomAction
    Id="UserInterfaceCustomActions.ECBItemToolbar"
    Rights="EditListItems"
    RegistrationType="ContentType"
A opção "EditLlistitem", limita o acesso ao utilizadores que não tenham acesso de editar items.
SPBasePermissions Enumeration
http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spbasepermissions.aspx

Definição das comandos personalizados em Content Types:

SharePoint é constituído por Content Types, estes Content Types ajudam a definir a Metadata associada a cada Tipo de Listas, seleccionado a propriedade e a sua interdependência entre os diversos Content Types que estão constituídos na lista.
Este “Custom action” tem como função definir uma acção que seja visível em qualquer tipo de Lista para isso foi definido o Content Type “Item” onde todos os Content Types para listas derivam.
Por exemplo se pretendemos criar um comando personalizado que seja visível em todas as listas e não nas Libraria de documentos, podemos definir o Content Type que podemos usar.

 Name ID 
 System 0x 
 Item  0x01
 Document 0x0101 
 Link  0x0105
 Contact  0x0106
 Task  0x0108
 Folder  0x0120
<!—Comando personalizado alterado para usar o Content Type
<CustomAction Id="UserInterfaceCustomActions.DocLibUploadToolbar"
 
    RegistrationType="ContentType"
    RegistrationId="0x01"
 
    GroupId="UploadMenu"
    Rights="ManagePermissions"
    Location="Microsoft.SharePoint.StandardMenu"
    Sequence="1000"
    Title="Botao 2">
    <UrlAction Url="javascript:SP.UI.ModalDialog.ShowPopupDialog('/_layouts/Botao2.aspx');"/>
  </CustomAction>
 

Link de apoio:
Base Content Type Hierarchy
http://msdn.microsoft.com/en-us/library/ms452896.aspx

Conclusão

Com utilização dos controlos personalizados e a introdução de Ribbons em SharePoint 2010 levou a uma maior complexidades no desenho e configuração dos controlos no ficheiros elements.xml onde se encontram associados as features, ira requerer uma maior atenção em toda a sua elaboração mas também uma maior riqueza de recursos nos sites de SharePoint.

 

Links de suporte:
CustomAction Element
http://msdn.microsoft.com/en-us/library/ms460194.aspx
Custom Action Definition Schema
http://msdn.microsoft.com/en-us/library/ms465980.aspx
Default Custom Action Locations and IDs
http://msdn.microsoft.com/en-us/library/bb802730.aspx
How to: Modify the User Interface Using Custom Actions
http://msdn.microsoft.com/en-us/library/ms473643(v=office.14).aspx
HideCustomAction Element
http://msdn.microsoft.com/en-us/library/ms414790.aspx

Artigo criado por,
André Lage
http://aaclage.blogspot.com/
para a revista CanalTechshare