【问题标题】:GenerateAuthenticationHeader() does not work in CRM 2013?GenerateAuthenticationHeader() 在 CRM 2013 中不起作用?
【发布时间】:2018-10-22 23:21:03
【问题描述】:

我们正在将 CRM 2011 升级到 CRM 2013。自定义代码验证工具标记了该方法:GenerateAuthenticationHeader()

问题是我将如何替换此方法以便它在 CRM 2013 中工作。因为当我运行它时它给了我“未定义”。

我查了很多资料。一个网站说使用 SDK REST,但它没有提供适当的信息。

如果您能告诉我如何替换 GenerateAuthenticationHeader() 方法,将不胜感激。

代码如下:

function GetAttributeValueFromID(sEntityName, sGUID, sAttributeName, isTextField)
{

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\">" + GenerateAuthenticationHeader() +
"  <soap:Body>" +
"    <Execute xmlns=\"http://schemas.microsoft.com/crm/2007/WebServices\">" +
"      <Request xsi:type=\"RetrieveRequest\" ReturnDynamicEntities=\"false\">" +
"        <Target xsi:type=\"TargetRetrieveDynamic\">" +
"          <EntityName>" + sEntityName + "</EntityName>" +
"          <EntityId>" + sGUID + "</EntityId>" +
"        </Target>" +
"        <ColumnSet xmlns:q1=\"http://schemas.microsoft.com/crm/2006/Query\" xsi:type=\"q1:ColumnSet\">" +
"          <q1:Attributes>" +
"            <q1:Attribute>" + sAttributeName + "</q1:Attribute>" +
"          </q1:Attributes>" +
"        </ColumnSet>" +
"      </Request>" +
"    </Execute>" +
"  </soap:Body>" +
"</soap:Envelope>" + "";

var xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");

xmlHttpRequest.Open("POST", "/mscrmservices/2007/CrmService.asmx", false);

xmlHttpRequest.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/crm/2007/WebServices/Execute");

xmlHttpRequest.setRequestHeader("Content-Type", "text/xml; charset=utf-8");

xmlHttpRequest.setRequestHeader("Content-Length", xml.length);

xmlHttpRequest.send(xml);

var result = null;

if (isTextField)
{
    result = xmlHttpRequest.responseXML.selectSingleNode("//q1:" + sAttributeName).text;

}
else
{

    result = xmlHttpRequest.responseXML.selectSingleNode("//q1:" + sAttributeName).getAttribute('name');

}
if (result == null)
{
    return '';
}
else
    return result;

}

【问题讨论】:

    标签: javascript dynamics-crm dynamics-crm-2011 dynamics-crm-2013


    【解决方案1】:

    GenerateAuthenticationHeader() 在 2013 年以后被弃用。您必须使用 OData 端点重写您的代码(仅供参考 - 此端点在 REST Web API 之后的 Dynamics 365 v9 中也已弃用)

    不再需要此功能,因为 2007 端点不再可用。要获取信息,您必须使用 Organization.svc 或 OrganizationData.svc 端点。查看以下文章 - http://msdn.microsoft.com/en-us/library/gg490659.aspx

    Reference

    这些 Web 服务中的每一个都可以在 Web 资源中使用 Microsoft Dynamics 365 应用程序提供的身份验证,而无需包含任何代码来实现身份验证。

    更新:

    Download & import CRM REST Builder - 这是一个托管解决方案,可以在 CRM 中导入和使用以构建/测试查询。

    示例请求URI如下,你可以参数化它。

    var oDataURI = Xrm.Page.context.getClientUrl()
           + "/XRMServices/2011/OrganizationData.svc/"
           + "AccountSet(guid'" + accountId + "')"
           + "?$select="
           + "Address1_PostalCode";
    

    Learn more

    【讨论】:

    • 你知道如何使用 OData 端点重写上面的代码吗?
    • 如何从这个方法返回一个值?因为它返回未定义。 SDK.REST.retrieveRecord("87EB1867-DD66-E511-A6D5-005056907E1B", "bch_signingauthority", "bch_Approver", null, function(result) { return result.bch_Approver.Name; //返回 undefined }, function(错误){ Xrm.Utility.alertDialog(error.message); });
    • 在其余的构建器中,结果如下: Tree Plain Text Copy Results Clean Results ⊗{bch_Approver:⊗{Id:"58f5da4f-0239-e411-b477-005056907e1b", LogicalName:"systemuser", Name:"Jessica McDonald" } } 数据在该方法中可用。但我想从那个方法中返回它。通常在 Javascript 函数中,您会返回结果。例如,如果您执行 Xrm.Utility.alertDialog(result.bch_Approver.Name) 您可以在警报框中看到数据,但我如何返回它。
    • @Ruruboy 您可以按照您在原始问题“返回结果”中所做的相同方式进行操作,如果您的原始问题已解决,请标记答案,如果您有任何其他问题,请提出新问题实施问题。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-12
    • 2016-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多