Welcome to MSDN Blogs Sign in | Join | Help

При открытии большого количества окон в Microsoft Dynamics AX 2009 может появиться сообщение о превышении количества. Причина в превышении системных GDI ограничений при открытии большого количества форм, что может влиять на использование памяти. 

Есть два пути решения проблемы – загрузить обновление ядра Microsoft Dynamics AX или применить обходной путь с увеличением параметров в реестре:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ Windows\GDIProcessHandleQuota

согласно статье на MSDN.

Не секрет, что в AX 2009 наконец появился сервер приложений на базе 64 разрядной архитектуры. Его появление позволит решить часть имеющихся проблем, в частности с используемой сервисом памятью в 32 бит.

Причем компоненты на 32 бит также присутствуют.

Детали можно посмотреть в статье системных требований к версии:  http://www.microsoft.com/dynamics/ax/using/2009systemrequirements.mspx#EBF 

Инсталляционный пакет также содержит обе версии компонентов:

clip_image001

Но есть одна странность при развертывании сервера приложений AOS на платформе x64: название сервиса тем не менее ‘Ax32Serv’. Для исключения путаницы, проверьте что сервер установлен в C:\Program Files\Microsoft Dynamics AX\50\Server (или подобную папку в случае выборочной установки) вместо C:\Program Files (x86)\Microsoft Dynamics AX\50.

После тестирования, проведенного компанией Майкрософт, добавлены в качестве поддерживаемых версий следующие продукты и версии.

Продукты Майкрософт

Версии Dynamics AX

Microsoft Internet Explorer 8.0 (версия 8.0.6001.17184)

AX 4.0 SP2 и AX 2009.

Microsoft SQL Server 2008 SP1 (версия CTP 10.00.2520.00)

AX 4.0 SP2 (с ядром 4.0.2503.358) и AX 2009.

Замечание: Report Builder 2.0 не тестировался на совместимость

Microsoft BizTalk Server 2009

AX 4.0 SP2 и AX 2009.

Замечания:

· RFID также прошел тестирование

· BTS 2009 поддерживается только на Windows Server 2008

Возможно уже известно, что Майкрософт поддерживает не только собственные средства виртуализации, но и сторонние (например, VMware ESX 3.5 Update 2) для промышленного развертывания AX 2009.

В соответствии с объявленной поддержкой виртуализации следует обратить внимание на базовый принцип поддержки, отраженный в статье на сайте Майкрософт:

“Microsoft Dynamics AX 2009 is certified on Windows Server 2008 with Hyper-V Virtualization, and will support other virtualization solutions participating in the Server Virtualization Validation Program, consistent with the guidelines listed for all Microsoft software as part of Knowledge Base article 897615.

To use Hyper-V in a production environment, you must download the update for Windows Server 2008 described in Knowledge Base article 950050. The Beta version of Hyper-V, included by default with Windows Server 2008, is not supported.”

Если посмотреть на сайте Server Virtualization Validation Program, то нижеследующие компании, предоставляющие решения для виртуализации, формально подтвердили участие в программе. Майкрософт работает с данными компаниями по тестированию их решений в качестве платформ для Windows 2008. Для получения детальной информации предлагается обращаться непосредственно в компании – разработчики решений:

  • Cisco Systems, Inc.
  • Citrix Systems, Inc.
  • Novell, Inc.
  • Oracle, USA Inc.
  • Sun Microsystems
  • Unisys Corp.
  • Virtual Iron Software
  • VMware, Inc.

Это означает, что в случае успешного прохождения тестирования этих решений компанией Майкрософт, Майкрософт автоматически поддерживает эти решения по виртуализации для Microsoft Dynamics AX 2009 и последующих версий для разворачивания в промышленном окружении.

Программные продукты, уже прошедшие тестирование:

Данная статья подготовлена с помощью Windows Live Writer.

Стек вызовов в AX 2009 ограничен 400 вызовами для рекурсий.

Данная статья подготовлена с помощью Windows Live Writer.

Пакет управления Microsoft Dynamics AX (DAX) для Operations Manager 2007 предназначен для мониторинга и управления серверами пакетной обработки Application Object Server (AOS). Среди его возможностей: мониторинг состояния системных ресурсов и AOS, предупреждений, производительности, статус пакетных заданий, активности пользователей AX, событий с акцентом на возможность оперативного  реагирования на критические события.

