| 
			
			 | 
		#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 | 
| 
	
	 | 
	
| Опции темы | Поиск в этой теме | 
| Опции просмотра | |
		
  |