0

目前,我有两种不同的方法来决定我的 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 的方法(但不确定是什么)。如果不可能,我想建议一种方法来检测当前运行的脚本是否部署在在线或本地安装中。

该方法(如果有的话)将独立于版本(或至少它使用if语句检查当前运行的版本)也很重要。

4

2 回答 2

1
  1. 我不会使用parent.window.location.host(甚至不确定它是否受支持)。
  2. 无论是在线版本还是内部部署(不必要),您都会获得组织名称。
  3. 如果在安全 HTTP 上设置了本地部署(或者您还需要其他标志),则调用将失败。
  4. 我的建议是关注 CRM 2011(旧版本 4 使用 SOAP,而不是 REST)。
  5. 对于实际的OrganizationData服务,您可以使用下面的函数(或仅嵌入该行)。
function getOrganizationDataService(){
  return Xrm.Page.context.getServerUrl() 
    + "/XRMServices/2011/OrganizationData.svc";
}
于 2012-12-11T11:42:00.347 回答
1

我建议看一下这个示例:示例:使用带有 JavaScript 的 REST 端点创建、检索、更新和删除

尤其是:

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

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

Xrm.Page.context.getServerUrl() + "/XRMServices/2011/OrganizationData.svc/";
于 2012-12-11T08:42:09.880 回答