我正在使用现代SOAP端点和Sdk.Soap.js和Sdk.ExecuteMultiple.js执行一堆来自Javascript的创建请求。一切工作正常,除了当我得到响应项目,它注销每个响应项目相同的ID。我无法弄清楚如何从响应项目中获取id。在底部,我注销ID的位置,我一次又一次地注销了相同的ID。然而,所有的记录都被创建,并且它们都有唯一的ID。不知道如何获得所有的响应id。这里是我的代码:Dynamics CRM Sdk.ExecuteMultiple.js响应项目都具有相同的ID
createOpportunities = function(data) {
var createRequest = new Sdk.Collection(Sdk.OrganizationRequest);
var requestSettings = new Sdk.ExecuteMultipleSettings(true,true);
var pricelevel = {
'id': $("#season").find(':selected').data('pricelevelid'),
'name': $("#season").find(':selected').text()
};
var stage = {
'id': $("#stage").find(':selected').data('stageid'),
'name': $("#stage").find(':selected').text()
};
var product = {
'id': $("#product").find(':selected').data('productid'),
'name': $("#product").find(':selected').text()
};
var source = {
'id': $("#source").find(':selected').data('sourceid'),
'name': $("#source").find(':selected').text()
};
data.forEach(function(d,i){
var Opportunity = new Sdk.jms_opportunity();
Opportunity.JMS_ContactId.setValue(new Sdk.EntityReference('contact', d.contactid));
Opportunity.OwnerId.setValue(new Sdk.EntityReference('systemuser', d.ownerid.getId()));
Opportunity.JMS_pricelevelid.setValue(new Sdk.EntityReference('JMS_pricelevel', pricelevel.id));
Opportunity.JMS_stageid.setValue(new Sdk.EntityReference('str_ticketstage', stage.id));
Opportunity.JMS_ProductId.setValue(new Sdk.EntityReference('JMS_product', product.id));
Opportunity.JMS_sourceid.setValue(new Sdk.EntityReference('jms_source', source.id));
createRequest.add(new Sdk.CreateRequest(Opportunity));
});
var request = new Sdk.ExecuteMultipleRequest(createRequest, requestSettings);
Sdk.jQ.execute(request).done(function(resp) {
var responses = resp.getResponses();
responses.forEach(function(responseItem) {
var id = responseItem.getResponse().getId();
console.log(id);
});
}).fail(function(error) {
console.log(error);
});
};
编辑
做一些更多的调试后,响应体是回来与正确的GUID,但是当响应被解析相同的GUID被每次加解析函数循环...这就是我卡住的地方。
响应体:
<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">
<s:Body>
<ExecuteResponse xmlns=\"http://schemas.microsoft.com/xrm/2011/Contracts/Services\">
<ExecuteResult xmlns:a=\"http://schemas.microsoft.com/xrm/2011/Contracts\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\">
<a:ResponseName>ExecuteMultiple</a:ResponseName>
<a:Results xmlns:b=\"http://schemas.datacontract.org/2004/07/System.Collections.Generic\">
<a:KeyValuePairOfstringanyType>
<b:key>IsFaulted</b:key>
<b:value i:type=\"c:boolean\" xmlns:c=\"http://www.w3.org/2001/XMLSchema\">false</b:value>
</a:KeyValuePairOfstringanyType>
<a:KeyValuePairOfstringanyType>
<b:key>Responses</b:key>
<b:value i:type=\"c:OrganizationResponseCollection\" xmlns:c=\"http://schemas.microsoft.com/xrm/2012/Contracts\">
<c:ExecuteMultipleResponseItem>
<c:Fault i:nil=\"true\"/>
<c:RequestIndex>0</c:RequestIndex>
<c:Response>
<a:ResponseName>Create</a:ResponseName>
<a:Results>
<a:KeyValuePairOfstringanyType>
<b:key>id</b:key>
<b:value i:type=\"d:guid\" xmlns:d=\"http://schemas.microsoft.com/2003/10/Serialization/\">df07d3fb-862c-e511-bdfe-00155d01050d</b:value>
</a:KeyValuePairOfstringanyType>
</a:Results>
</c:Response>
</c:ExecuteMultipleResponseItem>
<c:ExecuteMultipleResponseItem>
<c:Fault i:nil=\"true\"/>
<c:RequestIndex>1</c:RequestIndex>
<c:Response>
<a:ResponseName>Create</a:ResponseName>
<a:Results>
<a:KeyValuePairOfstringanyType>
<b:key>id</b:key>
<b:value i:type=\"d:guid\" xmlns:d=\"http://schemas.microsoft.com/2003/10/Serialization/\">e107d3fb-862c-e511-bdfe-00155d01050d</b:value>
</a:KeyValuePairOfstringanyType>
</a:Results>
</c:Response>
</c:ExecuteMultipleResponseItem>
</b:value>
</a:KeyValuePairOfstringanyType>
</a:Results>
</ExecuteResult>
</ExecuteResponse>
</s:Body>
</s:Envelope>
在从这里采取微软的Sdk.ExecuteMultiple.js的ExecuteMultipleResponse功能:https://code.msdn.microsoft.com/SdkSoapjs-9b51b99a/sourcecode?fileId=113716&pathId=823928626的parseResponse功能是在那里我看到了相同的GUID得到确定,但我不知道有足够的了解解析XML知道这可能会出错。
this.ExecuteMultipleResponse = function (responseXml) {
///<summary>
/// Response to ExecuteMultipleRequest
///</summary>
if (!(this instanceof Sdk.ExecuteMultipleResponse)) {
return new Sdk.ExecuteMultipleResponse(responseXml);
}
Sdk.OrganizationResponse.call(this)
// Internal properties
var _isFaulted = null;
var _responses = null;
// Internal property setter functions
function _setIsFaulted(xml) {
var valueNode = Sdk.Xml.selectSingleNode(xml, "//a:KeyValuePairOfstringanyType[b:key='IsFaulted']/b:value");
if (!Sdk.Xml.isNodeNull(valueNode)) {
_isFaulted = (Sdk.Xml.getNodeText(valueNode) == "true") ? true : false;
}
}
function _setResponses(xml) {
var valueNode = Sdk.Xml.selectSingleNode(xml, "//a:KeyValuePairOfstringanyType[b:key='Responses']/b:value");
if (!Sdk.Xml.isNodeNull(valueNode)) {
_responses = parseResponses(valueNode);
}
}
function parseResponses(xml) {
//Using Sdk.Collection rather than create a new class for Microsoft.Xrm.Sdk.ExecuteMultipleResponseItemCollection
var rv = new Sdk.Collection(Sdk.ExecuteMultipleResponseItem);
for (var i = 0; i < xml.childNodes.length; i++) {
var emri = new Sdk.ExecuteMultipleResponseItem();
emri.setRequestIndex(parseInt(Sdk.Xml.selectSingleNodeText(xml.childNodes[i], "l:RequestIndex"), 10));
var faultNode = Sdk.Xml.selectSingleNode(xml.childNodes[i], "l:Fault");
if (!Sdk.Xml.isNodeNull(faultNode)) {
emri.setFault(new Sdk.ExecuteMultipleFault(faultNode));
}
else {
var responseName = Sdk.Xml.selectSingleNodeText(xml.childNodes[i], "l:Response/a:ResponseName") + "Response";
var responseXml = Sdk.Xml.selectSingleNode(xml.childNodes[i], "l:Response/a:Results");
emri.setResponse(new Sdk[responseName](responseXml));
}
rv.add(emri);
}
return rv;
}
您是否尝试过调试responseItem的其他属性,也许您使用的是错误的函数。 –
是的,还没有找到任何其他功能。我将.forEach改为:for(var i = 0; i
jmsims2
我自己并没有使用这个库,所以在这里猜测。该ID是否与记录ID匹配?也许它是一个代表响应的id而不是其中的记录。也许你应该尝试访问可能具有id的属性集合。例如。 xxx_entityid –