Публикация

Почему нельзя удалять первое рабочее место и раздел активностей в нём

...и что делать, если вы его уже удалили.

В интерфейсе системы BPMonline 5.X есть иконка с конвертом, которая, согласно инструкции:

Цитата:
отображает количество непрочитанных e-mail сообщений текущего
пользователя. Нажмите на кнопку, чтобы перейти к просмотру сообщений.

Суть её работы довольно проста: при нажатии открывается первое рабочее место, в разных продуктах называемое по-разному (на рисунке — "Продажи"), а в нём раздел "Активности" с фильтром по типу "e-mail".

иконка с конвертом

Проблема возникнет, если чисто пользовательскими средствами в разделе "Рабочие места" удалить первое рабочее место, либо же удалить из него раздел активности. При нажатии на иконку теперь будет банальный и некрасивый свал.

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

Отсюда простой вывод: не стоит удалять первое рабочее место. Если надо, его можно переименовать. Также раздел активностей в нём обязателен.

Если всё уже поломано, исправить ситуацию возможно. Открываем бизнес-процесс страницы MainPage, в обработчике события "Страница загружена" скрипте "Обработать Завершение Загрузки Страницы" (PageLoadCompleteScriptTask) в строке 124 находим следующий код:

string script = string.Format("{0}.on('settingstoolclick', function() {{\nthis.callPageMethod('ThrowEvent', {{signalName: 'SettingsChanged'}});\n}}, {0});", Page.MultiLevelTabs.ClientID);
script += string.Format("{0}.on('helptoolclick', function() {{\nthis.callPageMethod('ThrowEvent', {{signalName: 'HelpCalled'}});\n}}, {0});", Page.MultiLevelTabs.ClientID);
script += string.Format("{0}.on('click', function(el) {{\nlocation.replace('ViewPage.aspx?Id=5e5f9a9e-aa7d-407d-9e1e-1c24c3f9b59a&ActiveTabId=PageContainer_5ca0dabc8c894e1a9bb536407e1c4ef2_055063c98180e011afbc00155d04320c_830581929880e011afbc00155d04320c&action=selectemailfolder')}}, this)", Page.UnreadEmailCountButton.ClientID);

Тут конструкция 5ca0dabc8c894e1a9bb536407e1c4ef2_055063c98180e011afbc00155d04320c_830581929880e011afbc00155d04320c — идентификаторы записей в таблицах
  • SysModuleFolder — рабочие места
  • SysModule — разделы
  • SysModuleInSysModuleFolder — рабочие места в разделах (развязка)

SELECT * FROM SysModule
SELECT * FROM SysModuleFolder
SELECT * FROM SysModuleInSysModuleFolder

Находим новое рабочее место, ставшее первым, записываем его Id маленькими буквами и без дефисов. Второй Id остаётся прежним, это раздел "Активности". Третий идентификатор находится в таблице развязки как Id записи, связывающей первый со вторым.

Заменяем в коде два идентификатора, публикуем страницу и получаем работающую кнопку.

Нравится

Поделиться

12 комментариев

Спасибо Саше за статью, пригодилось!

PageContainer_5ca0dabc8c894e1a9bb536407e1c4ef2_055063c98180e011afbc00155d04320c_830581929880e011afbc00155d04320c&action=selectemailfolder

А яку роль виконує [selectemailfolder] в кінці конструкції?

