jueves, 29 de octubre de 2015

Customizar lista de sharepoint - Administrar comportamento no formulario de lista PreSaveAction

Tem momentos que queremos aplicar algumas réguas nos campos de uma lista, para isso podemos aplicar diferentes modos:
1) aplicando sobre a própria coluna da lista. Sharepoint já disponibiliza métodos para aplicar validações nos campos. Pode ser aplicada via Schema.xml da lista ou via web na configuração da lista.
2) pode ser que se necessite validação de um formulário, aonde seja necessário que a validação seja comparando dois colunas o mais, nesse caso pode ser aplicada no Front-End, utilizando javascript. Se faz uma sobrecarrega do método do lado cliente "PreSaveItem".
3) pode também ter a necessidade de fazer uma configuração aonde os anteriores não conseguem satisfazer. Aí pode utilizar a criação de código em eventos. Os eventos podem ser executados em diferentes momentos exemplo criar uma lista, atualizar um item, desativar uma Feature.

Com respeito a utilização de javascript, se pode fazer uso de um método para capturar o evento que envia salvar os items do formulário, dito evento é “PreSaveItem”.
Podemos ver um exemplo aonde temos um formulário com dois campos datas, que pode ser Data Inicio e Data Fim e ao salvar o item devemos verificar que a Data Inicio não seja maior a Data Fim, uma verificação bem comum em formulários aonde tem datas que tem certa condição lógica.


Para isso editamos a página do formulário (Novo item e Editar Item) e incluímos a web part  "Editor de Script" do grupo "Mídia e Conteúdo"


Editamos o trecho de Script e incluímos nosso código de exemplo:


<script type="text/javascript">

function PreSaveAction()
{
    var date1 = getTagFromIdentifierAndTitle("INPUT","DateTimeFieldDate","Data Inicio"); 
    var date2 = getTagFromIdentifierAndTitle("INPUT","DateTimeFieldDate","Data Fim");
    var arrDate1 = date1.value.split("/");
    var useDate1 = new Date(arrDate1[2], arrDate1[1]-1, arrDate1[0]);
    var arrDate2 = date2.value.split("/");
    var useDate2 = new Date(arrDate2[2], arrDate2[1]-1, arrDate2[0]);
    if(useDate1 > useDate2)
    {
        alert("A Data Fim não supera a Data Inicio");
        return false;
    }
    return true;  // OK to proceed with the save item
}


function getTagFromIdentifierAndTitle(tagName, identifier, title) {
   var len = identifier.length;
   var tags = document.getElementsByTagName(tagName);
   
   for (var i = 0; i < tags.length; i++) {
     var tempString = tags[i].id;
    if (tags[i].title == title && (identifier == "" ||
          tempString.indexOf(identifier) == tempString.length - len))
        {
           return tags[i];
    }
   }
   return null;
}

</script>

Ao tentar cadastrar um item, fazemos click no botão Salvar, isto dispara o evento PreSAveItem se ativa e analisa nossa condição de Datas, si acontece que sua Data Fim seja menor que a Data Inicio, dispara o mensagens de alerta e não deixa continuar com o processo de salvar:





Atte.

Visual Studio – Tratar mensagem de erro “...Use atributo de força para reinstalá-lo explicitamente.”


Acontece que algumas Features já instaladas no site de SharePoint faz que uma nova reinstalação falhe por motivos de implantar uma solução que contém uma Visual Web Part para uma aplicação web diferentes na mesma FARM em que a aplicação web onde já está instalada.

 

Para evitar esse problema, se utiliza a propriedade “AlwaysForceInstall”.
Esta propriedade pode ser ativa de dois formas em Visual Studio, alterando a propriedade das features, mas também pode ser executada por Power Shell.


1) Propriedade da Features
A selecionar a Feature, podemos ver em sua lista de propriedade a opção "Always Force Install" que por default esta em false. E só trocar para True (imagem abaixo):


Si observamos seu Manifest, vemos como adicionou conteúdo no XML (imagem abaixo):


A outra forma es alterar o arquivo XML da Feature, digitando manualmente dita propriedade colocando TRUE (imagem abaixo):





2) Utilizando PowerShell

