AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.02.2015, 12:23   #1  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
SysOperationFramework
Здравствуйте.

Создал контроллер, создал контракт данных. Появились два вопроса:

1) при запуске контроллера выдается ошибка "Не удается сериализовать параметр". Параметр - енум.
2) изменение контракта данных никак не сказывается на появляющемся диалоге. Причем я уже пробовал и удалять контракт полностью, затем импортировал его заново. Но добавление новых полей в этот контракт не приводит к изменениям диалога.
Старый 16.02.2015, 13:44   #2  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Для начала, почисти кэш

Сервис/Кэши/Обновить элементы

Ну и можешь остальные пункты меню там дернуть

По п.1 - возможно, надо сделать инкрементный CIL
Или отключить его выполнение
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: Logger (3), Eldar9x (5).
Старый 16.02.2015, 14:12   #3  
db is offline
db
Роман Долгополов (RDOL)
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
 
393 / 692 (24) +++++++
Регистрация: 01.04.2004
Адрес: Москва
про второй пункт
Microsoft Dynamics AX 2012 White Paper: Introduction to the SysOperation Framework
За это сообщение автора поблагодарили: Logger (3).
Старый 16.02.2015, 16:04   #4  
Kabardian is offline
Kabardian
Талантливый разгвоздяй
Аватар для Kabardian
 
424 / 338 (12) ++++++
Регистрация: 14.12.2008
Адрес: Москва
Записей в блоге: 14
Только недавно бурил тему SysOperation, вопросов больше чем ответов... Поэтому делюсь своими источниками по теме.

Для быстрого погружения советую статьи:
  1. AX2012: SysOperation introduction - это оглавление для цикла из трех вводных статей.
  2. Business Operation Framework and multi-threading - про многопоточность в пакетной обработке.

