Usuário com melhor resposta
[CRM 2011] Consulta SOAP com Chrome

Pergunta
-
Senhores, estou atualizando meus JS para funcionar tanto no Internet Explorer quanto no Chorme, mas estou tendo dificuldades nas minhas consultas SOAP.
Alguns pontos na consulta estão me retornando erros como no exemplo abaixo, pesquisando achei os pontos no qual tenho que atualizar;
//Antigo var xHReq = new ActiveXObject("Msxml2.XMLHTTP"); //Atualizado var xHReq = new XMLHttpRequest();
Alguém tem um exemplo de consulta utilizando SOAP que funciona tanto no Internet quanto no Chrome?
Respostas
-
Boas Daniel,
Penso que você está seguindo o caminho certo, dê uma olhada neste post que tem essa mesma mudança. Outra solução e para mim a melhor é você usar OData, vê neste outro post como usar.
Se você continuar apanhar erros, coloque aqui o erro completo e algum código para perceber o que está falhando.
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, 2 de abril de 2013 16:09
- Marcado como Resposta Daniel Jonathan quarta-feira, 3 de abril de 2013 14:12
-
Daniel,
Por isso que devemos sempre que possível fazer o uso de bibliotecas como a XrmServiceToolkit, ela te abstrai a necessidade do crossbrowser, deixe por conta dos criadores da lib fazerem os ajustes, apenas desfrute das funções...
Att,
Tiago Michelini Cardoso MVP - MCC - MCTS
https://tiagomcardoso.wordpress.com/- Sugerido como Resposta Tiago Michelini CardosoMVP, Moderator terça-feira, 2 de abril de 2013 19:04
- Marcado como Resposta Tiago Michelini CardosoMVP, Moderator quarta-feira, 3 de abril de 2013 17:15
Todas as Respostas
-
Boas Daniel,
Penso que você está seguindo o caminho certo, dê uma olhada neste post que tem essa mesma mudança. Outra solução e para mim a melhor é você usar OData, vê neste outro post como usar.
Se você continuar apanhar erros, coloque aqui o erro completo e algum código para perceber o que está falhando.
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, 2 de abril de 2013 16:09
- Marcado como Resposta Daniel Jonathan quarta-feira, 3 de abril de 2013 14:12
-
-
Boas Daniel,
Coloque aqui o seu SOAP Request. Parece mal formação do XML, tenta uma query simples e vê se funciona. Senão coloque aqui o código de toda a chamada. Outra ajuda é veres o que estás a enviar faz um alert do xml e vê se as tags estão bem definidas.
Espero ter ajudado.
Pedro Azevedo Crm Specialist 4.0\2011
-
No primeiro exemplo ele utiliza:
xmlHttpRequest.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/crm/2007/WebServices/RetrieveMultiple");
Eu utilizo :
xmlHttpRequest.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/crm/2007/WebServices/Fetch");
Isso pode ser o problema?
-
Boas Daniel,
Em principio não, depende do modo como você quer ler o retorno, veja as diferenças:
Fetch Retrieves entity instances in XML format based on the specified query expressed in the FetchXML query language. Retrieve Retrieves an entity instance using the specified ID. RetrieveMultiple Retrieves a collection of entity instances based on the specified query criteria. Espero ter ajudado
Pedro Azevedo Crm Specialist 4.0\2011
-
Bom parece que e mesmo no envio, pois o erro que mencionei acima acontece logo apos o , xmlHttpRequest.send(xml);
Segue o XML da consulta:
"<?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'> <soap:Header> <CrmAuthenticationToken xmlns="http://schemas.microsoft.com/crm/2007/WebServices"> <AuthenticationType xmlns="http://schemas.microsoft.com/crm/2007/CoreTypes">0</AuthenticationType> <CrmTicket xmlns="http://schemas.microsoft.com/crm/2007/CoreTypes"></CrmTicket> <OrganizationName xmlns="http://schemas.microsoft.com/crm/2007/CoreTypes">SOTEC</OrganizationName> <CallerId xmlns="http://schemas.microsoft.com/crm/2007/CoreTypes">00000000-0000-0000-0000-000000000000</CallerId> </CrmAuthenticationToken> </soap:Header> <soap:Body> <Fetch xmlns='http://schemas.microsoft.com/crm/2007/WebServices'> <fetchXml><fetch mapping='logical'><entity name='account'><attribute name='accountid'/><link-entity name='account' to='accountid'><filter type='and'><condition attribute='new_cnpj' operator='eq' value='17.171.612/0001-40'/></filter></link-entity></entity></fetch></fetchXml> </Fetch> </soap:Body> </soap:Envelope>"
Segue o código:
var fetchMapping = "logical"; var entityName = "account"; var firstColumn = "accountid"; var linkEntity = "account"; var linkEntityTo = "accountid"; var filterType = "and"; var conditionAttribute = "new_cnpj"; var operator = "eq"; var value = "17.171.612/0001-40"; var authenticationHeader = Xrm.Page.context.getAuthenticationHeader() ; 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>" + "<Fetch xmlns='http://schemas.microsoft.com/crm/2007/WebServices\'>" + "<fetchXml><fetch mapping='" + fetchMapping + "'>" + "<entity name='" + entityName + "'>" + "<attribute name='" + firstColumn + "'/>" + "<link-entity name='" + linkEntity + "' to='" + linkEntityTo + "'>" + "<filter type='" + filterType + "'>" + "<condition attribute='" + conditionAttribute + "'" + " operator='" + operator + "' value='" + value + "'/>" + "</filter>" + "</link-entity>" + "</entity>" + "</fetch></fetchXml>" + "</Fetch>" + "</soap:Body>" + "</soap:Envelope>"; xmlHttpRequest = new XMLHttpRequest(); xmlHttpRequest.open("POST", "/mscrmservices/2007/CrmService.asmx", false); xmlHttpRequest.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/crm/2007/WebServices/Fetch"); xmlHttpRequest.setRequestHeader("Content-Type", "text/xml; charset=utf-8"); // xmlHttpRequest.setRequestHeader("Content-Length", xml.length); xmlHttpRequest.send(xml); result = xmlHttpRequest.responseXML.xml; if (window.DOMParser) { parser = new DOMParser(); doc = parser.parseFromString(xmlHttpRequest.responseText, "text/xml"); } else // Internet Explorer { doc = new ActiveXObject("MSXML2.DOMDocument"); doc.async = false; doc.loadXML(result); } if (doc.getElementsByTagName("name").length > 0) { var A = doc.getElementsByTagName("name").item(0).textContent alert(A); } else { var A = doc.getElementsByTagName("name").item(0).textContent alert(A); }
-
Daniel,
Por isso que devemos sempre que possível fazer o uso de bibliotecas como a XrmServiceToolkit, ela te abstrai a necessidade do crossbrowser, deixe por conta dos criadores da lib fazerem os ajustes, apenas desfrute das funções...
Att,
Tiago Michelini Cardoso MVP - MCC - MCTS
https://tiagomcardoso.wordpress.com/- Sugerido como Resposta Tiago Michelini CardosoMVP, Moderator terça-feira, 2 de abril de 2013 19:04
- Marcado como Resposta Tiago Michelini CardosoMVP, Moderator quarta-feira, 3 de abril de 2013 17:15
-
-
Ok, mas qual o problema em importar a lib e usar outra função?
Tiago Michelini Cardoso MVP - MCC - MCTS
https://tiagomcardoso.wordpress.com/ -
Nem tudo e tão fácil como queremos não e?
O problema e que tenho uma biblioteca em produção que faz um CRUD completo funcionando perfeitamente, pra mim refatorar tudo utilizando uma biblioteca nova e fazendo os tratamentos que já estão feitos e mas demorado($) que refatorar apenas uma parte do codigo.
Se poder me ajudar neste meu problema agradeço muito.
Obrigado.
-