none
Exibir contrato e linha de contrato automaticamente na tela de ocorrência. RRS feed

  • Pergunta

  • Olá,

    Estou com a seguinte dificuldade,

    Na tela de abertura de  ocorrência, tem os campos para selecionar o contrato e a linha de contrato, porém não estou conseguindo utilizar para dificuldade em o utilizador ficar selecionando os dois campos, toda vez que vai abrir uma ocorrência para um determinado cliente.

    Eu gostaria de saber se, teria como essas informações sejam mostradas automaticamente a partir que seja selecionado um cliente?

    Agradecido!

    terça-feira, 27 de janeiro de 2015 13:42

Respostas

  • Boas Eduardo,

    Por um Workflow penso que não será possível. Eu percebo o que o Thiago estava a tentar propor, mas aquilo que ele propõe é afetar o campo contrato com a entidade relacionada contrato, que é o que está selecionado no incidente que neste caso é vazio. Por essa razão penso que não seja possível. A única coisa possível de fazer através de um Workflow é executar uma atividade customizada de Workflow. Thiago caso esteja a ver mal por favor corrija-me.

    O que eu proponho é resolveres este problema com Javascript:

    function setFirstContract() {
    	var clientid = Xrm.Page.getAttribute("customerid").getValue()[0].id;
    	var odataquery = Xrm.Page.context.getClientUrl() + "/XRMServices/2011/OrganizationData.svc";
    	odataquery += "/ContractSet?";
    	odataquery += "$filter=CustomerId/Id eq (guid'" + clientid.replace('{', '').replace('}', '') + "')";
    
    	$.getJSON(odataquery, function(data) {
    		if(data.d.results.length > 0) {
    			var contract = data.d.results[0];
    
    			var lookup = new Array();
    			lookup[0] = new Object();
    			lookup[0].id = contract.ContractId;
    			lookup[0].name = contract.Title;
    			lookup[0].entityType = "contract";
    			Xrm.Page.getAttribute("contractid").setValue(lookup);
    
    			odataquery = Xrm.Page.context.getClientUrl() + "/XRMServices/2011/OrganizationData.svc";
    			odataquery += "/ContractDetailSet?";
    			odataquery += "$filter=ContractId/Id eq (guid'" + contract.ContractId + "')";
    
    			$.getJSON(odataquery, function(data) {
    				if(data.d.results.length > 0) {
    					var contractLine = data.d.results[0];
    
    					lookup = new Array();
    					lookup[0] = new Object();
    					lookup[0].id = contractLine.ContractDetailId;
    					lookup[0].name = contractLine.Title;
    					lookup[0].entityType = "contractdetail";
    					Xrm.Page.getAttribute("contractdetailid").setValue(lookup);
    				}
    			});
    		}
    	});
    }

    Este  código tens que correr no evento onchange do campo cliente. Basicamente o que estou a fazer é ir ver todos os contratos do cliente escolhido e selecciona por defeito o primeiro contrato, com base nesse contrato seleciona a primeira linha desse contrato.

    PS: Estive com uns problemas neste inicio de ano e por isso não consegui responder as várias questões entre hoje e amanhã espero responder a todas :)

    Espero ter ajudado.
    Se respondi a sua pergunta por favor marque como resposta e\ou como útil.


    Pedro Azevedo Crm Specialist 4.0\2011

    • Sugerido como Resposta Azevedo PedroMVP quarta-feira, 4 de fevereiro de 2015 11:28
    • Marcado como Resposta Eduardo Mansano quinta-feira, 5 de fevereiro de 2015 21:17
    quarta-feira, 4 de fevereiro de 2015 11:28

