2012-07-02 2 views
0

В CRM 4.0 мы могли размещать динамический контент (aspx) в папке ISV в CRM, создавая отдельные приложения, но с защитой и относительными URL-адресами для CRM, так, например, пользовательское представление 360 учетных записей могут быть связаны в IFRAME, используя относительный URL вдоль линийВнешний контент CRM 2011 с относительным 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.config.

Так я читаю это (в сочетании с руководящими принципами поддерживается/не поддерживается), что нам нужен отдельный веб-сайт в IIS с его собственной привязки, как вы не можете добавлять виртуальные каталоги и т.д. в соответствии со стандартом Приложение CRM. Это неудачно и не позволяет относительные пути/URL в настройках и sitemap. Это особенно важно при экспорте и импорте решений из DEV, TEST и/или PROD.

  • Являются ли мои допущения неправильными?
  • Можем ли мы как-то относительные пути?
  • Кто-нибудь еще нашел прагматичный и легкий подход к внешнему контенту, не делая изменения Sitemap и изменения настроек для каждой среды?

EDIT: Подтвержден с другими источниками, что мое понимание принципов являются правильным, так как это также указано в списке неподдерживаемых изменений. Виртуальные папки и веб-приложения должны быть полностью отделены от стандартного веб-сайта CRM.

Создание приложения IIS на веб-сайте Microsoft Dynamics CRM для любого VDir и, в частности, в папке ISV не поддерживается.

MSDN gg328350: Unsupported Customizations

ответ

1

Я нашел решение, подобное переадресации javascript, без необходимости выполнения клиентом и только один раз настраивая параметры среды (имя сервера, порт). Дополнительную логику можно легко добавить.

Решение создает зависимость в настройках, но не является средой, подобной и может использоваться для неуправляемых и управляемых решений.

Решение состоит в размещении файла Redirect.aspx в папке ISV. Код никоим образом не взаимодействует с CRM и не входит в поддерживаемые рекомендации, однако решение не является будущим доказательством, так как папка ISV устарела Microsoft.

Redirect.aspx будет автоматически проходить по любому переданному параметру, поэтому будет работать с идентификаторами объекта и без него.

Использование:

  • Поместите файл в папке ISV на сервере приложений CRM
  • Изменить имя сервера и порт для соответствия текущей среды (должен быть сделан для каждой среды)
  • В настройках, например, для фрейма, используйте следующее в качестве источника:

    /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> 
0

Не совсем «относительные URLs» по вашему вопросу, но решение, которое я использую для хранения «заглушки» или «корень» URL в конфигурации объекта и читать эти записи в JScript во время выполнения для определения полного назначения для ваших пользовательских ссылок.

+0

Это одно из решений, я имел в виду, но я боюсь, что это туда и обратно тяжелые (?). Клиент будет запрашивать форму X, содержащую скрипт Y. Когда страница загружается, выполняется сценарий Y, запрашивает URL-адрес с сервера CRM, сервер ответит, а javascript в качестве примера изменит источник iframe. Затем клиент запросит ресурс с альтернативного URL-адреса и получит ответ - и на этом этапе мы покажем реальную страницу. Таким образом, два прыжка больше, чем относительный путь, и полагаются на выполнение клиента. – Henrik

1

Если вам в первую очередь необходимо получить доступ к данным/записям CRM, ознакомьтесь с использованием веб-ресурсов jScript. Вы можете выполнять «большинство» операций CRUD с помощью служб REST OData. Если вы используете JQuery для анализа JSON, он очень продуктивен.