none
[CRM 2011] Remover relacionamento NxN RRS feed

  • Pergunta

  • Preciso remover um relacionamento NxN, mas não estou conseguindo.

    Estou tentando usar a biblioteca  XrmServiceToolkit mas sem exito.

    Identifiquei 2 métodos que poderiam me ajudar mas não estou conseguindo usar, os métodos são?

    ==>XrmServiceToolkit.Rest.Disassociate()

    ==>XrmServiceToolkit.Soap.Disassociate()

    Alguém já utilizou algum destes metodos?

    Tentei também montar o XRl e dar um XrmServiceToolkit.Soap.Execute(), mas sem sucesso.

    O Xml que monto e o abaixo:

    "<soap:Envelope xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'>
      <soap:Body>
        <Execute xmlns='http://schemas.microsoft.com/xrm/2011/Contracts/Services' xmlns:i='http://www.w3.org/2001/XMLSchema-instance'>
          <Execute xmlns='http://schemas.microsoft.com/crm/2007/WebServices'>
            <Request xsi:type='DisassociateEntitiesRequest'>
              <Moniker1>
                <Id xmlns='http://schemas.microsoft.com/crm/2006/CoreTypes'>b5e7f6db-a931-e311-ae4c-001e0bc3844c</Id>
                <Name xmlns='http://schemas.microsoft.com/crm/2006/CoreTypes'>systemuser</Name>
              </Moniker1>
              <Moniker2>
                <Id xmlns='http://schemas.microsoft.com/crm/2006/CoreTypes'>3FCFFC8D-5637-E311-8929-001E0BC3844C</Id>
                <Name xmlns='http://schemas.microsoft.com/crm/2006/CoreTypes'>opportunity</Name>
              </Moniker2>
              <RelationshipName>tulus_systemuser_docente_opportunity</RelationshipName>
            </Request>
          </Execute>
        </Execute>
      </soap:Body>
    </soap:Envelope>"

    O erro e o abaixo:

    The formatter threw an exception while trying to deserialize the message: E
    rror in deserializing body of request message for operation 'Execute'. 
    The prefix 'xsi' is not defined. Line 1, position 322.

    terça-feira, 5 de novembro de 2013 14:02

Respostas

  • Boas Daniel,

    Com o XrmServiceToolkit.Rest.Disassociate tem a seguinte assinatura:

    function disassociateRecord(entityid1, odataSetName, entityid2, relationship, successCallback, errorCallback, async)

    Sendo um NxN nativo então não temos o nome da entidade para colocar no odataSetName. Por isso penso que não seja possível por este método. Mas não consigo confirmar se por exemplo é uma limitação do ODATA.

    Mas se você quiser pode usar o XrmServiceToolkit.Soap.Disassociate que basicamente vai fazer a mesma query que o do do artigo refere a assinatura deste método é a seguinte:

    function disassociate (relationshipName, targetEntityName, targetId, relatedEntityName, relatedBusinessEntities, callback)

    Veja aqui como está implementada, basta colocar as mesmas coisas que está a passar do método que funciona.

    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 terça-feira, 5 de novembro de 2013 17:21
    • Marcado como Resposta Daniel Jonathan segunda-feira, 9 de dezembro de 2013 17:43
    terça-feira, 5 de novembro de 2013 17:21

Todas as Respostas

  • Boas Daniel,

    Mas qual foi o erro que deu ao executar as funções? Veja este exemplo:

    XrmServiceToolkit.Rest.Disassociate(contactId, "ContactSet", accountId, "account_primary_contact",
                                        function () {alert('OK')},
                                        function (error) {alert(error.message);}, false
                                       );

    Veja este exemplo que também está no SDK.

    A mensagem SOAP parece-me não estar totalmente bem. Por exemplo dois elementos execute seguidos? Tente tirar o segundo.

    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 terça-feira, 5 de novembro de 2013 15:53
    terça-feira, 5 de novembro de 2013 15:52
  • Pedro, consegui realizar utilizando este artigo, mas gostaria de fazer utilizando o XrmServiceToolkit.Rest.Disassociate().

    Meu cenário e o seguinte:

    Tenho um relacionamento de NxN entre SystemUser e Opportunity , este relacionamento tem o nome de tulus_systemuser_docente_opportunityid.

    Você poderia me ajudar a passar os parâmetros do método XrmServiceToolkit.Rest.Disassociate() ?


    terça-feira, 5 de novembro de 2013 16:16
  • Boas Daniel,

    Com o XrmServiceToolkit.Rest.Disassociate tem a seguinte assinatura:

    function disassociateRecord(entityid1, odataSetName, entityid2, relationship, successCallback, errorCallback, async)

    Sendo um NxN nativo então não temos o nome da entidade para colocar no odataSetName. Por isso penso que não seja possível por este método. Mas não consigo confirmar se por exemplo é uma limitação do ODATA.

    Mas se você quiser pode usar o XrmServiceToolkit.Soap.Disassociate que basicamente vai fazer a mesma query que o do do artigo refere a assinatura deste método é a seguinte:

    function disassociate (relationshipName, targetEntityName, targetId, relatedEntityName, relatedBusinessEntities, callback)

    Veja aqui como está implementada, basta colocar as mesmas coisas que está a passar do método que funciona.

    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 terça-feira, 5 de novembro de 2013 17:21
    • Marcado como Resposta Daniel Jonathan segunda-feira, 9 de dezembro de 2013 17:43
    terça-feira, 5 de novembro de 2013 17:21