【问题标题】:crm 2011 IFD is not working using OData and Javascriptcrm 2011 IFD 无法使用 OData 和 Javascript
【发布时间】:2014-04-02 09:57:59
【问题描述】:

首先,我们的 crm 2011 是内部部署的。然后更改为 IFD(https://myservername.mycompany.com/ORGName/XRMServices/2011/Organization.svc)。当更改为 IFD 时,所有 OData 和 javascript 都无法正常工作。

本地中,我们使用服务器网址...
var lvSz_CRMServerURL = Xrm.Page.Context.getServerUrl(); 它适用于 OData 和 JS。

IFD 中,我们使用服务器 url..

var lvSz_CRMODataSvcURLEndpoint = Xrm.Page.context.prependOrgName("/XRMServices/2011/OrganizationData.svc"); Odata和JS功能不工作,无法访问。

当使用 prependOrgName 和 lvObj_XMLDocHnd2.open("GET", lvSz_ODataQueryURL, true) 时,lvObj_XMLDocHnd2.readyState1。(应该是4)

当使用 prependOrgName 和 lvObj_XMLDocHnd2.open("GET", lvSz_ODataQueryURL, false) 时,lvObj_XMLDocHnd2.readyState4 lvObj_XMLDocHnd2.status404(应为 200)。所以 OData 和 JS 都停止了,没有经过检查。

请给我任何建议。可能是配置或JS函数出了什么问题。

请看一下我的 OData 和 JS 函数

.....

function JS_GenerateQuotation() {
//debugger;
var opportunityId = Xrm.Page.data.entity.getId(); //Xrm.Page.getAttribute("new_opportunityid").getValue()[0].id;
var prepareQuotation;

//var lvSz_CRMServerURL = rootURL + "/GBGroupUAT"; 
//var lvSz_CRMODataSvcURLEndpoint = lvSz_CRMServerURL + "/XRMServices/2011/OrganizationData.svc";

var lvSz_CRMODataSvcURLEndpoint = Xrm.Page.context.prependOrgName("/XRMServices/2011/OrganizationData.svc");

var lvObj_XMLDocHnd2 = null;
lvObj_XMLDocHnd2 = new XMLHttpRequest();

var relatedEntity = "opportunity";
var lvSz_ODataQueryURL = lvSz_CRMODataSvcURLEndpoint + ((relatedEntity == "opportunity") ? "/OpportunitySet?$select=new_PrepareQuotation&$filter=OpportunityId eq guid'" + opportunityId + "'" : "");

lvObj_XMLDocHnd2.open("GET", lvSz_ODataQueryURL, false);
lvObj_XMLDocHnd2.setRequestHeader("Accept", "application/json");
lvObj_XMLDocHnd2.setRequestHeader("Content-Type", "application/json; charset=utf-8");
var lvArr_CRMRecordsMatchingSpecifiedGUID;

lvObj_XMLDocHnd2.onreadystatechange = function () {
    if (lvObj_XMLDocHnd2.readyState == 4) {
        if (lvObj_XMLDocHnd2.status == 200) {

            lvArr_CRMRecordsMatchingSpecifiedGUID = eval('(' + lvObj_XMLDocHnd2.responseText + ')');

            if (lvArr_CRMRecordsMatchingSpecifiedGUID == null || lvArr_CRMRecordsMatchingSpecifiedGUID == "" || lvArr_CRMRecordsMatchingSpecifiedGUID.d.results[0] == null) {

            }
            else {
                prepareQuotation = lvArr_CRMRecordsMatchingSpecifiedGUID.d.results[0].new_PrepareQuotation;
            }
        }
    }
}
lvObj_XMLDocHnd2.send();

if (prepareQuotation != false) {
    var GUIDvalue = Xrm.Page.data.entity.getId();

    var serverUrl = urlGenerateQuotation + GUIDvalue;

    var features = "location=no,menubar=no,status=no,toolbar=no,resizable=1";
    window.open(serverUrl, "_blank", features);
}
else {
    alert("Please prepare quotation.");
}

}

【问题讨论】:

  • 我可以知道哪个汇总版本吗?实际上,我们有 Infra 团队(硬件),所以我不确定他们是否已经安装。请让我知道我们需要安装哪个汇总。谢谢
  • rollup12 包含一个名为 getClientUrl msdn.microsoft.com/en-us/library/… 的方法,通常可以解决此类问题

标签: javascript dynamics-crm-2011 odata


【解决方案1】:

IFD OData 端点应如下所示:https://orgname.domain/XRMServices/2011/OrganizationData.svc

您可以在设置 -> 自定义 -> 开发者资源

下阅读正确的网址

从 UR12 开始,您应该使用取代 Xrm.Page.context.getServerUrl()Xrm.Page.context.getClientUrl() 来获取组织的基本 URL。

【讨论】:

  • 非常感谢您的帮助。按照建议,我使用 getClientURL() var lvSz_CRMServerURL = Xrm.Page.context.getClientUrl(); var lvSz_CRMODataSvcURLEndpoint = lvSz_CRMServerURL + "/XRMServices/2011/OrganizationData.svc";但 lvObj_XMLDocHnd2.readyState 为 4 但 lvObj_XMLDocHnd2.status 为 404(应为 200)。我还检查了 CRM 服务器汇总版本是汇总 16。请给我任何解决此问题的建议。
  • 大家好,现在我发现了一个不同的。当我使用 Xrm.Page.context.getClientUrl() 时,url 是“bn.aa.com.sg/Group”(这与更改为 IFD 之前的本地 url 链接相同)。当我使用 Xrm.Page.context.getServerUrl() 时,url 是“crmuat.aa.com/Group”。当我检查开发人员资源时,URL 是“crmuat.aa.com/Group”,与 getServerUrl() 相同。我也混淆了如何使用 OData 和 JS。(注意 url 是机密的示例链接)。谢谢。
  • IFD url 不应该像“域/组织”(即与 IFD 设置之前相同),我强烈怀疑您的 IFD/ADFS 配置中有问题(我不熟悉这些步骤不过,我会留给具有更深入专业知识的人来解决这个问题......)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-18
相关资源
最近更新 更多