none
Executar Fluxo de trabalho pelo Java Script RRS feed

  • 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
    sexta-feira, 4 de setembro de 2009 12:43

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
    quarta-feira, 9 de setembro de 2009 18:06

Todas as Respostas

  • Olá Fabio,

    Esse fluxo de trabalho vai rodar sempre que o formulário for salvo?

    sexta-feira, 4 de setembro de 2009 14:07
  • 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?
    sexta-feira, 4 de setembro de 2009 16:24
  • 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.
    sexta-feira, 4 de setembro de 2009 16:59
  • 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
    sexta-feira, 4 de setembro de 2009 18:13
  • O campo que indica o status do compromisso é o statuscode, se não me engano!
    Se não for esse, é o statecode.
    sexta-feira, 4 de setembro de 2009 18:14
  • 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);
    		
    	}
    sexta-feira, 4 de setembro de 2009 18:51
  • 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!
    terça-feira, 8 de setembro de 2009 19:34
  • 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+"}");
    	}
    quarta-feira, 9 de setembro de 2009 13:24
  • Fabio,

    Quais os valores que você passou nas variáveis "status" e "id"?

    quarta-feira, 9 de setembro de 2009 16:40
  • status eu passo o valor que é selecionado: concluido-> passo valor 1 cancelado 2

    eu dei um alert no ID, e ele esta retornando {703E0159-7499-DE11-9086-0022195864BC}
    esse ID passo no update

    OBS, esse ID está fazendo o vinculo com 2 entidades
    quarta-feira, 9 de setembro de 2009 16:45
  • Tente fazer um update de algum outro campo que não seja campo de status, só para ver se não é alguma restrição quanto a alterar status via JavaScript.

    quarta-feira, 9 de setembro de 2009 16:48
  • tentei no campo subject e nada. e tbm quando coloquei Subject ao inves de subject, ele diz q o campo não existe. no XML é case sensitive?
    quarta-feira, 9 de setembro de 2009 17:07
  • 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.

    quarta-feira, 9 de setembro de 2009 17:14
  • hum...aí que tá o problema, pois eu atualizo uma entidade através de outra, ou seja, esse new_visitacomercialvinculadaid é diferente de activityid, eu atualizo através do vinculo das duas entidade
    quarta-feira, 9 de setembro de 2009 17:19
  • Mas o "new_visitacomercialvinculadaid" é um lookup de que entidade? É uma entidade nova ou é também a entidade de "appointment"?
    quarta-feira, 9 de setembro de 2009 17:21
  • consegui pegar o activityid , mas o erro continua "An unexpected error ocurred".
    quarta-feira, 9 de setembro de 2009 17:40
  • é uma entidade nova
    quarta-feira, 9 de setembro de 2009 17:42
  • consegui pegar o activityid , mas o erro continua "An unexpected error ocurred".

    O problema está no XML mesmo, no SQL server consegui fazer essas consultas com esses update
    quarta-feira, 9 de setembro de 2009 17:44
  • Agora pelo visto deu certo, eu havia esquecido de trocar o nome do atributo no UPdate para activityid .

    Porém ele não atualizou na base. Quando está como rascunho , sem publicar, o Update não executa?
    quarta-feira, 9 de setembro de 2009 17:51
  • 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".

    quarta-feira, 9 de setembro de 2009 17:53
  • 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
    quarta-feira, 9 de setembro de 2009 18:00
  • 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'?>"+

     

    quarta-feira, 9 de setembro de 2009 18:02
  • 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
    quarta-feira, 9 de setembro de 2009 18:06
  • o pior de tudo é que você estava certo, consegui alterar o subject, mas o status não altera , oq posso fzr?
    quarta-feira, 9 de setembro de 2009 18:13
  • o pior de tudo é que você estava certo, consegui alterar o subject, mas o status não altera , oq posso fzr?

    É estranho porque consigo alterar direto no SQL Server, mas pelo WebService não
    quarta-feira, 9 de setembro de 2009 18:18
  • Tem como executar um fluxo de trabalho no on save? pelo java script, como faço isso?
    quarta-feira, 9 de setembro de 2009 18:42
  • 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
    quinta-feira, 10 de setembro de 2009 20:38
  • 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!
    sábado, 12 de setembro de 2009 17:44