В данный момент, бета версия 2 пакета AX для MOM 2007 доступна на сайте Майкрософт.

Данная статья подготовлена с помощью Windows Live Writer.

В отличие от предыдущих версий, пакетная обработка в  AX 2009 базируется на сервере, и не требует запуска клиентского приложения AX. Между тем, для обратной совместимости оставлена возможность использовать клиентские пакетные обработчики, основанные на тех же принципах, что и в версиях 3.0 и 4.0. Из-за этого возникает путаница.

Для того, чтобы настроить серверный пакетный обработчик, необходимо создать пакетную группу, и задать ее для запуска на сервере. Для самого сервера приложений опция ‘Сервер обработки пакетных заданий’ должна быть включена.

image

Выбор серверного или клиентского метода запуска регулируется свойством ‘RunOn’ для класса, базирующегося на RunBaseBatch.

Если свойство установлено в ‘Server’, используется серверный пакетный обработчик, автоматически запускающий задание для выбранной группы. Рекомендуется использовать этот путь.

Если значение ‘RunOn’ установлено в ‘Client’, то для выполнения пакета необходимо запустить клиента AX и периодическую процедуру обработки, как и в предыдущих версиях.

Самое интересное начинается при   ‘RunOn’, установленном в ‘CalledFrom’. Задание ставится в очередь на обработку в любом случае: при выбранной опции ‘Пакетная обработка’ – как клиентское, в обратном случае – как серверное. В общем, оставлять для такого класса значение ‘CalledFrom’, - значит с большой вероятностью иметь проблемы в будущем.

Данная статья подготовлена с помощью Windows Live Writer.

Развитие Microsoft Dynamics AX подразумевает вынос отчетности (по крайней мере – не оперативной) из системы средствами SSRS или SSAS. Поэтому, AX можно будет рассматривать как OLTP приложение и использовать общие методы оптимизации, подходящие для OLTP.

Недавно нашел в свободном доступе русскоязычное зеркало SQLCAT, рекомендую следующую статью: 

http://sqlcat.com/whitepapers_russian/archive/2008/10/30/sql-server-2005-oltp.aspx

Данная статья подготовлена с помощью Windows Live Writer.

Очень давно ничего не писал, год прошел, даже пароль пришлось восстанавливать :)

Недавно пришло письмо от коллеги:

“Помоги, пожалуйста, понять что это за звери такие:

1. У View, Table, Map появилось новое свойство – EntityRelationshipType на что влияет?

Я видел по коду это свойство использовалось в AIF, но хотелось бы знать для чего конкретно….

2. У EDT появились свойства PrecenseIndicatorAllowed, PrecenseClass, PrecenseMethod  по коду их применение не нашел…

Документацию мы найти по этим нововведениям не смогли.”

По первому вопросу информация есть на MSDN: http://msdn.microsoft.com/en-us/library/cc602654.aspx, описание примерно такое:

“The Reverse Engineering Tool supports a new model type. You can now use the Reverse Engineering Tool to generate an .erx file that can be used to create an entity relationship (ER) data model. An ER data model describes the data in a system and provides a means of visualizing tables, views, and their relationships. You can import an .erx file into modeling tools, such as Microsoft Office Visio and CA ERwin Data Modeler, where you can create an ER data model from the imported elements. For more information, see Reverse Engineering Tool Overview.

Several additional properties have been added to the Properties sheet to aid in describing application elements. The DeveloperDocumentation and EntityRelationshipType properties have been added to the Properties sheet for tables, views, and maps. The EntityRelationshipRole property has been added to the Properties sheet for table relations. These properties are helpful in describing application elements and how they relate. The descriptions for these properties are captured in the .erx file that is generated from the Reverse Engineering Tool and can be used in describing the elements within an ER data model.”

А PresenceIndicatorAllowed используется для интеграции с Office Communicator, которая появилась в AX 2009. Например, в Глобальной Адресной Книге, на закладке “Сведения о связи”.

Детали реализации можно посмотреть в классе DirPresenceInfo и для расширенного типа данных DirPartyId.

Данная статья подготовлена с помощью Windows Live Writer.

В предыдущей статье шла речь о работе утилиты тестирования производительности (BM) для Microsoft Dynamics AX, код стандартных примеров для которой был создан с помощью Microsoft Dynamics AX Object Wrapper (далее - AX Wrapper).   

 

