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.

No hay comentarios:

Publicar un comentario