none
[Dynamics CRM 2011] script no Formulário criar novo E-mail RRS feed

  • Pergunta

  • Galera,

    Preciso criar algumas regras de validações nos campos DE, PARA, ASSUNTO, para quando o usuário preencher o campo estas validações sejam disparadas. Alguém tem um exemplo de como fazer isto?

    Por enquanto eu tenho no meu código apenas as regras de obrigatoriedade de preencher os campos.


    function OnLoad() { 

    var FORM_TYPE_CREATE = 1; 
    var FORM_TYPE_UPDATE = 2; 

    var formType = Xrm.Page.ui.getFormType();

    if (formType == FORM_TYPE_CREATE) {

    Xrm.Page.getAttribute("from").setRequiredLevel(“required”);
    Xrm.Page.getAttribute("to").setRequiredLevel(“required”);
    Xrm.Page.getAttribute("subject").setRequiredLevel(“required”);
    Xrm.Page.getAttribute("description").setRequiredLevel(“required”);

    var remetente = Xrm.Page.getAttribute("from").getValue();
    var destinatarios = Xrm.Page.getAttribute("to").getValue(); 
    var assunto = Xrm.Page.getAttribute("subject").getValue();

    Xrm.Page.ui.controls.get(regardingobjectid”).setDisabled(true);

    Um dos problemas que estou no momento é que ao abrir o formulário ele já esta pegando os valores dos campos (DE, PARA e ASSUNTO) que se encontram vazios (ainda nao preenchidos).
    segunda-feira, 13 de maio de 2013 13:29

Respostas

  • Renan,

    Se eu entendi o que disse, precisa colocar suas validações no onchange ou onsave, assim conforme preenche ele valida, ou valida uma única vez no momento que tentamos salvar o registro.

    Att,


    Tiago Michelini Cardoso MVP - MCC - MCTS
    https://tiagomcardoso.wordpress.com/

    segunda-feira, 13 de maio de 2013 14:05
    Moderador
  • Claro Renan, precisa de um gatilho, pode adicionar manualmente funções em cada evento onchange dos campos necessários (não recomendado) ou pode adicionar no load da seguinte forma:

    function OnLoad()
    {
    Xrm.Page.getAttribute('SEU_ATRIBUTO').addOnChange(SUA_FUNCAO_ONCHANGE);
    }
    
    function SUA_FUNCAO_ONCHANGE()
    {
    ...
    }


    Tiago Michelini Cardoso MVP - MCC - MCTS
    https://tiagomcardoso.wordpress.com/

    terça-feira, 14 de maio de 2013 13:50
    Moderador

Todas as Respostas

  • Renan,

    Se eu entendi o que disse, precisa colocar suas validações no onchange ou onsave, assim conforme preenche ele valida, ou valida uma única vez no momento que tentamos salvar o registro.

    Att,


    Tiago Michelini Cardoso MVP - MCC - MCTS
    https://tiagomcardoso.wordpress.com/

    segunda-feira, 13 de maio de 2013 14:05
    Moderador
  • Opa Tiago,

    Obrigado pela atenção. No caso assim que o usuário terminar de preencher um campo e partir para o preenchimento de outro campo. Se caracteriza a validação do primeiro campo como onChange() correto? Ou seja, quando ele sair do campo preenchido o onchange() será acionado para validar o conteúdo!?
    segunda-feira, 13 de maio de 2013 14:12
  • Aproveitando o tópico ainda.

    No campo DE: eu preciso que ao abrir o formulário onLoad() ele verifique qual Fila da Equipe a que o usuário pertença. Como consigo recuperar este dado pelo script do formulário?

    Em C# eu seguiria estes passos:

                Contact resultContact = new Contact();
                //Recupera o contato
       query = new QueryByAttribute(Contact.EntityLogicalName);
                query.ColumnSet = new ColumnSet("firstname", "contactid");
                query.AddAttributeValue("emailaddress1", email.Sender);
                var retrieved = service.RetrieveMultiple(query); 

        resultContact = retrieved.Entities[0].ToEntity<Contact>();

       //Recupera a referencia do contato com a conta.
        var queryRecuperaConta = new QueryByAttribute(ava_account_contact.EntityLogicalName);
                queryRecuperaConta.ColumnSet = new ColumnSet("contactid", "accountid");
                queryRecuperaConta.AddAttributeValue("contactid", resultContact.ContactId);
                var resultconta = service.RetrieveMultiple(queryRecuperaConta).Entities[0].ToEntity<ava_account_contact>();


               //Recupera a Conta de acordo com a referencia da conta do contato

                var queryRecuperaConta2 = new QueryByAttribute(Account.EntityLogicalName);
                queryRecuperaConta2.ColumnSet = new ColumnSet("ava_filaid", "name", "accountid");
                queryRecuperaConta2.AddAttributeValue("accoutid", resultconta.accountid);
                var conta = service.RetrieveMultiple(queryRecuperaConta2).Entities[0].ToEntity<Account>();

               //Recupera a Fila de acordo com a Conta. 

               var queryRecuperaFila = new QueryByAttribute(Queue.EntityLogicalName);
                queryRecuperaFila.ColumnSet = new ColumnSet { AllColumns = true };
                queryRecuperaFila.AddAttributeValue("queueid", conta.ava_filaid);
                var resultFila = service.RetrieveMultiple(queryRecuperaConta2).Entities[0].ToEntity<Queue>();

               // Recupera a Fila da Equipe.

                 var queryTeam = new QueryByAttribute(Team.EntityLogicalName);
                queryTeam.ColumnSet = new ColumnSet { AllColumns = true };
                queryTeam.AddAttributeValue("teamid", resultFila.OwnerId);
                queryTeam.AddAttributeValue("queueid", resultFila.QueueId);
                var resultTeam = service.RetrieveMultiple(queryTeam).Entities[0].ToEntity<Team>();

                var FilaPrincipal = resultTeam.QueueId.Name;

    Precisaria que o resultado deste codigo fosse retornado para o campo FROM

    Xrm.Page.getAttribute("from").setValue(FilaPrincipal);

    Qual a melhor forma de obter estas informações pelo script?


    segunda-feira, 13 de maio de 2013 14:24
  • Renan,

    Isso mesmo no change faça suas validações.

    Quanto a fila, se for colocar uma regra de negócio sempre recomendo o uso de plugins, poderá colocá-lo no precreate/preupdate assim valida antes de inserir na base. Agora se tiver que fazer algo do lado client antes de processar o registro, terá que fazer um chamada via activex para o serviço so CRM e obter os dados necessários, assim use a localização avançada do CRM, crie seu fetch e use qualquer biblioteca que consuma fetch do CRM, por exemplo:

    http://xrmservicetoolkit.codeplex.com/

    Att,


    Tiago Michelini Cardoso MVP - MCC - MCTS
    https://tiagomcardoso.wordpress.com/

    segunda-feira, 13 de maio de 2013 15:08
    Moderador
  • Tiago,

    Estou tentando utilizar o fuction OnChange(); mas nao estao funcionando. No Onload ele carrega e recupera os valores dos campos que vao estar vazios. Quando o usuário preencher o campo FROM por exemplo, o Onchange não deveria ser acionado?

    function OnLoad() {

    if(Xrm.Page.ui.getFormType() == 1) {
    //Setar campo obrigatório ser preenchido.
    Xrm.Page.getAttribute("from").setRequiredLevel("required");
    Xrm.Page.getAttribute("to").setRequiredLevel("required");
    Xrm.Page.getAttribute("subject").setRequiredLevel("required");
      
    var remetente = Xrm.Page.getAttribute("from").OnChange();
    var destinatarios = Xrm.Page.getAttribute("to").OnChange();  
    var assunto = Xrm.Page.getAttribute("subject").OnChange();
    }
     
    function OnChange() {
     
    //Recupera os valores dos campos.  
    var remetente = Xrm.Page.getAttribute("from").getValue();
    var destinatarios = Xrm.Page.getAttribute("to").getValue();  
    var assunto = Xrm.Page.getAttribute("subject").getValue();
     
    if(remetente != null){
    alert("O Valor do campo FROM foi alterado");
    }
    }
    terça-feira, 14 de maio de 2013 13:36
  • Claro Renan, precisa de um gatilho, pode adicionar manualmente funções em cada evento onchange dos campos necessários (não recomendado) ou pode adicionar no load da seguinte forma:

    function OnLoad()
    {
    Xrm.Page.getAttribute('SEU_ATRIBUTO').addOnChange(SUA_FUNCAO_ONCHANGE);
    }
    
    function SUA_FUNCAO_ONCHANGE()
    {
    ...
    }


    Tiago Michelini Cardoso MVP - MCC - MCTS
    https://tiagomcardoso.wordpress.com/

    terça-feira, 14 de maio de 2013 13:50
    Moderador