AX Wrapper позволяет использовать уже существующие объекты Microsoft Dynamics AX и построить их вызов и обработку из Visual Studio.  AX Wrapper можно найти в стандартной поставке BM, в каталоге ProgrammingModel. Его использование довольно подробно рассмотрено в документации по BM.

При использовании мастера настройки AX Wrapper подразумевается, что поле 'Object Server' будет содержать строку, соответствующую значению строки доступа к AOS в конфигурационном файле, например 'bm@mow-mbs-2:2713'.

image

После прохождения мастера в проект Visual Studio будут добавлены интерфейсы ('wrappers') на C# для выбранных объектов из AOT (классы, перечислимые типы или таблицы). Интерфейсы позволяют получить доступ к объектам и обрабатывать исключения со стороны Visual Studio.

Надо помнить, что интерфейсы обращаются к объектам по имени, например к полям.

image

Внутри же Dynamics AX обращения и ссылки работают по идентификаторам объектов (Id). При переименовании объекта в AX придется искать и править код и в Visual Studio.

 

Данная статья подготовлена с помощью Windows Live Writer.

Тестирование производительности в DAX 3.0 в основном заключалось в использовании внутреннего модуля Benchmark (BM). У него были достоинства, были и недостатки.

В качестве серьезных недостатков могу привести невозможность использования реальных данных для тестирования и процесс записи данных тестирования/логов в собственную базу данных, что на больших тестах приводит к резкому росту отдельных таблиц. Процесс работы с ключами по ссылкам подразумевал сгенерированные данные, причем генерация должна была проводиться самим BM.

Расширение данного модуля требовало некоторых усилий, поскольку идеологически он был неким 'чужеродным' элементом в структуре модулей. С другой стороны, разобравшись с BM, можно было достаточно хорошо понять как работает Microsoft Dynamics AX 3.0 с точки зрения дизайна отдельных модулей.

 

В версии 4 изменилась схема имитаций действий пользователей, теперь запуск объектов Microsoft Dynamics AX выполняется из внешней среды с помощью средств Visual Studio (агент и котроллер) и Microsoft Dynamics AX Business Connector (COM и .NET).  Этим достигается определенный уровень универсализма, когда с помощью утилиты и Business Connector можно тестировать как объекты Microsoft Dynamics AX, так и сценарии работы с AIF (например, с BizTalk) или производительность веб-интерфейсов (Корпоративного Портала, например). 

Впрочем, идея почти та же, - запускаем некий агент на компьютерах-клиентах (серверах приложений) и контроллер на одном из компьютеров для управления ими, а также последующего сбора статистики.

Агенты через Business Connector (COM или .NET, в зависимости от настройки контекста) запускают объекты Microsoft Dynamics AX согласно сценарию.

 

Естественно, запустить выполнение формы или другого интерактивного объекта сложно, приходится эмулировать (повторять) поведение формы в других элементах Microsoft Dynamics AX, либо в коде Visual Studio.

Вообще-то, в BM версии DAX 3.0 в так называемом режиме 'Display independent' тоже запускались специальные классы, в которых эмулировалось поведение форм. Суффикс 'Batch' использовался для классов не интерактивного запуска, 'Display' - для запуска классов с формами и диалогами.

Строго говоря, вынос активных действий с интерактивных элементов (формы и диалоги) наметился в DAX 2.5 и получил развитие и для стандартной версии. Примерами могут служить классы поддержки форм журналов, например JournalFormTable и связанные с ним. Также начался вынос методов с форм на источники данных и таблицы.

 

Итак, новая утилита версии 4.0. 

Поскольку в стандартной поставке есть примеры для процесса разноски заказов на продажу (Sales Orders, SO), попробуем его настроить и запустить. Причем запустить 'малой кровью', не сильно вдаваясь в детали и по-минимуму изменяя настройки и код. 

Установил Visual Studio Team Suite (VSTS) как описано в документации.

Для работы понадобится еще Team Test Load Agent Controller и Team Test Load Agent, которые поставляются отдельно.

image

 

Запустил предоставляемый файл и распаковал все в C:\Benchmark.

Скопировал из каталога SalesAndDistribution файлы VSTestHost.exe.config в %Program Files%\Microsoft Visual Studio 8\Common7\IDE и QTAgent.exe.config в %Program Files%\Microsoft Visual Studio 2005 Team Test Load Agent\LoadTest.

Открыл каталог \bin и настроил все запускаемые файлы cmd на пути и сервера, которые есть у меня.

 

