Usuário com melhor resposta
Exibir contrato e linha de contrato automaticamente na tela de ocorrência.

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!
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
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
-
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
-
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
-
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
-
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
-
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