09.06.2010, 20:57 | #1 |
Участник
|
Enterprise Portal, создание user control'а
Enterprise Portal в AX2009, пытаюсь создать новый user control согласно файлу справки "How to: Create User Controls".
Оговорюсь при этом, что с изменением существующих контролов (к примеру EPPurchTableEdit) проблем не было. Так вот, создаю новый контрол в Visual Studio, сохраняю, устанавливаю в EP, создаю web page, добавляю в нее web part с моим контролом, после этого при попытке захода на эту страницу выдает следующую ошибку, страница не грузится. Код: An unexpected error has occurred. System.Web.HttpParseException: The directive 'control' is unknown. ---> System.Web.HttpParseException: The directive 'control' is unknown. ---> System.Web.HttpException: The directive 'control' is unknown. at System.Web.UI.TemplateParser.ProcessError(String message) at System.Web.UI.TemplateParser.ProcessDirective(String directiveName, IDictionary directive) at System.Web.UI.TemplateParser.ParseStringInternal(String text, Encoding fileEncoding) --- End of inner exception stack trace --- at System.Web.UI.TemplateParser.ProcessException(Exception ex) at System.Web.UI.TemplateParser.ParseStringInternal(String text, Encoding fileEncoding) at System.Web.UI.TemplateParser.ParseString(String text, VirtualPath virtualPath, Encoding fileEncoding) --- End of inner exception stack trace --- at System.Web.UI.TemplateParser.ParseString(String text, VirtualPath virtualPath, Encoding fileEncoding) at System.Web.UI.TemplateParser.ParseFile(String physicalPath, VirtualPath virtualPath) at System.Web.UI.TemplateParser.ParseInternal() at System.Web.UI.TemplateParser.Parse() at System.Web.Compilation.BaseTemplateBuildProvider.get_CodeCompilerType() ... и так далее Думал, проблема в моем коде. Взял один из стандартных контролов, код скопировал в новый, поменял шапки и название класса, чтобы совпадало с названием контрола, установил в EP - та же ошибка. В конце концов по максимуму очистил код, оставил только шапку в ascx и class definition в ascx.cs, установил в EP - та же ошибка. В EP точно все обновляется (мониторю файлы в "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\TEMPLATE\LAYOUTS\ep\"), и проблема в кэше, и в интернете ничего полезного по поводу этой ошибки тоже не обнаружил. Подскажите, куда смотреть? Что сделать, чтобы новый контрол не давал ошибки в EP? |
|
10.06.2010, 12:39 | #2 |
Участник
|
А какая операционная система установлена на сервере с EP?
У нас получилось заставить работать (иногда) новые user object'ы только на Windows Server 2003 32 bit. Новые user object'ы точно не деплоятся стандартными средствам на 64 битных платформах. |
|
10.06.2010, 12:57 | #3 |
Участник
|
Windows Server 2008 SP2 64 bit
А в чем разница, новый объект деплоить или измененный? Web Control и Managed Content Item в AOT добавили. Дальше идем по аналогии со стандартными контролами. Изменили в Visual Studio, сохранили, задеплоили - проверяем в EP. Или я что-то упускаю? |
|
10.06.2010, 13:07 | #4 |
Участник
|
Софтинка, которая переносит объект на портал 32 битная. На 64 битах не работает.
|
|
10.06.2010, 13:44 | #5 |
Участник
|
Проблема решена! В следующем посте напишу как.
А по поводу операционки: я знаю, что Administration > Setup > Internet > Enterprise Portal > Manage deployments на 64-битке не работает, и надо вместо этого использовать AxUpdatePortal.exe Однако сейчас я не совсем понимаю, что именно эта операция выполняет. Потому что если мне надо задеплоить объект, я кликаю правой кнопкой мыши на \Web\Web Files\Web Controls, выбираю Deploy - и все моментально появляется в EP. AxUpdatePortal вроде ничего не деплоит, все надо делать из AOT. Что же этот AxUpdatePortal, собственно, делает? |
|
10.06.2010, 14:02 | #6 |
Участник
|
Рассказываю, в чем была проблема
Итак, в Visual Studio создали Dynamics AX User Control (файлы, скажем, foo.ascx и foo.ascx.cs), сделали Add to AOT.
В AOT появился Web Control, но свойство Filename у него было пустым. Не знаю, нормальное ли это поведение, или оно обусловлено спецификой данной конфигурации, наличием TFS или еще чем-то. И вот это свойство Filename в AOT по ошибке установили в foo.aspx вместо foo.ascx. Опечатку было сложно заметить, потому что имя файла было длинным, а разница всего в один символ. Ну и так как aspx - это расширение для скриптов ASP.NET, портал спотыкался на первой же строчке: Код: <%@ Control Language="C#" AutoEventWireup="true" CodeFile="foo.ascx.cs" Inherits="foo" %> Такая вот получилась ерунда: в Visual Studio расширение ascx, а для EP Аксаптой создавался файл с расширением aspx. Как только свойство Filename поправили и сделали повторный деплоймент, все заработало. Ну и на всякий случай еще удалили сам файл aspx, так как Аксапта его сама не удалила. |
|
08.09.2010, 12:32 | #7 |
Участник
|
а возможно на аксаптийном портале использование каких-нибудь сложных контролов, ну например реализация деревьев... вот например как тут
http://www.microsoft.com/Businesssol...&lang=en&cr=US |
|
Теги |
enterprise portal |
|
|