Открыл проект Benchmark.sln и пошел по шагам, описанным в 'Microsoft Dynamics AX Benchmark Toolkit Installation.doc':

  • Нажал  Build\Build the Solution (release).
  • Модифицировал setenv.cmd.
  • Отредактировал файлы настроек в \SalesAndDistribution

image 

  • Несмотря на то, что все запускается на одном и том же компьютере, настроил агента и контоллер, как удаленные.
  • Открыл Visual Studio 2005 Command Prompt.
  • Запустил deploy.cmd. 

image

  • Запустил runtest.cmd.

image

Ага, ругается, надо существующие данные в шаблоны экспортировать, как минимум список клиентов не совпадает :)

Создал группы определения для экспорта/импорта типа "Excel" и экспортировал реальные данные компании в документы каталога Datasource.

Попробую запустить тест. Копирую SalesAndDistribution.loadtest в Microsoft.Dynamics.Benchmark.TestProject, хотя ... можно было просто пути в cmd подправить.

Ок, поправил, пробую опять... 

За активностью можно следить как со стороны AX:

image

так и со стороны Visual Studio:

image

Ух, что-то выполнилось!

 image

Пойду смотреть логи.

В каталоге Results (в моем случае - C:\Results) можно найти текстовый файл LoadTest.log, описывающий что же собственно запускалось:

image

В каталоге Bin\Results (в моем случае - C:\Benchmark\Bin\Results) можно найти файл с расширением trx, который содержит значения счетчиков, настроенных для теста. Открыть его можно и в Visual Studio:

image

Хм, машинка слаба, загрузка процессоров слишком большая. Надо искать другой сервер? :)

 

Резюме:

  • Внимательно анализируйте установки и пути для копирования и запуска скриптов;
  • Если используете стандартные скрипты - установите все в каталог Benchmark;
  • Помните, что для запуска тестирования необходимо дополнительно установить Visual Studio Team Test Load Agent;
  • Генерация случайного выбора из справочников требует подготовленных данных - значений ключей ("E"+ числовое значение, преобразованное в строку);
  • Для работы можно использовать VSTS 2008 c Load Agent, если нет пробной версии VSTS 2005.

 

Теперь немного о самом модуле BM в DAX 4.

Часто слышу: "Как его использовать, он же бета?".  Данный модуль бета был оставлен для того, чтобы собрать как можно больше отзывов; бета стабильна и используется партнерами. Документация есть, хотя немного путанная. Судя по всему, BM в ближайшее время останется бетой.

Собственно, в DAX 3.0 BM был тоже своего рода вечной бетой, но вполне работоспособной. Более того, тестирование производительности не относится к модулям бизнес-процессов, сценарии (и, как правило, код) необходимо все равно изменять для модификаций или локализации.

Если Вы не собираетесь использовать BM даже в отдаленном будущем, имеет смысл прочитать его документацию, чтобы узнать побольше о Microsoft Dynamics AX Object Wrapper (о нем -  в следующей статье). Это может сильно облегчить переход к программированию в двух средах: AX и Visual Studio, поскольку интеграция становится все теснее... 

 

Данная статья подготовлена с помощью Windows Live Writer.

Вопросы с лицензированием портала продожаются сколько бы не писал (смотри  статью "О лицензиях COM и порталов").

Попробую описать подробнее.

 

С технической точки зрения, возможно использование Корпоративного Портал (Enterprise Portal Framework) без веб - пользователей (Web users), однако с точки зрения лицензии веб - пользователи необходимы для соответствия лицензионному соглашению. 

 

Для существующих клиентов использующих лицензирование по модулям (Module Based Licensing):

  • Требуется лицензия на Корпоративный Портал;
  • Требуется лицензия на 25 конкурентных веб - пользователей (Web users) как минимум; 
  • Требуется лицензия на один бизнес-коннектор (Business Connector, он же - клиент COM), связанный с Корпоративным Порталом;
  • Требуется лицензия на дополнительных клиентов COM, в зависимости от количества уникальных профилей / ролей (профили, имеющие различные настройки доступа к системе с точки зрения прав, в том числе и к данным). Например, если 100 веб-пользователей нуждаются в доступе к одним и тем же данным с одними правами, требуется только один Business Connector, если каждый из 100 веб-пользователей требует уникального доступа к данным, тогда необходимо 100 Business Connectors.

 

