Partamos del siguiente ejemplo:
Se tiene la entidad personalizada jlc_documento la cual está asociada a las entidades contact y account. Siendo contact y account las entidades que tengan la vista asociada y jlc_documento los lookups. (El lookup creado de la relación contact-jlc_documento es jlc_documentocontactid y el lookup creado de la relación account-jlc_documento es jlc_documentoaccountid)
Se desea poder registrar como máximo 10 jlc_documentos por cada registro de contact y account.
La solución a este problema podría ser la siguiente:
var clienteId; var nroRegistros; var authenticationHeader; var xml; if (crmForm.FormType == 1) { if (crmForm.all.jlc_documentoaccountid.DataValue[0].id != null || crmForm.all.jlc_documentocontactid.DataValue[0].id != null) { if (crmForm.all.jlc_documentoaccountid.DataValue[0].id != null) { clienteId = crmForm.all.jlc_documentoaccountid.DataValue[0].id; } else { clienteId = crmForm.all.jlc_documentocontactid.DataValue[0].id; } authenticationHeader = GenerateAuthenticationHeader(); //Prepare the SOAP message. 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='logical'>" + "<entity name='jlc_documento'>" + "<filter type='or'>" + "<condition attribute='jlc_documentoaccountid' operator='eq' value='" + clienteId + "'/>" + "<condition attribute='jlc_documentocontactid' operator='eq' value='" + clienteId + "'/>" + "</filter>" + "</entity>" + "</fetch></fetchXml>" + "</Fetch>" + "</soap:Body>" + "</soap:Envelope>"; //Prepare the xmlHttpObject and send the request. var xHReq = new ActiveXObject("Msxml2.XMLHTTP"); xHReq.Open("POST", "/mscrmservices/2007/CrmService.asmx", false); xHReq.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/crm/2007/WebServices/Fetch"); xHReq.setRequestHeader("Content-Type", "text/xml; charset=utf-8"); xHReq.setRequestHeader("Content-Length", xml.length); xHReq.send(xml); //Capture the result var resultXml = xHReq.responseXML; //Check for errors. var errorCount = resultXml.selectNodes('//error').length; if (errorCount != 0) { var msg = resultXml.selectSingleNode('//description').nodeTypedValue; alert(msg); } //Process and display the results. else { //Capture the result and UnEncode it. var resultSet = new String(); resultSet = resultXml.text; resultSet.replace('<', '<'); resultSet.replace('>', '>'); // Create an XML document that you can parse. var oXmlDoc = new ActiveXObject("Microsoft.XMLDOM"); oXmlDoc.async = false; // Load the XML document that has the UnEncoded results. oXmlDoc.loadXML(resultSet); //Display the results. var results = oXmlDoc.getElementsByTagName('result'); nroRegistros = results.length; if (nroRegistros == 10) { alert("Se han registrado el número máximo de asociaciones"); window.close(); } } } }