【问题标题】:CRM 2011 external content with relative URL具有相对 URL 的 CRM 2011 外部内容
【发布时间】:2012-07-02 09:25:56
【问题描述】:

在 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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      该解决方案创建了对自定义的依赖项,但不是一个类似的环境,可用于非托管和托管解决方案。

      解决方案是在 ISV 文件夹中放置一个文件 Redirect.aspx。该代码不会以任何方式与 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>
      

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 这是我正在考虑的解决方案之一,但我担心它会很重(?)。客户端将要求表单 X,其中包含脚本 Y。当页面加载时,脚本 Y 将执行,从 CRM 服务器请求 URL,服务器将响应,并且 javascript 将作为示例更改 iframe 源。然后,客户端将从备用 URL 请求资源并获得响应 - 此时我们显示真实页面。所以两个跳转比一个相对路径加上依赖于客户端执行。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多