En PowerShell, pode usar o parâmetro -Force no comando Install-SPSolution,  indicar forçado na instalação da solução:

Install-SPSolution -Identity <solution_file> -GACDeployment -Force


Depois de fazer as mudanças, vemos como a solução e instalada (imagem abaixo):



Atte.

Restore - Backup de um site SharePoint usando PowerShell

Para fazer o backup/restore de um site de Sharepoint podemos utilizar os seguintes comandos do PowerShell:

  • Backup-SPSite

Backup-SPSite http://<url-Site> -Path <caminho destino do arquivo>\<nome>.bak

Exemplo: vamos a fazer um backup do site site.dev.com.br na pasta 'Backup'

Backup-SPSite http://site.dev.com.br -Path C:\Backup\siteDev.bak


  • Restore-SPSite

Com este comando podemos recuperar ou restaurar a copia gerada. Tem um parâmetro 'Force', dito parâmetro e necessário si estamos restaurando sobre um site que já tem conteúdo.

Restore-SPSite  http://<url-Site> -Path <caminho origem do arquivo>\<nome>.bak -Force

Exemplo: vamos a restaurar uma copia backup ao site de site.dev.com.br

Restore-SPSite http://site.dev.com.br -Path C:\Backup\siteDev.bak -Force


____________________________________________________
OBSERVAÇÂO: Quando se está restaurando copias feitas em outros ambientes, devemos pre-configurar as permissões, já que os usuários em ambientes diferentes não são os mesmos.

Para indicar um novo administrador do site:
Central Administration -> Application Management -> Change site collection administrators

Para indicar permissões nos usuários no distintos grupos já no site:
Configurações -> Configurações do site -> Pessoas e grupos

Para listar todos os usuários:
Configurações -> Configurações do site -> Pessoas e grupos -> trocar o valro da queryString 6 por 0
http:///<link do site>/_layouts/15/people.aspx?MembershipGroupId=0

Atte.

Reordenar colunas de um ContentType programaticamente.

Em umas das tarefas solicitadas pelo cliente, tinha a de re-organizar os item no formulario de uma lista, aonde já estava em produção.

Se poderia fazer uso do arquivo schema.xml do projeto para alterar a ordem dos campos, mas como foi falado, a lista já estava em produção, consequentemente não teria efeito alterar dito arquivo.

Então como solução se fez um método que sera chamado no momento de ativar a feature. Este método utiliza o metodo "Reorder" do content type, ele ordea as colunas baseado no seu parâmentro:
 
public void Reorder(
 string[] internalNames
)
 
 
Para obter os internal names, umas das formas e utilizar SharePoint Manager, observe imagem abaixo:
 
 
 
O método utilizado num projeto ficou assim: (se ordenou as colunas do content type 'Evento'*)

public static void ReorderContentTypeListNotificacao(SPSite site)
{
    var web = site.RootWeb;
    bool estadoAtual = web.AllowUnsafeUpdates;
    web.AllowUnsafeUpdates = true;

    SPContentType ct = web.ContentTypes["Evento"];

    ct.FieldLinks.Reorder(new string[] { "Title", "Location", "EventDate", "EndDate", "fAllDayEvent", "Description", "EventType", "Category", "PGCSCPessoaGrupo" });

    ct.Update(true);

    web.AllowUnsafeUpdates = estadoAtual;
}


*Content type possui as seguintes colunas: title, Location, EventDate, EndDate, fAllDayEvent, Description, EventType,, Category, etc.


Bibliografia
https://msdn.microsoft.com/EN-US/library/office/microsoft.sharepoint.spfieldlinkcollection.reorder.aspx

Atte.
 

Como fazer download de uma solução publicada desde Farm Sharepoint (PowerShell)

Podemos ter a necessidade de fazer download de soluções .wsp de uma farm, para isso e utilizando power shell, faremos uso dos seguintes comandos:

$frm = Get-SPFarm
$file = $frm.Solutions.Item("solucaoTeste.wsp").SolutionFile
$file.SaveAs("c:\solucaoTeste.wsp"

Atte.

Steve Jobs building NeXT

In 1987, after leaving the company apple, Steve Jobs created "NeXT"