Pessoal,
Desde a versão 2011 do CRM temos a possibilidade de passarmos parametros customizados através de querystring de forma suportada pelo SDK. O objeto Xrm.Utility nos proporciona a interação de novos parâmetros sendo enviados e recuperados via querystring do browser.
Em algumas situações necessitamos passar informações adicionais via querystring, como por exemplo quando utilizamos o USD (Unified Service Desk) e queremos recuperar informações do contexto do operador de call center e passá-las via querystring para uma página CRM. Outros momentos que o uso de parâmetros customizados podem ser requerido seria itens de menu (command bar ou sitemap), aberturas de formulários CRM dentro de outro formulário CRM, entre outros.
O trabalho deve ser dividido em três partes:
- Inclusão dos Parâmetros Customizados no Formulário CRM
Devemos previamente cadastrar os parâmetros customizados que desejamos passar para nosso formulário, deste modo, o formulário deve ser aberto em modo edição, clicar em “Propriedades do Formulário” > aba “Parâmetros”.
Neste exemplo utilizarei a entidade “Tarefa” que receberá o parâmetro “Percentual Realizado” já previamente preenchido.
- Recuperação dos Parâmetros Customizados
Depois de configurado o parâmetro customizado que desejamos que o formulário receba, devemos programar o código que realiza a recuperação do parâmetro. Para isso necessitamos de um JScript sendo executado no Load do formulário “Tarefa”:
function getCustomParameters() { // Recupera todos os parâmetros customizados var parametros = Xrm.Page.context.getQueryStringParameters(); // Valida se existem parâmetros informados E se existe o nosso parâmetro cadastrado "perc_realizado" if (parametros && parametros["perc_realizado"]) { var percentualRealizado = parseInt(parametros["perc_realizado"]); // Atribui o valor informado no atributo Percentual Realizado Xrm.Page.getAttribute("percentcomplete").setValue(percentualRealizado); } }
Abra as propriedades do formulário e adicione um biblioteca JScript e coloque o evento “getCustomParameters” no Load do formulário:
- Passagem dos Parâmetros Customizados via Querystring
Por fim, temos o ponto que informa o parâmetro customizado, no exemplo que usei de acordo com a “Origem” de uma “Ocorrência”, uma tarefa será criada e seu o percentual realizado será informado.
Devemos abrir em modo de edição a entidade “Ocorrência”, adicionar uma biblioteca JScript com o código que pode ser visualizado à seguir e no evento Change do atributo “Origem” o método “getCaseOriginAndOpenTask” deve ser adicionado:
function getCaseOriginAndOpenTask() { // Recupera o valor do atributo "Origem" var origem = parseInt(Xrm.Page.getAttribute("caseorigincode").getValue()); var parameters = {}; // Verifica se a Origem é Telefone ou Email e atribui como Percentual Realizado o valor 20 if(origem == 1 || origem == 2) parameters["perc_realizado"] = 20; // Para as demais origens o valor 30 deve ser atribuído else parameters["perc_realizado"] = 30; // Abre o formulário de Tarefa com o parâmetro informado Xrm.Utility.openEntityForm("task", null, parameters); }
Bom, terminamos os ajustes e configurações necessárias para a passagem de parâmetros customizados entre as entidade Ocorrência e Tarefa. Agora vamos ao teste, abra um registro de uma ocorrência e selecione um valor no atributo Origem:
Automaticamente seremos direcionados para a entidade Tarefa e o parâmetros “perc_realizado” será informado, na abertura da tarefa o JScript irá recuperar o valor e atribuir no atributo Percentual Realizado:
Como eu disse anterioremente este é só um exemplo de como podemos fazer para passar parâmetros customizados e recuperá-los no formulário CRM “alvo”. Atualmente estou usando com certa frequencia no USD para passar um parâmetro do contexto do operador de call center e recuperá-lo em um formulário CRM.
[]’s,
Tiago Cardoso
Tiago,
Estou com um problema em relação ao CRM 2016, possuo 2 forms diferentes da entidade Conta. Exemplo: ao abrir o form 1 eu faço uma pergunta ao usuário se ele deseja ir para o form 2, caso o usuário diga que sim, eu utilizo o Xrm.Utility.openEntityForm() para abrir o outro form.
Mas por se tratar da mesma entidade, apenas forms diferentes, o sistema acaba salvando um registro totalmente em branco (sendo que existem campos obrigatorios na tela), e em muitas vezes nessa troca de um form para outro, o sistema trava e nunca termina de carregar o novo form.
Poderia ser algum bug dessa função nativa (openEntityForm) do CRM?
CurtirCurtir
Hdlances,
Não avaliei se é ou não um bug, mas fiquei pensando sobre o que está querendo fazer…
Acredito que possa utilizar outras formas para resolver seu requisito, pois o Diálogo, poderia ser melhor para o preechimento das informações quando não temos ainda o registro criado. Eu imagino que os usuários sejam instruido a acessar um Diálogo que definirá quais informações precisam ser preenchidas e depois que o registro for criado, você conseguiria abrir o form correto de acordo com os preenchimentos.
O que acha da ideia?
Outra possível solução, seria separar o cadastro em duas entidades diferentes, já que os formulários são bem diferentes, talvez realmente sejam dados de tipos de diferentes, ai vale uma análise se isso é uma realidades ou não.
Por fim, eu iria para a criação de um único form e adicionar alguns controles visuais para exibir/esconder guias/seções/atributos. Não recomendo por conta do alto nível de customização necessário para concluir a solução.
Bom é isso!
[]’s,
Tiago Cardoso
CurtirCurtir