![]() |
#1 |
NavAx
|
Fact boxes
Добрый день
У нас возникли некоторые затруднения с производительностью, поэтому хотелось бы отключить те Fact Boxes, которые пользователям не нужны. Иначе говоря, задача отключить все Fact Boxes, кроме некоторых. Не подскажите способ как это сделать с минимальными телодвижениями? Заранее благодарю AX 2012 R2 CU9
__________________
Isn't it nice when things just work? |
|
![]() |
#2 |
Banned
|
Цитата:
Сообщение от macklakov
![]() Добрый день
У нас возникли некоторые затруднения с производительностью, поэтому хотелось бы отключить те Fact Boxes, которые пользователям не нужны. Иначе говоря, задача отключить все Fact Boxes, кроме некоторых. Не подскажите способ как это сделать с минимальными телодвижениями? Заранее благодарю AX 2012 R2 CU9 Оставить Visible = Yes для тех самых некоторых. Часа два работы при наличии списка этих форм, всяко в районе 15-30. Если уж хочется для всех форм то можно и джобик написать. Имея в виду что глобально SysClientPerf.FactBoxesEnabled отключать не подходит. |
|
|
За это сообщение автора поблагодарили: macklakov (2). |
![]() |
#3 |
Боец
|
Цитата:
Сообщение от macklakov
![]() Добрый день
У нас возникли некоторые затруднения с производительностью, поэтому хотелось бы отключить те Fact Boxes, которые пользователям не нужны. Иначе говоря, задача отключить все Fact Boxes, кроме некоторых. Не подскажите способ как это сделать с минимальными телодвижениями? Заранее благодарю AX 2012 R2 CU9 - набросал на скорую руку, произв. эксплуатацию не проходило - можно вынести в настройке конкретизацию, какие именно фактбоксы отключить \Classes\SysFormRun\isFormPart X++: // EVGA: 26.07.2016 public client static boolean isFormPart(FormRun _formRun, Args _args = null) { boolean ret; MenuItemName menuItemName; MenuItemObjectType menuItemObjectType; Args args; args = _formRun ? _formRun.args() : _args; if (args && args.menuItemType() == MenuItemType::Display) { menuItemName = args.menuItemName(); menuItemObjectType = new MenuFunction(menuItemName, MenuItemType::Display).objectType(); if (menuItemObjectType == MenuItemObjectType::FormPart || menuItemObjectType == MenuItemObjectType::InfoPart || menuItemObjectType == MenuItemObjectType::CueGroup) { ret = true; } } return ret; } X++: client static FormRun formRunClassOnClient(xArgs args) { SysSetupFormRun sysSetupFormRun; if (SysTaskRecorderEventManager::parmRecording()) { return SysTaskRecorderSetupFormRun::newArgs(args); } // EVGA: 26.07.2016 --> if (SysFormRun::isFormPart(null, args)) { return null; } // EVGA: 26.07.2016 <-- sysSetupFormRun = new SysSetupFormRun(args); return sysSetupFormRun; } Способ 2 "Без кастомизаций, но все-равно покодить" - Пробежаться по SysLastValue и отключить лишнее Вложение 10887 Последний раз редактировалось DSPIC; 28.09.2017 в 01:50. |
|
|
За это сообщение автора поблагодарили: mazzy (2), macklakov (11), Logger (15). |
![]() |
#4 |
Читатель
|
|
|
|
За это сообщение автора поблагодарили: mazzy (2). |
![]() |
#5 |
NavAx
|
Не вижу особого смысла. Если уж кодить конкретные формы, то проще, быстрее и надежнее удалить Part или выставить видимость No
__________________
Isn't it nice when things just work? Последний раз редактировалось macklakov; 03.08.2016 в 08:36. |
|
![]() |
#6 |
NavAx
|
Хм... Проверил как свойство работает. Оно меняет дефолтную видимость, которую пользователь может для себя лично менять. Т.е. имеет смысл job-иком или индусом проставить на ВСЕ Parts в системе свойство как No, а пользователь потом ручками включит то, что ему нужно/нравится.
__________________
Isn't it nice when things just work? Последний раз редактировалось macklakov; 03.08.2016 в 08:38. Причина: разобрался |
|
|
За это сообщение автора поблагодарили: ax_mct (3). |
![]() |
#7 |
Британский учённый
|
Цитата:
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще. |
|
|
За это сообщение автора поблагодарили: ax_mct (3). |
![]() |
#8 |
Читатель
|
Я не предлагал кодить конкретные формы. Перекройте в SysSetupFormRun
X++: public void run() { PartList partList; FormRun formPart; int idx; super(); partList = new PartList(this); for (idx = partList.partCount(); idx > 0; idx--) { formPart = partList.getPartById(idx); if (formPart) { formPart.design().visible(false); } } partList.finalize(); } |
|
![]() |
#9 |
NavAx
|
Так фишка в том, что помимо конкретных форм, партс тормозят всю систему в целом. Поэтому лучше чтобы пользователи активировали лишь то, что им реально нужно. Правда их может раздражать что при деплойменте иногда нужно бывает usage data обнулять и эти партс им надо будет заново видимыми делать.
__________________
Isn't it nice when things just work? |
|
![]() |
#10 |
NavAx
|
Этот код не работает, но он дал мне понимание почему мне этот подход не нравится. PartList выдает набор объектов. А это значит что они уже должны быть инициализированы. Значит query уже отработали. Т.е. проблему это не решит.
__________________
Isn't it nice when things just work? |
|
![]() |
#11 |
Боец
|
|
|
|
За это сообщение автора поблагодарили: macklakov (10). |
![]() |
#12 |
Banned
|
Цитата:
Цитата:
Способ 1 "Если хочется покодить"
- набросал на скорую руку, произв. эксплуатацию не проходило - можно вынести в настройке конкретизацию, какие именно фактбоксы отключить Вот самое минимальное это пройтись по свойствам форм. Без покодить, так как это создает риски - нефиг на спине слона высокие и красивые замки строить. Тут психология разная. Постоянный программист-работник на клиенте на "собственной" AX рад поразвлекаться. Но контрактник/партнер/подрядчик так рисковать просто не может. Поэтому должно быть тупое и скучное решение. |
|
|
За это сообщение автора поблагодарили: macklakov (2). |
![]() |
#13 |
NavAx
|
Очень хороший способ. Идеально подходит. Спасибо огромное. Только вот ax_mct прав. Чтобы этот способ применить нужно немного больше телодвижений сделать. Надо таблицу настроек прицепить, оттестить, собрать и формализовать требования к тому что показывать, а что нет, собственно расставить галочки... Т.е. мы обязательно так и сделаем, если время будет. Но конкретно сейчас просто сделать все невидимым быстрее и проще получается.
__________________
Isn't it nice when things just work? |
|
![]() |
#14 |
Участник
|
Немного не по теме топика, но спрошу.
Кто-нибудь в курсе, зачем таблица SysClientPerf сделана глобальной ? Почему она хранит настройки не в разрезе пользователей. Кто-нибудь кастомизировал хранение настроек производительности клиента в разрезе UserId ? |
|
Теги |
factboxes, formpart, partlist |
|
|