CRM 2011外部内容与相对URL

时间:2012-07-02 09:25:57

标签: dynamics-crm dynamics-crm-2011 dynamics-crm-4

在CRM 4.0中,我们可以将动态内容(aspx)放在CRM中的ISV文件夹中,创建单独的应用程序,但具有CRM的安全性和相对URL,例如,可以使用iframe中的自定义360视图链接沿着

行的相对URL
  

/ISV/CrmMvcApp/Account.aspx/Overview?id = ....

在CRM 2011中,不推荐使用ISV文件夹,Microsoft对如何以受支持的方式(MSDN gg309571: Upgrade Code in the ISV folder to Microsoft Dynamics CRM 2011)过渡到这一点有一些指导。他们说:

  

对于Web资源功能无法满足的方案,请使用自己的web.config在自己的应用程序池中创建Web应用程序。

我正在阅读本文的方式(加上支持/不支持的指导原则)是我们需要在IIS中使用自己的绑定单独的网站,因为您不允许在标准CRM应用程序下添加虚拟目录等。这很不幸,并且不允许自定义和站点地图中的相对路径/ URL。这很麻烦,尤其是在从DEV,TEST和/或PROD导出和导入解决方案时。

  • 我的假设是错的吗?
  • 我们能以某种方式拥有相对路径吗?
  • 是否有其他人找到了一种实用且简单的方法来获取外部内容而不对每个环境进行站点地图和自定义更改?

编辑:与其他来源确认我对指南的理解是正确的,因为这也列在不受支持的更改列表中。虚拟文件夹和Web应用程序应与默认的CRM网站完全分开。

  

不支持在Microsoft Dynamics CRM网站内为任何VDir创建Internet信息服务(IIS)应用程序,特别是在ISV文件夹中。

MSDN gg328350: Unsupported Customizations

3 个答案:

答案 0 :(得分:1)

如果您主要需要访问CRM数据/记录,请查看使用jScript Web资源。您可以使用REST OData服务执行“大多数”CRUD操作。如果您使用JQuery来解析JSON,那么它非常高效。

答案 1 :(得分:1)

我找到了一个类似于javascript重定向的解决方案,无需客户端执行,只需配置一次环境详细信息(servername,port)。可以轻松添加其他逻辑。

该解决方案会在自定义项中创建依赖关系,但不会创建类似环境,并且可以用于非托管和托管解决方案。

解决方案是将文件Redirect.aspx放在ISV文件夹中。代码不以任何方式与CRM交互并且属于受支持的准则,但解决方案不是未来证明,因为Microsoft不推荐使用ISV文件夹。

Redirect.aspx会自动传递任何传递的参数,因此可以使用或不使用实体标识符等等。

用法:

  • 将文件放在CRM应用服务器上的ISV文件夹中
  • 更改服务器名称和端口以匹配当前环境(必须针对每个环境执行)
  • 在自定义中,例如对于iframe,请使用以下内容作为源:

    /ISV/Redirect.aspx?redirect=http://SERVERREPLACE/CustomMvcApp/SomeControllerAction
    

以下是Redirect.aspx

的内容
<%@ Page Language="C#" %>    
<html>
<script runat="server">
  protected override void OnLoad(EventArgs e)
  {
      // must be customized for each environment
      const string ServerBaseName = "appserver1:60001"; 
      const string UrlParameterName = "redirect";
      const string ReplacePattern = "SERVERREPLACE";

      var parameterUrl = Request.Params[UrlParameterName].Replace(ReplacePattern, ServerBaseName);

      var queryStringBuilder = new StringBuilder();

      foreach (var key in Request.QueryString.AllKeys)
      {
          if (key == UrlParameterName)
          {
              continue;
          }

          queryStringBuilder.Append(!(queryStringBuilder.Length > 0) ? "?" : "&");
          queryStringBuilder.Append(key + "=" + Request.QueryString[key]);
      }

      var completeRedirectString = parameterUrl + queryStringBuilder;

      Response.Redirect(completeRedirectString);
  }   
</script>
<head>
    <title>Redirecting</title>
</head>
</html>

答案 2 :(得分:0)

根据您的问题,不是“相对网址”,但我使用的解决方案是在配置实体中存储“存根”或“根”网址,并在运行时在JScript中读取这些记录,以确定您的完全限定目标自定义链接。