CRM 2011 - 通过javascript更改statecode + statuscode

时间:2011-10-21 14:26:45

标签: javascript soap dynamics-crm-2011

我想在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从功能区改变状态吗?

谢谢

2 个答案:

答案 0 :(得分:1)

要更改实体的状态,您需要使用EntityMoniker,插件中的.net以及JScript中。

尝试以下链接中的代码:

Set Status or State of a Record Using Jscript

答案 1 :(得分:0)

我在网上冲浪,因为我的一个朋友有同样的问题,我没有通过JScript改变CRM 2011中的状态代码,但我认为我有你的解决方案。

在我的朋友的情况下,他的状态码值格式错误,他使用0或1,服务返回错误告诉他,0或1不是正确的状态码值,然后我编码C#你必须在状态中输入一个Enumeration('Active'或'Inactive')的值,他将整数值改为'Active',并且soap调用运行正常。

如果您到达,请报告真实解决方案:)

见。