Usuário com melhor resposta
Executar Fluxo de trabalho pelo Java Script

Pergunta
-
Olá pessoal, preciso de uma ajudinha aí. Gostaria de saber como posso fazer pra executar um determinado fluxo de trabalho já criado no on save de um formulário. Obrigado!
- Editado fabiojpoli quarta-feira, 9 de setembro de 2009 19:00
Respostas
-
Fabio,
Tente agora atualizar outro campo que não seja esse de status.
Acho que isso pode ser limitação de update sim.- Marcado como Resposta fabiojpoli quinta-feira, 17 de setembro de 2009 17:49
Todas as Respostas
-
-
sim, este é o objetivo, mas o problema é que são duas entidades diferentes, altero o status de uma e automaticamente deve ser alterado o status da outra, estou tentando via xml e java script no on save, mas não está dando certo, tem alguma sugestãao?
-
Via Fluxo de Trabalho você pode fazer configurando ele para que rode sempre na "Alteração de atributo do registro". Aí você configura para rodar na alteração de todos os atributos, ou dos que você queira em específico. Por exemplo, se você quiser, você pode fazer um fluxo rodar apenas quando muda o "Contato Primário" de uma conta.
Caso queira fazer via JavaScript, até é mais interessante e, digamos, confiável... tente pegar como base esse exemplo:
http://msdn.microsoft.com/en-us/library/cc677074.aspx
Espero que te ajude. -
ok, estou tentando aqui, tenho uma dúvida, não sei se é o padrão de todos os CRM ter a entidade appointment, que pra mim é o compromisso... gostaria de saber qual o atributo que mostra se o compromisso está fechado , como se fosse o status dele
-
-
o campo é isso mesmo, agora a proxima etapa é atualizar... eu vi o link http://msdn.microsoft.com/en-us/library/cc677074.aspx
mas como faço o "where"? uma condição para o update ? (desculpe as perguntas, eh que sou novo no crm e ainda mais no xml)
pode explicar o comando do update? onde fica os criterios do update.
Outra duvida, eu preciso do id da entidade appointment
tentei activityid, mas ao fazer a consulta xml e executar o for abaixo, ele retorna o erro: Objeto Necessario.
for (var i = 0; i < entityNodes.length; i++) { var entityNode = entityNodes[i]; var nameNode = entityNode.selectSingleNode("q1:activityid"); var name = (nameNode == null) ? null : nameNode.attributes[0].text; //aqui dá o erro alert(name); }
-
Olá Fabio,
Seguindo o exemplo:
// Prepare the SOAP message.
var xml = "<?xml version='1.0' encoding='utf-8'?>"+
"<soap:Envelope xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'"+
" xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'"+
" xmlns:xsd='http://www.w3.org/2001/XMLSchema'>"+
authenticationHeader+
"<soap:Body>"+
"<Update xmlns='http://schemas.microsoft.com/crm/2007/WebServices'>"+
"<entity xsi:type='contact'>"+
(aqui temos o nome da entidade do registro o qual será feito o update)
"<address1_line1>"+newAddressLine1+"</address1_line1>"+
(aqui temos o nome do campo (entre <>) que será alterado e o valor que será passado para este campo (no caso a variável newAddressLine1))
"<contactid>"+contactId+"</contactid>"+
(e aqui um item importante, o campo que guarda o GUID do registro (entre <>) e o valor do GUID do registro que será alterado (no caso a variável contactid))
"</entity>"+
"</Update>"+
"</soap:Body>"+
"</soap:Envelope>";
Sobre sua consulta, passe todo o código dela para eu dar uma olhada.
Abraço! -
Ola Ricardo, usei o código abaixo e retornou o erro: "An unexpected error ocurred".
Obrigado!var xml1 = "<?xml version='1.0' encoding='utf-8'?>"+ "<soap:Envelope xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'"+ " xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'"+ " xmlns:xsd='http://www.w3.org/2001/XMLSchema'>"+ GenerateAuthenticationHeader()+ "<soap:Body>"+ "<Update xmlns='http://schemas.microsoft.com/crm/2007/WebServices'>"+ "<entity xsi:type='appointment'>"+ // (aqui temos o nome da entidade do registro o qual será feito o update) "<statecode>"+status+"</statecode>"+ // (aqui temos o nome do campo (entre <>) que será alterado e o valor que será passado para este campo (no caso a variável newAddressLine1)) "<new_visitacomercialvinculadaid>"+id+"</new_visitacomercialvinculadaid>"+ // (e aqui um item importante, o campo que guarda o GUID do registro (entre <>) e o valor do GUID do registro que será alterado (no caso a variável contactid)) "</entity>"+ "</Update>"+ "</soap:Body>"+ "</soap:Envelope>"; var xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP"); xmlHttpRequest.Open("POST", "/mscrmservices/2007/CrmService.asmx", false); xmlHttpRequest.setRequestHeader("SOAPAction","http://schemas.microsoft.com/crm/2007/WebServices/Update"); xmlHttpRequest.setRequestHeader("Content-Type", "text/xml; charset=utf-8"); xmlHttpRequest.setRequestHeader("Content-Length", xml1.length); xmlHttpRequest.send(xml1); // Capture the result var resultXml = xmlHttpRequest.responseXML; alert(resultXml.xml); // Check for errors. var errorCount = resultXml.selectNodes('//error').length; if (errorCount != 0) { var msg = resultXml.selectSingleNode('//description').nodeTypedValue; alert(msg); } else { alert("Compromisso id = "+id+" atualizado."); //window.open("/sfa/conts/edit.aspx?id={"+contactId+"}"); }
-
-
-
-
-
Dei uma olhada melhor agora no seu código e vi que o campo que você está passando como campo de ID não é o campo que representa o GUID (primary key) da entidade "appointment". O campo correto seria "activityid".
Provavelmente esse campo que você colocou ("new_visitacomercialvinculadaid") seja o campo que você quer pegar o registro que está nele e alterar, certo? Se for, você tem que passar o valor dele como valor da variável "id".
Sim, ele é case sensitive. -
-
-
-
-
-
-
Se o "new_visitacomercialvinculadaid" é o primary key de uma entidade nova, então o problema está aqui:
"<entity xsi:type='appointment'>"+
A entidade que você está apontando não é a entidade correta. A entidade tem que ser a mesma que a do ID (primary key) que você está passando. Pelo padrão deve ser a entidade "new_visitacomercialvinculada". -
Estou fazendo assim, Quando altero o status da entidade new_visitascomerciais, quero que altere automaticamente o status da entidade 'appointment'. Eu rodei o código e ele chegou ao fim, dizendo que foi atualizado, porém na base não atualizou o status, naum sei se é algum erro ou se é por estar em rascunho e não publicado
-
O código que não gerou erro foi este
var
"<soap:Envelope xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'"+
" xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'"+
" xmlns:xsd='http://www.w3.org/2001/XMLSchema'>"+
GenerateAuthenticationHeader()+
"<soap:Body>"+
"<Update xmlns='http://schemas.microsoft.com/crm/2007/WebServices'>"+
"<entity xsi:type='appointment'>"+ // (aqui temos o nome da entidade do registro o qual será feito o update)
"<statecode>"+status+"</statecode>"+ // (aqui temos o nome do campo (entre <>) que será alterado e o valor que será passado para este campo (no caso a variável newAddressLine1))
"<activityid>"+idComp+"</activityid>"+ // (e aqui um item importante, o campo que guarda o GUID do registro (entre <>) e o valor do GUID do registro que será alterado (no caso a variável contactid))
"</entity>"+
"</Update>"+
"</soap:Body>"+
"</soap:Envelope>";
var xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");
xmlHttpRequest.Open(
"POST", "/mscrmservices/2007/CrmService.asmx", false);
xmlHttpRequest.setRequestHeader(
"SOAPAction","http://schemas.microsoft.com/crm/2007/WebServices/Update");
xmlHttpRequest.setRequestHeader(
"Content-Type", "text/xml; charset=utf-8");
xmlHttpRequest.setRequestHeader(
"Content-Length", xml.length);
xmlHttpRequest.send(xml);
var resultXml = xmlHttpRequest.responseXML;
alert(resultXml.xml);
var errorCount = resultXml.selectNodes('//error').length;
if (errorCount != 0)
{
var msg = resultXml.selectSingleNode('//description').nodeTypedValue;
alert(msg);
}
else
{
alert(
"Compromisso "+titulo+" atualizado!");
xml = "<?xml version='1.0' encoding='utf-8'?>"+}
-
Fabio,
Tente agora atualizar outro campo que não seja esse de status.
Acho que isso pode ser limitação de update sim.- Marcado como Resposta fabiojpoli quinta-feira, 17 de setembro de 2009 17:49
-
-
-
-
Olá Pessoal,
Uma contribuição um pouco tardia, mas espero que seja de alguma valia:
http://mscrm4ever.blogspot.com/2009/09/crm-40-running-on-demand-workflow-from.html
[]´s
Carlos Amorim Junior
"Trabalhe com amor, divida seu conhecimento com a comunidade."
Certificação, vídeos e treinamentos sobre CRM ? - http://www.dynamicscrm.com.br -
legal Carlos, parece ser bem útil, eu entendi mais ou menos o código, entendi que ele quis aplicar no on load, mas alguém sabe onde coloco aquela funções , declaração das classes? alguém já utilizou este código para me dar algum suporte? Obrigado!