我想在CRM 2011中更改功能区按钮上的状态代码和状态代码。 我有调用SOAP的javascript函数:
if (typeof (Smpl) == "undefined") { Smpl = {}; }
Smpl.Items = {
change: function () {
var entityId = Xrm.Page.data.entity.getId().substr(1, 36);
var entityName = Xrm.Page.data.entity.getEntityName();
var entityState = 0;
var entityStatus = 100007891;
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'>" +
"<soap:Body><Execute xmlns='http://schemas.microsoft.com/crm/2007/WebServices'><Request xsi:type='SetStateDynamicEntityRequest'>" +
"<Entity><Id xmlns='http://schemas.microsoft.com/crm/2006/CoreTypes'>" + entityId + "</Id>" +
"<Name xmlns='http://schemas.microsoft.com/crm/2006/CoreTypes'>" + entityName + "</Name></Entity>" +
"<State>" + entityState + "</State>" +
"<Status>" + entityStatus + "</Status>" +
"</Request></Execute></soap:Body></soap:Envelope>";
var xHReq = new ActiveXObject("Msxml2.XMLHTTP");
xHReq.Open("POST", "http://my.full.com:80/web/mscrmservices/2007/CrmService.asmx", false);
xHReq.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/crm/2007/WebServices/Execute");
xHReq.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
xHReq.setRequestHeader("Content-Length", xml.length);
xHReq.send(xml);
var resultXml = xHReq.responseXML;
var errorCount = resultXml.selectNodes('//error').length;
if (errorCount != 0) {
var msg = resultXml.selectSingleNode('//description').nodeTypedValue;
alert(msg);
}
window.location.reload();
}
}
我会说整个代码都没问题,当然,它根本不起作用:/ 在谷歌上我发现了几个片段,但与我的代码没什么不同。 真的没有人通过javascript从功能区改变状态吗?
谢谢
答案 0 :(得分:1)
要更改实体的状态,您需要使用EntityMoniker,插件中的.net以及JScript中。
尝试以下链接中的代码:
答案 1 :(得分:0)
我在网上冲浪,因为我的一个朋友有同样的问题,我没有通过JScript改变CRM 2011中的状态代码,但我认为我有你的解决方案。
在我的朋友的情况下,他的状态码值格式错误,他使用0或1,服务返回错误告诉他,0或1不是正确的状态码值,然后我编码C#你必须在状态中输入一个Enumeration('Active'或'Inactive')的值,他将整数值改为'Active',并且soap调用运行正常。
如果您到达,请报告真实解决方案:)
见。