Почему нельзя удалять первое рабочее место и раздел активностей в нём
...и что делать, если вы его уже удалили.
В интерфейсе системы BPMonline 5.X есть иконка с конвертом, которая, согласно инструкции:
отображает количество непрочитанных e-mail сообщений текущего
пользователя. Нажмите на кнопку, чтобы перейти к просмотру сообщений.
Суть её работы довольно проста: при нажатии открывается первое рабочее место, в разных продуктах называемое по-разному (на рисунке — "Продажи"), а в нём раздел "Активности" с фильтром по типу "e-mail".
Проблема возникнет, если чисто пользовательскими средствами в разделе "Рабочие места" удалить первое рабочее место, либо же удалить из него раздел активности. При нажатии на иконку теперь будет банальный и некрасивый свал.
Даже если опомниться и создать заново место или раздел в месте, это не поможет, ведь Id записей теперь другие.
Отсюда простой вывод: не стоит удалять первое рабочее место. Если надо, его можно переименовать. Также раздел активностей в нём обязателен.
Если всё уже поломано, исправить ситуацию возможно. Открываем бизнес-процесс страницы MainPage, в обработчике события "Страница загружена" скрипте "Обработать Завершение Загрузки Страницы" (PageLoadCompleteScriptTask) в строке 124 находим следующий код:
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 SysModuleFolder
SELECT * FROM SysModuleInSysModuleFolder
Находим новое рабочее место, ставшее первым, записываем его Id маленькими буквами и без дефисов. Второй Id остаётся прежним, это раздел "Активности". Третий идентификатор находится в таблице развязки как Id записи, связывающей первый со вторым.
Заменяем в коде два идентификатора, публикуем страницу и получаем работающую кнопку.
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 ?