Todas as Respostas

  • Ola Eduardo,

    Qual versão do Dynamics você está utilizando ? 

    você pode utilizar processos Workflow em tempo real para realizar este procedimento automático, eu acredito que irá resolver essa questão,

    na parte de alteração de Campo coloca o campo da "Conta";


    • Sugerido como Resposta Thiago_Lima sexta-feira, 30 de janeiro de 2015 19:59
    sexta-feira, 30 de janeiro de 2015 19:59
  • Thiago,

    Primeiramente, obrigado pela sua resposta.

    Estou utilizando o Dynamics CRM 2013 on-line

    Eu fiz o processo conforme o seus print, porém aqui pra mim não atualizou os campos de contrato e de linha de contrato.

    Uma duvida no campo" Alteração de campos do registro" eu selecione "Cliente" seria o correto ?

    Tem mais alguma coisa que eu possa fazer, para ver se dá certo?

    Obrigado novamente, um grande abraço

    terça-feira, 3 de fevereiro de 2015 13:24
  • Boas Eduardo,

    Por um Workflow penso que não será possível. Eu percebo o que o Thiago estava a tentar propor, mas aquilo que ele propõe é afetar o campo contrato com a entidade relacionada contrato, que é o que está selecionado no incidente que neste caso é vazio. Por essa razão penso que não seja possível. A única coisa possível de fazer através de um Workflow é executar uma atividade customizada de Workflow. Thiago caso esteja a ver mal por favor corrija-me.

    O que eu proponho é resolveres este problema com Javascript:

    function setFirstContract() {
    	var clientid = Xrm.Page.getAttribute("customerid").getValue()[0].id;
    	var odataquery = Xrm.Page.context.getClientUrl() + "/XRMServices/2011/OrganizationData.svc";
    	odataquery += "/ContractSet?";
    	odataquery += "$filter=CustomerId/Id eq (guid'" + clientid.replace('{', '').replace('}', '') + "')";
    
    	$.getJSON(odataquery, function(data) {
    		if(data.d.results.length > 0) {
    			var contract = data.d.results[0];
    
    			var lookup = new Array();
    			lookup[0] = new Object();
    			lookup[0].id = contract.ContractId;
    			lookup[0].name = contract.Title;
    			lookup[0].entityType = "contract";
    			Xrm.Page.getAttribute("contractid").setValue(lookup);
    
    			odataquery = Xrm.Page.context.getClientUrl() + "/XRMServices/2011/OrganizationData.svc";
    			odataquery += "/ContractDetailSet?";
    			odataquery += "$filter=ContractId/Id eq (guid'" + contract.ContractId + "')";
    
    			$.getJSON(odataquery, function(data) {
    				if(data.d.results.length > 0) {
    					var contractLine = data.d.results[0];
    
    					lookup = new Array();
    					lookup[0] = new Object();
    					lookup[0].id = contractLine.ContractDetailId;
    					lookup[0].name = contractLine.Title;
    					lookup[0].entityType = "contractdetail";
    					Xrm.Page.getAttribute("contractdetailid").setValue(lookup);
    				}
    			});
    		}
    	});
    }

    Este  código tens que correr no evento onchange do campo cliente. Basicamente o que estou a fazer é ir ver todos os contratos do cliente escolhido e selecciona por defeito o primeiro contrato, com base nesse contrato seleciona a primeira linha desse contrato.

    PS: Estive com uns problemas neste inicio de ano e por isso não consegui responder as várias questões entre hoje e amanhã espero responder a todas :)

    Espero ter ajudado.
    Se respondi a sua pergunta por favor marque como resposta e\ou como útil.


    Pedro Azevedo Crm Specialist 4.0\2011

    • Sugerido como Resposta Azevedo PedroMVP quarta-feira, 4 de fevereiro de 2015 11:28
    • Marcado como Resposta Eduardo Mansano quinta-feira, 5 de fevereiro de 2015 21:17
    quarta-feira, 4 de fevereiro de 2015 11:28
  • Pedro primeiramente, obrigado pela sua resposta

    Meu conhecimento no Dynamics CRM é básico, o máximo que consigo fazer sem precisar sair pesquisando é, alterar campos de formulários, ou criar novos campos.

    Por isso, fiquei boiando com a sua dica, gostaria de saber se tem como você me dar mais informações, de como fazer o fluxo de trabalho customizado e inserir o seu código?

    Obrigado novamente


    quarta-feira, 4 de fevereiro de 2015 12:04
  • Realmente Pedro, analisando o que você comentou realmente faz sentido e o sua resposta é melhor aplivael ao problema !

    Eduardo, o que o Pedro está propondo é algo parecido com isso aqui, realmente é um procedimento um pouco complexo para quem ta começando;

    http://www.xptcrm.com/post/2013/09/09/Custom-Workflow-Activities-Resolucao-de-incidentes.aspx

    porem com Entidade e Código diferentes, vai dando uma lida ai no Blog do próprio Pedro que logo em breve ele vai lhe retornar uma melhor maneira de realizar isso ai.




    • Editado Thiago_Lima quinta-feira, 5 de fevereiro de 2015 20:50
    quinta-feira, 5 de fevereiro de 2015 20:48
  • Thiago,

    Eu já usei o tutorial acima para fazer exatamente o que está explicando, ao fechar uma ocorrência enviar as informações da resolução para o workflow, eu consegui fazer funcionar, porém na parte de desenvolvimento eu precisei de ajuda de um colega que gerou a dll.

    Vou ver se esse meu colega, consegue quebrar novamente esse galho pra mim.

    Acredito que depois que estiver com a dll feita, basta eu fazer um workflow aonde seja iniciado quando for selecionado o cliente na ocorrência, e logo após finalizar.

    Obrigado pela ajuda

    quinta-feira, 5 de fevereiro de 2015 21:17