A funcionalidade de criar diálogos nos CRM nos possibilitou vários benefícios, podemos conduzir os usuários a preencherem as informações de forma sequencial e mais intuitivamente. Porém em alguns casos precisamos que eles sejam acionados automaticamente de acordo com algum evento no formulário.
Neste post, irei demonstrar um exemplo de como “chamar” um diálogo automaticamente.
Estarei usando a biblioteca XRMServiceToolkit para realizar as consultas nos Diálogos. Lembrando que precisamos do JSON2 e Jquery.
Crie os três Web Resources e adicione ao formulário que pretende utilizar a funcionalidade.
Agora segue um exemplo de script para acionar automaticamente o diálogo, vale lembrar que precisamos que o registro já tenha sido criado.
O método “RecuperarProcesso” percorre a entidade “workflow” e localiza pelo nome do processo informado, seguem os parâmetros utilizados:
O código JScript que faz o processo:
function OnLoad() { var processoLookup = null; // Recuperar Processo (INFORMAR O NOME) processoLookup = RecuperarProcesso("CRM BRASIL - Ocorrência"); // Verifica se localizou o Processo if (processoLookup != null) { var dialogId = processoLookup.value; // Executa Diálogo //var returnValue = showModalDialog("/" + Xrm.Page.context.getOrgUniqueName() + "/cs/dialog/rundialog.aspx?DialogId=%7b" + dialogId + "%7d&EntityName=incident&ObjectId=" + Xrm.Page.data.entity.getId()); //var returnValue = window.open("/" + Xrm.Page.context.getOrgUniqueName() + "/cs/dialog/rundialog.aspx?DialogId=%7b" + dialogId + "%7d&EntityName=incident&ObjectId=" + Xrm.Page.data.entity.getId()); //var returnValue = showModalDialog("/cs/dialog/rundialog.aspx?DialogId=%7b" + dialogId + "%7d&EntityName=incident&ObjectId=" + Xrm.Page.data.entity.getId()); // POLARIS var returnValue = window.open("/cs/dialog/rundialog.aspx?DialogId=%7b" + dialogId + "%7d&EntityName=incident&ObjectId=" + Xrm.Page.data.entity.getId()); } } function RecuperarProcesso(nomeProcesso) { var processoLookup = null; // Consulta var fetchXml = "<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>" + "<entity name='workflow'>" + "<attribute name='workflowid' />" + "<attribute name='name' />" + "<attribute name='category' />" + "<attribute name='primaryentity' />" + "<attribute name='statecode' />" + "<attribute name='createdon' />" + "<attribute name='ownerid' />" + "<attribute name='owningbusinessunit' />" + "<attribute name='type' />" + "<order attribute='name' descending='false' />" + "<filter type='and'>" + "<filter type='and'>" + "<condition attribute='category' operator='eq' value='1' />" + "<condition attribute='primaryentity' operator='eq' value='112' />" + "<condition attribute='statecode' operator='eq' value='1' />" + "<condition attribute='name' operator='like' value='" + nomeProcesso + "%' />" + "<condition attribute='type' operator='eq' value='1' />" + "</filter>" + "</filter>" + "</entity>" + "</fetch>"; // Recupera Registros var retrievedProcessos = XrmServiceToolkit.Soap.Fetch(fetchXml); // Verifica se foram localizados registros if (retrievedProcessos && retrievedProcessos.length > 0) { // Verifica se o Processo foi localizado if (retrievedProcessos[0].attributes['workflowid']) { processoLookup = retrievedProcessos[0].attributes['workflowid']; } } return processoLookup; }
Após isso, basta criar/adicionar o web resource ao formulário e incluir no evento OnLoad.
Podemos inserir uma lógica para que os diálogos sejam acionados apenas uma vez para cada registro, mas isso vai de caso à caso.
Att,
Tiago Cardoso