16.02.2015, 12:23 | #1 |
MCTS
|
SysOperationFramework
Здравствуйте.
Создал контроллер, создал контракт данных. Появились два вопроса: 1) при запуске контроллера выдается ошибка "Не удается сериализовать параметр". Параметр - енум. 2) изменение контракта данных никак не сказывается на появляющемся диалоге. Причем я уже пробовал и удалять контракт полностью, затем импортировал его заново. Но добавление новых полей в этот контракт не приводит к изменениям диалога. |
|
16.02.2015, 13:44 | #2 |
Участник
|
Для начала, почисти кэш
Сервис/Кэши/Обновить элементы Ну и можешь остальные пункты меню там дернуть По п.1 - возможно, надо сделать инкрементный CIL Или отключить его выполнение
__________________
Axapta v.3.0 sp5 kr2 |
|
|
За это сообщение автора поблагодарили: Logger (3), Eldar9x (5). |
16.02.2015, 14:12 | #3 |
Роман Долгополов (RDOL)
|
|
|
|
За это сообщение автора поблагодарили: Logger (3). |
16.02.2015, 16:04 | #4 |
Талантливый разгвоздяй
|
Только недавно бурил тему SysOperation, вопросов больше чем ответов... Поэтому делюсь своими источниками по теме.
Для быстрого погружения советую статьи:
Наглядное сравнение SysOperation и RunBaseBatch:
Ну и для глубокого погружения во фреймворк рекомендую книгу 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 |
Участник
|
добрый день, почему после "Создать Инкрементный CIL" я получаю ошибки по классам, которые вообще не входят в проект? Спасибо
|
|
07.08.2015, 09:43 | #6 |
Участник
|
Инкрементный 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 |
Участник
|
После ин.комп. получаю вот такую ошибку "невозможно создать запись в SysXppAssembly (SysXppAssembly). Запись уже существует." Что может помочь?
|
|
07.08.2015, 11:01 | #8 |
Участник
|
trancate этой таблицы в базе модели и затем полная компиляция CIL
|
|
07.08.2015, 11:09 | #9 |
Участник
|
Цитата:
Сообщение от gl00mie
Инкрементный CIL не настолько инкрементный, как может показаться Сборка приложения (Dynamics.Ax.Application.dll) состоит из примерно тысячи отдельных файлов - netmodule'ей, и минимальной единицей инкрементной компиляции CIL является такой netmodule. Ядро старается сделать netmodule'и примерно одинаковыми по размеру и для этого как-то там по-своему распределяет объекты приложения между ними.
Например запихнуть туда объекты из одного проекта или относящиеся к одному конф. ключу. Чтобы фрагментацию уменьшить. |
|
07.08.2015, 11:47 | #10 |
Участник
|
М... похоже, что можно В \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); 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; X++: update_recordset sysCompileILTableSelfJoin setting NetModuleId = (sysCompileILTableSelfJoin.AxId / #GroupSize) mod #NumberOfModules; X++: #define.NumberOfModules(1000) #define.GroupSize(10) Последний раз редактировалось gl00mie; 07.08.2015 в 11:50. |
|
|
За это сообщение автора поблагодарили: mazzy (5), Logger (5), Jorj (1), S.Kuskov (5). |