none
[CRM 2011] Alterar o status do pedido RRS feed

  • Pergunta

  • Preciso alterar o status do pedido via javascript já tentei via Soap utilizando os critérios abaixo, mas não obtive sucesso, alguém já passou por isso? 

      
      "<soap:Body>"+ 
        "<Update xmlns='http://schemas.microsoft.com/crm/2007/WebServices'>"+ 
        "<entity xsi:type='salesorder'>"+ 
        "<statuscode>100001</statuscode>"+
        "<statecode>3</statecode>"+ 
        "<salesorderid>"+Xrm.Page.data.entity.getId()+"</salesorderid>"+ 
        "</entity>"+ 
        "</Update>"+ 
        "</soap:Body>"+ 
        "</soap:Envelope>";

    Erro : 100001 is not a valid status code for state code SalesOrderState.Active on salesorder.


    quarta-feira, 21 de novembro de 2012 17:36

Respostas

Todas as Respostas

  • Daniel, boa tarde.

    Da uma olhada neste link

    http://mileyja.blogspot.com.br/search?q=change+status

    quarta-feira, 21 de novembro de 2012 17:42
  • Daniel,

    Além deste exemplo que o Eduardo passou, você pode usar uma biblioteca, o XrmServiceToolkit, existe um método que faz exatamente o que quer SetState:

    http://xrmservicetoolkit.codeplex.com/

    Att,


    Tiago Michelini Cardoso MVP - MCC - MCTS
    https://tiagomcardoso.wordpress.com/

    quarta-feira, 21 de novembro de 2012 17:55
    Moderador
  • Eduardo,

    A forma de alterar o status no link  que vc me mandou e diferente da forma que uso, estou tendo dificuldade mas analizando já identifiquei alguns pontos.

    O que mais me chamou a atenção foi o abaixo:

     <c:key>State</c:key>";

    Parece que tenho que passar um State ?

    quarta-feira, 21 de novembro de 2012 17:58
  • Daniel,

    Acho que se confundiu, te passei um biblioteca de JScript...rs

    Precisa adicionar o .js no formulário e fazer uma chamada, mais ou menos assim:

    XrmServiceToolkit.Soap.SetState("contact", "245DD529-8343-E111-8F5A-000C294FB247", 1, 2);

    Att,


    Tiago Michelini Cardoso MVP - MCC - MCTS
    https://tiagomcardoso.wordpress.com/

    quarta-feira, 21 de novembro de 2012 18:22
    Moderador
  • Tiago,

    Muito bacana esta biblioteca, olhando a assinatura do método abaixo: Por favor me fale se estou fazendo algo errado:

    tenho que passar: Nome da entidade, ID da entidade, STATUS, RAZÃO DO STATUS ?

    var setState = function (entityName, id, stateCode, statusCode, callback)

    quarta-feira, 21 de novembro de 2012 18:24
  • Daniel,

    Use o código que eu te passei, só troque os valores para os seus, o último parametro na verdade é um função de retorno que você pode utilizar, se não informar ele não utiliza.

    Att,


    Tiago Michelini Cardoso MVP - MCC - MCTS
    https://tiagomcardoso.wordpress.com/

    quarta-feira, 21 de novembro de 2012 18:35
    Moderador
  • Tiago , acho que fiz algo de errado: pois esta me apresentando o erro abaixo:

    jQuery is not loaded. Please ensure that jQuery is included  as webresource in the form load.

    o comando que usei foi o abaixo:

    XrmServiceToolkit.Soap.SetState("salesorder","5D45ADAC-CD33-E211-8DC1-78E3B511A6C7", 100001, 3);

    Vou descrever o que fiz:

    1) criei uma biblioteca chamada: new_XrmServiceTollkit e acrescentei o arquivo XrmServiceToolkit.js

    2) criei uma biblioteca chamada new_jquery e acrescentei o arquivo jquery.jx

    3) criei uma biblioteca chamada new_json2 e acrescentei o arquivo json2.js

    Posteriormente adicionei todas estas biblioteca ao formulário.

    quarta-feira, 21 de novembro de 2012 19:05
  • Daniel,

    Verifique se as versões do jquery e json são compatíveis ou pegue os que o autor fornece.

    Mas de qualquer forma seu código está com parametros errados, o correto é:

    XrmServiceToolkit.Soap.SetState(entityName, id, stateCode, statusCode);

    Veja os states e status permitidos, lembrando que precisa ter o pedido já ativo:

    http://msdn.microsoft.com/en-us/library/bb959351.aspx

    Att,


    Tiago Michelini Cardoso MVP - MCC - MCTS
    https://tiagomcardoso.wordpress.com/

    quarta-feira, 21 de novembro de 2012 19:23
    Moderador
  • Tiago, sobre o erro acima consegui resolver, mas agora o código e executado, não da nenhuma mensagem de erro, mas o status não e alterado, debugando percebi que aparentemente ele envia um xml formatado corretamente, segue o xml abaixo:

    Alguém já consegui alterar o status da entidade Pedido?

    <request i:type='b:SetStateRequest' xmlns:a='http://schemas.microsoft.com/xrm/2011/Contracts' xmlns:b='http://schemas.microsoft.com/crm/2011/Contracts'>
          <a:Parameters xmlns:c='http://schemas.datacontract.org/2004/07/System.Collections.Generic'>
                <a:KeyValuePairOfstringanyType>
                      <c:key>EntityMoniker</c:key>
                      <c:value i:type='a:EntityReference'>
                            <a:Id>5D45ADAC-CD33-E211-8DC1-78E3B511A6C7</a:Id>
                            <a:LogicalName>salesorder</a:LogicalName>
                            <a:Name i:nil='true' />
                      </c:value>
                </a:KeyValuePairOfstringanyType>
                <a:KeyValuePairOfstringanyType>
                      <c:key>State</c:key>
                      <c:value i:type='a:OptionSetValue'>
                            <a:Value>3</a:Value>
                      </c:value>
                </a:KeyValuePairOfstringanyType>
                <a:KeyValuePairOfstringanyType>
                      <c:key>Status</c:key>
                      <c:value i:type='a:OptionSetValue'>
                            <a:Value>100001</a:Value>
                      </c:value>
                </a:KeyValuePairOfstringanyType>
          </a:Parameters>
          <a:RequestId i:nil='true' />
          <a:RequestName>SetState</a:RequestName>
    </request>

    quarta-feira, 21 de novembro de 2012 19:24
  • Sobre a inversão de parâmetros já corrigi.
    quarta-feira, 21 de novembro de 2012 19:27
  • Daniel,

    Acabei de fazer um teste aqui, eu havia me esquecido, o pedido possui um método especial para a mudança do status, o método FullfillSalesOrderRequest. A biblioteca ainda não possui esta função implementada, desculpe a perca de tempo seu...

    Use o método que o Eduardo te passou:

    http://community.dynamics.com/product/crm/crmtechnical/b/mileyja/archive/2011/10/02/fulfill-a-sales-order-in-microsoft-dynamics-crm-2011-using-net-or-jscript.aspx

    Desculpe novamente.

    Att,


    Tiago Michelini Cardoso MVP - MCC - MCTS
    https://tiagomcardoso.wordpress.com/

    • Marcado como Resposta Daniel Jonathan quinta-feira, 22 de novembro de 2012 17:28
    quinta-feira, 22 de novembro de 2012 12:42
    Moderador
  • Que isso Tiago, nunca a perda de tempo, pois não conhecia aquela biblioteca e agora conheço.
    Vou fazer os testes aqui agora e posto o resultado.
    quinta-feira, 22 de novembro de 2012 12:57
  • Tiago, muito obrigado, o exemplo acima funciona perfeitamente para mudança de status do pedido. 
    quinta-feira, 22 de novembro de 2012 17:29
  • Daniel,

    Além deste exemplo que o Eduardo passou, você pode usar uma biblioteca, o XrmServiceToolkit, existe um método que faz exatamente o que quer SetState:

    http://xrmservicetoolkit.codeplex.com/

    Att,


    Tiago Michelini Cardoso MVP - MCC - MCTS
    https://tiagomcardoso.wordpress.com/

    Muito útil essa biblioteca.

    Funcionou simplesmente incluindo ela nos meus web resources e chamando a linha de código no meu script que já executava diversas validações antes da alteração no status.

    Agora trabalhando para atualizar o formulário ao executar esse script pois só consigo ver a atualização do status quando dou um refresh no formulário.

    Obrigada!

    Elaine Tojal


    • Editado Elaine Tojal quinta-feira, 25 de setembro de 2014 17:27
    quinta-feira, 25 de setembro de 2014 17:24