В коде ActivitiesModulePage:

		public virtual bool ScriptTask2Execute(ProcessExecutingContext context) {
			var action = Page.Request.QueryString["action"];
if (!String.IsNullOrEmpty(action) && action.ToLower().Equals("selectemailfolder")) {
	(Page.BaseFolder.FindPageControlByName("TreeGrid") as TreeGrid).SelectNode("181f9d34-5dee-e011-a86b-00155d04c01d");
	(Page.BaseFolder.FindPageControlByName("DataSource") as DataSource).SetActiveRow(new Guid("181F9D34-5DEE-E011-A86B-00155D04C01D"));
	FolderId = new Guid("181F9D34-5DEE-E011-A86B-00155D04C01D");
	Page.ThrowEvent("FolderActiveRowChanged");	
}

Розбираю код:
5c8a4dec940949a69f4c75f624129142_055063c98180e011afbc00155d04320c_4facc3ee337049eab7b517de822e30c2

5C8A4DEC-9409-49A6-9F4C-75F624129142 - Письменные обращения

055063C9-8180-E011-AFBC-00155D04320C - Активности

4FACC3EE-3370-49EA-B7B5-17DE822E30C2 - пов'язує між собоюі
5C8A4DEC-9409-49A6-9F4C-75F624129142 - Письменные обращения
EC8425F0-A89F-4BE7-9792-75DDC41B6671 - Активности

Подивився, що
055063C9-8180-E011-AFBC-00155D04320C - Активности
має зв'язок з
D9327740-B874-4D02-93FD-D58DCD4B9345 - Сервис
74635219-5C62-4547-B869-C49FD83EED99 - Работа с запросами

ЗАПИТАННЯ:
а чому для розділів [Сервис] та [Работа с запросами] зафіксовано активність
055063C9-8180-E011-AFBC-00155D04320C

а для розділу [Письменные обращения]
зафіксовано активність
EC8425F0-A89F-4BE7-9792-75DDC41B6671

Це так і має бути, чи має місце якась плутанина ?

Посмотрите на даты создания того и другого раздела «Активности». Может, обе были изначально, а может быть, что кто-то создал одну из записей позже.

ідентичні

Сравните другие поля. Если всё совпадает, то может быть, что вторую запись создали случайно. Можете для теста всюду указать первую, проверить, не будет ли проблем.
В других базах вижу только 055063C9-8180-E011-AFBC-00155D04320C.

Замінив прив'язку в
4FACC3EE-3370-49EA-B7B5-17DE822E30C2
EC8425F0-A89F-4BE7-9792-75DDC41B6671 => 055063C9-8180-E011-AFBC-00155D04320C

Нічого не поламалось

В темі приведено код обробника для [Page.UnreadEmailCountButton].

Я так розумію, що раз мені треба попасти на звернення, то потрібно створити код обробника натиснення кнопки, яку я створив: [Page.NewServiceRequestLinkedButton].

Для цього потрібно

1) в ідентифікаторі провести заміну:
055063C9-8180-E011-AFBC-00155D04320C (Активности)
=>
58B3DD29-54E0-4B2E-97B1-DF8DF09EF2EC (Обращения)

2) замінити запис прив'язки
4FACC3EE-3370-49EA-B7B5-17DE822E30C2
=>
0DB7A74E-D18C-4CA3-A68E-56FD7FC761C9

3) добавити код обробника натиснення кнопки з новим кодом операції - [selectNewServiceRequestLinkedfolder].

script += string.Format("{0}.on('click', function(el) {{\nlocation.replace('ViewPage.aspx?Id=5e5f9a9e-aa7d-407d-9e1e-1c24c3f9b59a&ActiveTabId=PageContainer_5c8a4dec940949a69f4c75f624129142_58b3dd2954e04b2e97b1df8df09ef2ec_0db7a74ed18c4ca3a68e56fd7fc761c9&action=selectNewServiceRequestLinkedfolder')}}, this)", Page.NewServiceRequestLinkedButton.ClientID);

4) в [IncidentsModulePageEventsProcess] вклинитися в обробку повідомлення [PageLoadComplete]

var action = Page.Request.QueryString["action"];
if (!String.IsNullOrEmpty(action) && action.ToLower().Equals("selectNewServiceRequestLinkedfolder")) {
	(Page.BaseFolder.FindPageControlByName("TreeGrid") as TreeGrid).SelectNode("AD9E0A8F-A97C-42EB-8D23-0264F3A51171");
	(Page.BaseFolder.FindPageControlByName("DataSource") as DataSource).SetActiveRow(new Guid("AD9E0A8F-A97C-42EB-8D23-0264F3A51171"));
	FolderId = new Guid("AD9E0A8F-A97C-42EB-8D23-0264F3A51171");
	Page.ThrowEvent("FolderActiveRowChanged");	
}
// AD9E0A8F-A97C-42EB-8D23-0264F3A51171 - потрібний фільтр

Для остальных напомню, что начало обсуждения и зачем нужна эта кнопка — тут.:wink:

Все працює.

Ще одне запитаня: а що це за ідентифікатор 5e5f9a9e-aa7d-407d-9e1e-1c24c3f9b59a ?

SysSchemaId MainPage.

Показать все комментарии