Наглядное сравнение SysOperation и RunBaseBatch:
  1. From RunBase to SysOperation : Business Operation Framework
  2. From RunBase to SysOperation : Business Operation Framework (Cont'd)

Ну и для глубокого погружения во фреймворк рекомендую книгу Microsoft Dynamics AX 2012 Services. Книга про сервисы в AX 2012, очень хорошо гуглится для бесплатного скачивания. Также есть книга для AX 2012 R2.

Последний раз редактировалось Kabardian; 16.02.2015 в 17:36.
За это сообщение автора поблагодарили: mazzy (2), Владимир Максимов (5), Logger (5), Krash (1), Stitch_MS (5), alex55 (1), pitersky (4), АртемМелихов (1).
Старый 07.08.2015, 09:23   #5  
АртемМелихов is offline
АртемМелихов
Участник
Аватар для АртемМелихов
 
120 / 10 (1) +
Регистрация: 18.12.2013
Адрес: Samara
добрый день, почему после "Создать Инкрементный CIL" я получаю ошибки по классам, которые вообще не входят в проект? Спасибо
Старый 07.08.2015, 09:43   #6  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Инкрементный CIL не настолько инкрементный, как может показаться Сборка приложения (Dynamics.Ax.Application.dll) состоит из примерно тысячи отдельных файлов - netmodule'ей, и минимальной единицей инкрементной компиляции CIL является такой netmodule. Ядро старается сделать netmodule'и примерно одинаковыми по размеру и для этого как-то там по-своему распределяет объекты приложения между ними. Таким образом, в общем случае при инкрементной компиляции CIL, во-первых, в netmodule кроме изменившихся объектов приложения попадает еще несколько десятков других объектов, которые не менялись, а во-вторых, если изменившихся объектов приложения много, весьма вероятно, что они попадут в несколько разных netmodule'ей. Из-за этого получается, что при инкрементной компиляции CIL после изменения даже одного объекта ядро перекомпилирует десятки и сотни объектов приложения. Проблемы с не изменившимися объектами при этом, как правило, возникают из-за проблем в компиляции кода X++; лечится это, соответственно, компиляцией кода X++ проблемных объектов либо глобальной компиляцией с помощью той же axbuild.
За это сообщение автора поблагодарили: EVGL (1), Logger (1), Polgid (1), АртемМелихов (1).
Старый 07.08.2015, 10:55   #7  
АртемМелихов is offline
АртемМелихов
Участник
Аватар для АртемМелихов
 
120 / 10 (1) +
Регистрация: 18.12.2013
Адрес: Samara
После ин.комп. получаю вот такую ошибку "невозможно создать запись в SysXppAssembly (SysXppAssembly). Запись уже существует." Что может помочь?
Старый 07.08.2015, 11:01   #8  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
trancate этой таблицы в базе модели и затем полная компиляция CIL
Старый 07.08.2015, 11:09   #9  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Инкрементный CIL не настолько инкрементный, как может показаться Сборка приложения (Dynamics.Ax.Application.dll) состоит из примерно тысячи отдельных файлов - netmodule'ей, и минимальной единицей инкрементной компиляции CIL является такой netmodule. Ядро старается сделать netmodule'и примерно одинаковыми по размеру и для этого как-то там по-своему распределяет объекты приложения между ними.
А мы можем влиять на это распределение ?
Например запихнуть туда объекты из одного проекта или относящиеся к одному конф. ключу. Чтобы фрагментацию уменьшить.
Старый 07.08.2015, 11:47   #10  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
М... похоже, что можно В \Classes\SysCompileIL\generateIncrementalIL есть такой код:
X++:
// Dump incremental xml files
changeFound = !dumpChanges || SysCompileIL::dumpIncrementalBulk();
if(changeFound)
{
    AppVersionStr = ApplicationVersion::applBuildNo();
    AppVersion = new System.Version(AppVersionStr);

    xppILAppDomain = xApplication::XppILAppDomain();

    parameters = new Microsoft.Dynamics.Ax.Xpp.GeneratorParameters();
    parameters.set_AppVersion(AppVersion);
    parameters.set_AssemblyName(#XppDllName);
    parameters.set_EnableDebugging(true);
    parameters.set_EnumFile(xmlPath + '\\Enums.exml');
    parameters.set_NumberOfModules(#NumberOfModules);
    parameters.set_WritePath(writePath);
    parameters.set_XmlPath(xmlPath);
    parameters.set_OldAssemblyName(xppAssemblyPath);
    parameters.set_GeneratorAppDomain(xppILAppDomain);
    parameters.set_IsDebug(Debug::isDebugOnAOSEnabled());
    parameters.set_LogFolderPath(writePath);

    modifiedModules = Microsoft.Dynamics.Ax.Xpp.XppILGenerator::GenerateIncrementalAssembly(parameters);
Здесь видно, как собственно запускается инкрементная компиляция. А вот в вызываемом методе SysCompileIL::dumpIncrementalBulk() есть такие интересные строчки:
X++:
SysModelElement sysModelElementChildren, sysModelElementSameBucket;
SysModelElementData sysModelElementData;
SysCompileILTable sysCompileILTable, sysCompileILTableSelfJoin;

// insert any type that has changed.
insert_recordset sysCompileILTableSelfJoin(Name, ModelElement, ElementType, AxId, GenerateType)
select Name, RecId, ElementType, AxId, generateType from sysModelElementSameBucket
exists join sysModelElementChildren where sysModelElementChildren.ParentModelElement == sysModelElementSameBucket.RecId
    && (sysModelElementChildren.ElementType == UtilElementType::ClassInstanceMethod
    || sysModelElementChildren.ElementType == UtilElementType::ClassStaticMethod
    || sysModelElementChildren.ElementType == UtilElementType::TableInstanceMethod
    || sysModelElementChildren.ElementType == UtilElementType::TableStaticMethod
    || sysModelElementChildren.ElementType == UtilElementType::TableRelation
    || sysModelElementChildren.ElementType == UtilElementType::TableField)
exists join sysModelElementData where sysModelElementData.ModelElement == sysModelElementChildren.RecId && sysModelElementData.ModifiedDateTime >= modifiedDateTime;

// Insert types in same bucket as types that changed
update_recordset sysCompileILTableSelfJoin setting NetModuleId = (sysCompileILTableSelfJoin.AxId / #GroupSize) mod #NumberOfModules;
insert_recordset sysCompileILTable(Name, ModelElement, ElementType, AxId, GenerateType)
select Name, RecId, ElementType, AxId, generateType from sysModelElementSameBucket
where sysModelElementSameBucket.ElementType == UtilElementType::Class || sysModelElementSameBucket.ElementType == UtilElementType::Table
exists join sysCompileILTableSelfJoin where sysCompileILTableSelfJoin.NetModuleId == (sysModelElementSameBucket.AxId / #GroupSize) mod #NumberOfModules;
Самое интересное тут - установка поля SysCompileILTable.NetModuleId:
X++:
update_recordset sysCompileILTableSelfJoin setting NetModuleId = (sysCompileILTableSelfJoin.AxId / #GroupSize) mod #NumberOfModules;
Используемые при его вычислении макросы #GroupSize и #NumberOfModules определены в \Macros\XppIL:
X++:
#define.NumberOfModules(1000)
#define.GroupSize(10)

Последний раз редактировалось gl00mie; 07.08.2015 в 11:50.
За это сообщение автора поблагодарили: mazzy (5), Logger (5), Jorj (1), S.Kuskov (5).
Теги
cil, runbase, sysoperation framework, документация, инкрементный cil, полезное

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Axilicious:SysOperationFramework : Field display order Blog bot DAX Blogs 0 23.02.2012 18:12
Axilicious:SysOperationFramework : Field display order Blog bot DAX Blogs 0 09.12.2011 23:12
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 22:04.