Существующие или новые клиенты, использующие бизнес - лицензирование (Business Ready Licensing):

  • Требуется одна лицензия Microsoft Dynamics Client for Microsoft Office (DCO) для каждого именованного пользователя AX, работающего через Web;
  • DCO включает в себя Корпоративный Портал (Enterprise Portal Framework), одного веб пользователя (Web user) + один бизнес-коннектор (Business Connector) для каждого именованного пользователя AX;
  • DCO доступен только для клиентов, имеющих расширенную лицензию  (Advanced Management)  и не доступен в случае базовой (Business Essentials).

 

Данная статья подготовлена с помощью Windows Live Writer.

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

Однако, не все так просто. В 3.0 и 4.0 для обеспечения некоего уровня поддержки мультизональности необходимо было разворачивать отдельный физический сервер приложений, настроенный на данную временную зону, для каждой из зон.

Кроме того, был некоторый момент корректности расчета для временных характеристик части функциональности. Например, при работе с рабочими центрами, находящихся в разных временных зонах.

 

В версии 2009 эти проблемы решили введением нового типа данных DateTime. Были разработы новые функции (фактически - интерфейс) взаимодействия с этим типом данных, которые в частности позволяют добавлять и удалять смещения относительно DateTime.

При использовании DataTime локальное время машины не используется, текущие типы даты (Date) и времени (Time) останутся как есть с ‘локальной’ семантикой.

В данном решении реализована поддержка семантики UTC для X++, доступа к данным и базе данных.

Общее правило для типов данных Date и Time:

  • Не используйте, если необходима поддержка временных зон
  • При переносе данных будут обновлены до UTC автоматически относительно текущей зоны

Соотвественно, при обновлении произойдет конвертация данных:

  • CreateDate и CreateTime - в CreateDateTime
  • ModifiedDate и ModifiedTime - в ModifiedDateTime

 

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

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

 

Данная статья подготовлена с помощью Windows Live Writer.

Видео с CES 2008, ссылка http://www.istartedsomething.com/20080107/bill-gates-last-day-microsoft-video/ 

Yeah, «magic of software» :)

(Comments Off)
Filed under:

DAX 2009 позволяет осуществлять доступ к авторизированным данным всех компаний из форм, запросов и кода X++. Поддерживаются все типы источников данных, включая табличные коллекции и представления. Правда не поддерживаются базовые структуры типа RecordInsertList и RecordSortedList.

С точки зрения изменений в коде введены новые ключевые слова в X++ и параметры структур запросов.

Новое ключевое слово для работы с компаниями в X++:

select crosscompany custTable // выборка по всем компаниям
       join custTrans
       where custTable.AccountNum == custTrans.AccountNum;

Есть возможность фильтрации в запросе с помощью контейнеров:

CustTable custTable;
Container companies;
;
companies = ["DMO", "DAT"];  // контейнер

while select crosscompany: companies  * from custTable // фильтрация
{

   ...
}

Произошли изменения работе с запросами, добавлен параметр работы с несколькими компаниями, AllowCrossCompany (Yes, No) в AOT и структуре запросов, использовать его можно, например, так:

Query     qr = new Query();

qr.allowCrossCompany(‘True’); // 'false' является умолчательным

Получить текущее значение фильтра по компаниям, изменить и очистить его можно следующим образом:

Query     qr = new Query();
container cons;
;
cons = qr.getCompanyRange();     
// компании в обработке

qr.addCompanyRange(‘DAT’);         // добавление компании в фильтр

qr.clearCompanyRange();              // очистка списка

 

Раз есть возможность получения данных по разным компаниям в результате одного запроса, то есть и возможность смотреть данные из разных компаний в одном гриде (изменением параметра в источнике данных формы, например):

image

 

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

   CustTable ct;
    ttsbegin;
    while select forupdate crosscompany ct
    {
        changecompany(ct.company())
        {
            ct.CreditMax += 10;
            ct.update();
        }
    }
    ttscommit;

В коде, указанном выше, используется метод company() для идентификации текущей компании. Естественно можно было бы использовать и поле DataAreaId в качестве идентификатора, подставив ct.DataAreaId в функцию changecompany. Разница же в том, что в случае табличной коллекции, company()  вернет правильный идентификатор реальной компании, а DataAreaID будет содержать значение/идентификатор виртуальной компании или реальной компании в зависимости от типа источника данных.

 

Данная статья подготовлена с помощью Windows Live Writer.

More Posts Next page »
 
Page view tracker