使用JavaScript创建用于调用OrganizationData.svc的URL字符串

时间:2012-12-11 07:45:20

标签: javascript dynamics-crm-2011

目前,我有两种不同的方法来决定运行我的JS的哪个版本的CRM。地址相似但仍然不同,具体取决于它是在线还是在内部。我试图整合它们但它仍然取决于变量,如下面的代码所示。什么是更整洁的解决方案(将为组织数据选择正确的服务URL)?

var isOnLine = true;
var organizationName = Xrm.Page.context.getOrgUniqueName();
var organizationUrl 
  = "http" + (isOnLine ? "s" : "") + "://" 
  + parent.window.location.host 
  + (isOnLine ? "" : "/" + organizationName)
  + "/XRMServices/2011/OrganizationData.svc";

最重要的是,我想要一种通过调用某事获取服务URL的方法(但不确定是什么)。如果不可能,我想建议一种检测当前运行的脚本是否部署在在线或内部部署安装的方法。

同样重要的是,该方法(如果有的话)将独立于版本工作(或者至少它使用检查语句当前运行的版本)。

2 个答案:

答案 0 :(得分:1)

我建议您查看此示例:Sample: Create, Retrieve, Update and Delete Using the REST Endpoint with JavaScript

特别是:

  

sample_ / Scripts / SDK.REST.js 一个可重用的通用库,它使用REST端点简化异步数据操作   网络资源。

特别是前几个有效构建REST OrganizationData端点的函数(我已经在这里删除了几个步骤,所以请务必查看示例代码):

Xrm.Page.context.getServerUrl() + "/XRMServices/2011/OrganizationData.svc/";

答案 1 :(得分:1)

  1. 我不会使用 parent.window.location.host (甚至不确定它是否受支持)。
  2. 你得到 organizationName ,无论是在线版本还是内部版本(不必要)。
  3. 如果在安全的HTTP上设置内部部署(或者您还需要其他标志),则呼叫将失败。
  4. 我的建议是专注于CRM 2011(旧版本4使用SOAP,而不是REST)。
  5. 对于实际的 OrganizationData 服务,您可以使用下面的功能(或只是嵌入该行)。
  6. function getOrganizationDataService(){
      return Xrm.Page.context.getServerUrl() 
        + "/XRMServices/2011/OrganizationData.svc";
    }