Намагаюся розібратися зі скриптом [PageLoadCompleteScriptTask].
В ньому використовуються значення полів, взяті наступним чином:

Page.ProductCategoryEdit.Value;
Page.HasAnalogsCheckBox.Checked;
Page.IsAdditionalHandlingRequiredCheckBox.Checked;
...

Значення отримую нульові, або інакше - в них ще не відобразилися значення з DataSource.
Якщо зчитати відповідні значення з DataSource, то все гаразд, є значення.
Але таке застосування не буде коректним.

Коли значення описаних полів ([Page...]) використовую у відповідному обробнику, що був описаний в [InitScriptTaskExecute], то на цьому етапі значення вже присутні.

Запитання: в який момент прописуються значення описаних полів ?
Куди потрібно прописувати логіку, яка спирається на вказані значення ?
Чи, що треба зробити, щоб поля гарантовано отримали свої значення ?

Нравится

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

Игорь, здравствуйте!

"Ігор Андрусенко" написал:в який момент прописуються значення описаних полів ?

Значение интерфейсных полей изначально прописываются на клиентской части при помощи DataSource. Определение значений на сервере происходит, когда страница вернется с клиентской части.

"Ігор Андрусенко" написал:Куди потрібно прописувати логіку, яка спирається на вказані значення ?

Логику можно прописывать, например, на событиях изменений значений полей, на подготовку фильтров Lookup полей.
Не могли бы Вы описать логику применения значений полей и почему Вас не устраивает использование DataSource?
Спасибо

"y.perevjazko" написал:Не могли бы Вы описать логику применения значений полей и почему Вас не устраивает использование DataSource?

Мабуть справа в організації процесу оновлення полів.

На карточці заявки на внесення змін є пара полів типу дата.
Значення дат розраховуються в методі SetDeadlineDate().

Якщо метод запускається з якого-небудь обробника, то значення в полях фіксуються, в разі якщо обробник відпрацьовує.

А якщо метод запускається в скрипті PageLoadCompleteScriptTaskExecute,
то значення залишаються не зафіксованими.

Я так розумію, що обробник відпрацьовує по AJAX і дає миттєвий результат, а результат відпрацювання по скрипту фіксується після ситуативного надсилання даних на сервер.

Тому зараз запитання я б сформулював наступним чином:
Як заставити здійснити відправку даних на сервер не через обробник зміни значення якогось поля, а в примусовому порядку, у скрипті PageLoadCompleteScriptTaskExecute ?

Сделайте методу булевский параметр, на PageLoadComplete запускаете SetDeadlineDate(true), из других мест — SetDeadlineDate(false). Внутри метода в зависимости от параметра пишите или в поле датасорса (на PageLoadComplete), или в контрол на карточке.

Дещо "косим" способом запускаю метод:
вставив метод SetDeadlineDate() у скрипт обробки повідомлення SetTaskOwnerButtonClick (натиснення кнопки "Установить Content-менеджера").
При натисненні кнопки метод відпрацьовує, візуально значення змінюється.

Але далі отримав наступну мороку:
коли при першому натисненні кнопки вичитую його обома способами:

Page.DeadlineDateEdit.Value
Page.DataSource.ActiveRow.GetTypedColumnValue<DateTime>("DeadlineDate");

то отримую незмінене значення, не те, що в цей момент видно в полі карточки.
Вже коли вікно вибору менеджерів закриваю і потім повторно натискаю кнопку, тоді вичитується значення, яке було підставлене при попередньому натисненні-відпрацюванні SetDeadlineDate().

Це я вже з огляду на даний факт писав про AJAX.
Тому й питання щодо примусової відправки даних на сервер залишається актуальним, бо необхідність двічі розкривати вікно вибору Content-менеджерів навряд чи порадує виконавців.

Что это за окно выбора менеджеров? Оно открывается по кнопке? Как оно связано с полем?
Какой это продукт?

Так по кнопці відкривається вікно OwnerSelectionGridPage
З полем воно пов"язане таким чином:

UserConnection.SessionData["customDeadLine"] = Page.DeadlineDateEdit.Value;

Продукт: ServiceDesk
Я так розумію, що це додаткова розробка.

Але зважаючи на те, що при першому натисненні кнопки значення поля DeadlineDateEdit залишається неоновленим, то й у вікно передається неактуальне значення.
При другому - актуальне.

Возможно, проблема в том, что это поле некорректно заполнилось в другом месте на карточке, где ему присваивалось значение.

Рекомендуется всюду присваивать через

Page.DataSource.ActiveRow.SetColumnValue("DeadlineDate", DeadlineDate);

а не

Page.DeadlineDateEdit.Value = DeadlineDate;

Значення прописується ось так:

Page.DeadlineDateEdit.SetValue(deadlineDate);

Я так собі уявляю процес:
Значення прописується на боці клієнта, без відправки на сервер.
Тому не обновляється DataSource і, відповідно, зчитується не оновлене значення.
А при відкритті/закритті вікна по кнопці відбувається відправка даних, тому при наступному відпрацюванні SetDeadlineDate() показує, що значення вже оновлені.

А если заменить на Page.DataSource.ActiveRow.SetColumnValue ?

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

Впроваджую ручний розподіл контент-менеджерів по запитах.
Зустрівся з таким фактом:
При формуванні списку пар дат випадають деякі дні із загального списку.

Дослідив,- використовується для роботи "Базовый календарь".

Загалом є такі календарі в системі:
Базовый календарь
Тестовый календарь
Капран Владислав

Для роботи список днів має бути без вихідних (які, я так розумію, і випадають із загального списку дат ).

Мені можна взяти до роботи "Тестовый календарь" ? (Я подивився за червень - всі дні присутні)

Чи потрібно забезпечувати якесь інше рішення ?

Нравится

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

Можно создать свой календарь в справочника «Календари» и там определить все дни рабочими. Или отредактировать какой-то из существующих.
Обычно есть один базовый календарь, он определяется системной настройкой. А остальные календари определены относительно него, то есть в новом календаре для дней недели «Суббота» и «Воскресенье» поставить галочку «Отличается от родительского календаря» и задать их рабочими.
calendar

Проставив у базовому всі дні робочими з 07:00 до 20:00.
Все добре, окрім дати 2015.06.05, вона у мене чомусь відображається в 3-х екземплярах:
StartDate EndDate
2015-06-05 14:16:49.000 2015-06-05 18:00:00.000
2015-06-05 14:16:49.000 2015-06-05 20:00:00.000
2015-06-05 14:16:49.000 2015-06-05 18:00:00.000

і, як видно, у двох у кінечний час підставлено попереднє значення - 18:00.

Де це воно визначено, чи можу я зайве прибрати, в у списку періодів всі три і відображаються

Хоча візуально важко розпізнати, що саме відображається.

Думаю, лучше не трогать базовый календарь, а создать или изменить какой-то другой.
Окна «Страница выбора Content-менеджера» я у себя не вижу. Вероятно, это какая-то проектная доработка. Обратитесь лучше к тем, кто его разрабатывал.

Це в календарних таблицях зафіксувались записи для різних часових інтервалів.
Інструменту для чистки немає. Та для тестової бази воно й неважливо.

Краще створити новий календар і прописати його в карточках контент-менеджерів ?

Да, лучше новый.

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

Не могу разобраться с базовыми вещами.
Скачать мануал Bpm’online Автоматизация бизнес-процессов Руководство пользователя

Первая же простейшая инструкция ставит в тупик.

Я в непонятках - где эту кнопку искать. Вот мой экран:

У меня вообще другой продукт?
Или устаревший мануал? Или что?
Объясните, пожалуйста.

Нравится

3 комментария

Добрый день!

У Вас другой продукт. Скачанный мануал касается продукта bpmonline sales. Для того, чтобы добавить процесс в Вашем продукте:

1) Перейдите в главное меню нажав на кнопку, выделенную на скриншоте желтым цветом:

2) В главном меню нажмите "Настройка" и выберите "Управление конфигурацией":

3) После перехода в конфигурацию выберите "Дизайн процессов":

4) Во вкладке "Дизайн процессов" нажмите кнопку "Добавить":

Вам откроется дизайнер процессов, который имеет более широкий функционал, чем мастер процессов. Для работы в дизайнере процессов, у Вас должен быть установлен Silverlight.

Какой мануал относится к моему продукту?

Вы можете найти нужную информацию в мануале, который находится по ссылке:
tstmpbpmonline_personal_lending_cg_7.2.20.pdf

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

Хочу змінити колір записів в журналі змін на деталі "Звернення".

Забезпечив зміну кольорів в загальному журналі змін.
А от як забезпечити таку ж зміну кольорів на деталі журналу в реєстрі звернень ніяк не можу розібратися.

var config = base.GetModuleRowConfig(module);
Guid changeType = module.GetTypedColumnValueGuid>("ChangeTypeId");
string backgroundColor;
if (changeType == new Guid("A852C33F-0BDD-E011-92C3-00155D04C01D")) {
        backgroundColor = "Green";
} else if (changeType == new Guid("AA52C33F-0BDD-E011-92C3-00155D04C01D")) {
        backgroundColor = "Red";
} else if (changeType == new Guid("38DF8CD6-13FE-E411-97E7-005056981054")) {
        backgroundColor = "Grey";
} else {
        backgroundColor = "Blue";
}
config.AddConfig(new DataSourceRowColorConfigValue(backgroundColor));
return config;


Ніяк не знайду модуль, в якому треба зробити таке налаштування.

 

Нравится

3 комментария

Мне кажется, такое можно сделать и на уровне страницы реестра детали.
Вбил в поиск по исходникам кофигурации слово «DataSourceRowColorConfigValue», нашло такое.
На ините GridPage:

Page.TreeGrid.GetRowConfigHandler += delegate(Entity row) {	
	var delegation = row as ApprovalDelegation;
	var config = new DataSourceRowConfig(delegation.Id.ToString());
	var currentDate = UserConnection.CurrentUser.GetCurrentDateTime();
 
	if(delegation.EndDate.Date < currentDate.Date)
	{
        config.AddConfig(new DataSourceRowColorConfigValue("Grey"));
	}
	return config;
};

Похоже, оно тоже раскрашивает в зависимости от значения поля. Тут «ApprovalDelegation» — просто объект, используемый в DataSource детали.

Для детали журнала используется страница «Страница реестра истории изменений объектов».
Будьте осторожны, она может использоваться в разных разделах. Если хотите раскрасить только для обращений, надо будет добавить проверку.

Вдалося ідентифікувати модуль: "RecordAllChangesGridPage".

Доброго дня, 

 

На жаль, базовими засобами додатку це реалізувати неможливо, але ми вже передали це побажання відповідальній R&D команді, для реалізації такої можливості в майбутнії версіях додатку.  

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

Добрый день!
Почему может не запускаться автоматически процесс управления инцидентами.
Настроены ящик службы поддержки(указан в специальной настройке) и общий ящик.
У пользователя веб-портала в карточке контакт прописан e-mail.

Пользователь веб-портала заводит обращение, оператор назначает ответственного, переводит обращение в состояние в работе и т.п...
Но никакие e-mail сообщения пользователю не приходят,
и вообще сам процесс почему-то не запускается ( в журнале процессов нет о нем информации).

Версия 7.5.0.1138 transitions

Нравится

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

Дарья, добрый день.
Чтобы попытаться проанализировать эту ситуацию, пожалуйста, приложите скриншоты:
- настройки почты
- настройки процесса отправки почты
- настройки того процесса из которого вызывается отправка почты

что значит: "настройки процесса отправки почты" и "настройки того процесса,из которого вызывается отправка почты"?
Это стандартный процесс "Управление инцидентами" в стандартной версии bpm service desk itil transitions.
Это коробочная версия

настройки почты - заведены два почтовые записи, прикреплены к учетной записи Supervisor.
Один из этих ящиков указан как ящик службы поддержки в системной настройке,
у другого указано, что он общий.

Также в карточке контакта(пользователя веб-портала), который завел обращение, в средствах связи указан его ящик.

Дарья, добрый день!

Базовый процесс управления инцидентами стартует по следующим событиям:
1. Создано новое обращение, в котором указаны:
- Категория = Инцидент
- Состояние = Новое
- заполнены поля "Сервис" и "Ответственный" любыми значениями;
2. Изменено любое поле записи обращения, если по результатам сохранения в записи указаны:
- Категория = Инцидент
- Состояние = Новое
- заполнены поля "Сервис" и "Ответственный" любыми значениями.
В описанном Вами кейсе выполняется работа с существующей записью, но по результатам сохранения запись не соответствует выше перечисленным параметрам.

Рекомендую протестировать запуск и работу процесса повторно с учетом описанной логики.

Спасибо, получилось.
Таким образом, процесс не запустится, если у него при создании было сначала состояние "новое" и ответственный не заполнен, а при проставлении ответственного сразу изменили состояние на "в работе".

А есть где-нибудь описание вообще этого процесса. Какие шаги, что происходит в том или ином случае.
В руководстве пользователя нет(

Например, процесс корпоративных продаж в руководстве к sales очень хорошо описан, и это удобно.
А вот про процесс управление инцидентов в руководстве к service desk написано пару строчек.

Подскажите, пожалуйста, еще почему может не заполняться по умолчанию ответственный в обращении.
Обращение создается через веб-портал.
У сервиса указан сервисный инженер и владелец.
Но при создании через веб-портал ответственный по обращению не заполняется по умолчанию.
В какой момент должен заполниться ответственный по обращению на основании выбранного сервиса?

Дарья, ниже приведены комментарии по Вашим вопросам.

1. «А есть где-нибудь описание вообще этого процесса. Какие шаги, что происходит в том или ином случае.»

Процесс описан верхнеуровнево на ресурсе Terrasoft Academy (http://academy.terrasoft.ru/documents/?product=transitions&ver=7.5.0) в разделе Функциональность bpm’online ITIL service/Раздел [Обращения]/Бизнес-процесс управления инцидентами.
Если у Вас будут возникать дополнительные вопросы, то мы готовы ответить.

2. «Подскажите, пожалуйста, еще почему может не заполняться по умолчанию ответственный в обращении. У сервиса указан сервисный инженер и владелец. В какой момент должен заполниться ответственный по обращению на основании выбранного сервиса?»

Сервисные инженеры в сервисе указываются с целью порекомендовать специалисту поддержки, выполняющему классификацию обращения, в чью компетенцию входит обслуживание текущего сервиса. Иными словами, указав одного или несколько сервисных инженеров по определенному сервису, система не будет автоматически определять ответственно по обращению с таким сервисом, а ограничит список рекомендуемых специалистов для выбора.
Детально данная функциональность описана в параграфе «Подбор сервисных инженеров» раздела Функциональность bpm’online ITIL service/Раздел [Обращения]/Страница обращения на ресурсе Terrasoft Academy (http://academy.terrasoft.ru/documents/?product=transitions&ver=7.5.0)

Ответственный по обращению при этом устанавливается вручную.

Про верхнеуровневое описание процесса я знаю. Видела, спасибо.
Интересовало именно детальное( наподобие процесса корпоративных продаж).Жаль, что его нет.

Задам вопрос по инциденту и процессу тогда:
Если я правильно поняла, система не подставляет ответственного по обращению автоматически (даже если в сервисе указан только один сервисный инженер).
Тогда возникает следующий вопрос:
Вы писали, что базовый процесс по инциденту стартует в этих случаях.
1. Создано новое обращение, в котором указаны:
- Категория = Инцидент
- Состояние = Новое
- заполнены поля "Сервис" и "Ответственный" любыми значениями;
2. Изменено любое поле записи обращения, если по результатам сохранения в записи указаны:
- Категория = Инцидент
- Состояние = Новое
- заполнены поля "Сервис" и "Ответственный" любыми значениями.

Т.е. получается, что когда создается инцидент через веб-портал, то ответственный при создании инцидента не заполняется.
Процесс таким образом не стартовал пока еще, так как ответственный еще не заполнен.

Далее оператор видит обращение, и должен его обработать - назначить ответственного(так как там пусто).
В этот момент оператор ни в коем случае не должен переводить инцидент в состояние отличное от "новый", иначе процесс не стартует.
Т.е. например, человек увидев обращение, и выбрав в качестве ответственного себя, должен помнить, что ему не надо переводить пока обращение в другое состояние в этот момент. Правильно я понимаю?

Добрый день, Дарья.
Вы описали верно. Если для Вас это не удобно, то тогда вы можете подправить стартовый сигнал в процессе обработки инцидента на необходимый Вам.
К примеру изменить сигнал при изменении данных обращения, так что б процесс стартовал без завязки на состояние. Пример настройки сигнала прилагаю.

Только если будете вносить изменения процесс нужно "Сохранить как новую версию"

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

Здравствуйте.
Использую 5 версию системы.
Подскажите можно ли в ней настраивать права доступа на отображения "детали" аналитика в каждом отдельном разделе?

Нравится

3 комментария

Здравствуйте.
Из интерфейса такая возможность не предусмотрена. Разве, что программно.

А как это программно сделать?

Здравствуйте,
Данная реализация может выглядеть следующим образом:
В процессе схемы BaseModulePage есть ScriptTask CreateAnalyticsTab.
В данном скрипте, перед созданием закладки, идет проверка параметра HasAnalytics
Добавляем проверку
bool canSeeAnalytic = UserConnection.DBSecurityEngine.GetCanExecuteOperation("CanSeeAnalytic",
UserConnection.CurrentUser.Id);
if (HasAnalytics && canSeeAnalytic) {
...
}
Далее, создаем Операцию в разделе администрирования и раздаем на нее права.

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

Здравствуйте,

Есть деталь, содержащая список записей, 1 и более. Есть поле в том же разделе, где и деталь, значение которого должно обновляться автоматически в зависимости от наличия, отсутствия, добавления и удаления записей в детали по определённой логике (допустим отображать значение колонки записи с максимальным значением другой колонки). Уже написал JS код, который через Entity Schema Query находит нужное значение. Но теперь не знаю, как мне к значению поля прибиндить эту функция, которая должна тригериться / обновлять значение поля когда:
1. Открывается запись в разделе
2. Происходит перемещение между записями
3. Добавляется новая запись в деталь
4. Удаляется запись из детали.

Иллюстрация задачи

Спасибо.

Нравится

1 комментарий

Необходимо добавить атрибут, что-то на подобии

                                        "UsrCandStat": {
                                                                              type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
                                                                              dataValueType: Terrasoft.DataValueType.LOOKUP,
                                                                              …
                                                               },

Это будет ваша колонка вычисляемая колонка
В Diff привязаться к ней

                      {
                                                                              "operation": "insert",
                                                                              "name": " UsrCandStat ",
                                                                              "propertyName": "items",
                                                                              …
                                                                              "values": {
                                                                                              "bindTo": " UsrCandStat ",
                                                                                              …
                                                                              }
                                                               },

Дальше нужно вычислять значение у нужный момент, лучше всего будет реализовать это через message, можно написать свой или использовать стандартный updateDetail

          /**
                                                               * @inheritDoc Terrasoft.Configuration.BaseDetailV2#updateDetail
                                                               * @overridden
                                                               */
                                                               updateDetail: function(config) {
                                                                              config.reloadAll = true;
                                                                              this.callParent(arguments);
<strong>!!! здесь вызов вашего метода установки значения атрибуту</strong>
                                                               },
Показать все комментарии

На робочій базі застосована LDAP-автентифікація, на робочій же можна легко вибрати для користувача BPMonline-автентифікацію.

Скопіював базу для тестування, налаштував веб-сайт і тепер на цій базі при спробі встановити для конкретного користувача BPMonline-автентифікацію отримую помилку:

Exception Message: Элемент коллекции с идентификатором "{5C3C64DC-3089-42A3-8917-A0C6E9B0C198}" не найден
Exception Type: Terrasoft.Common.ItemNotFoundException
Exception Source: Terrasoft.Core

Мені б бажано це якось полікувати, тільки ще не знаю як.

Нравится

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

Власне, неможливо змінити тип автентифікації, ні LDAP->BPMonline, ні BPMonline->LDAP

Игорь, здравствуйте!
Уточните, пожалуйста, с какой версией Вы работаете?
Спасибо.

5.4.0.2455 BPMonline Service Desk

Игорь, есть еще несколько вопросов:
1. База данных BPMonline Service Desk предоставлялась именно с этой версией приложения, если нет, тогда с какой?
2. Были ли доработки/проектное решение?
3. Можно получить от Вас более подробное описание сообщения?
Спасибо.

1. База надавалася з цією версією.
2. Доопрацювання були.
3. Файл скинув в приват

Игорь, данная ошибка связана с тем, что в поле UserMainPageEdit, карточки редактирования пользователя, установлено значение, которого нет в списке UserMainPage. Последний можно найти в списке конфигурации.
Спасибо.

Маю ще одну тестову конфігурацію, де успішно можна змінювати тип автентифікації.
Там в групі "Данные" поля [UserMainPageEdit] нічого не прописано.

Значення, про яке ви пишете, фіксується в самій формі, чи скриптом в процесі ?

Игорь,
Данное поле в карточке является обязательным для заполнения.
Наполнение справочника и проставление значения происходит в процессе карточки редактирования FillUserMainPageValues и ScriptPageLoadCompleteChild

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

Вийшов незрозумілий ефект:

на робочій базі модуль OwnerSelectionGridPage був заблокований адмініфстратором (червона помітка)
Я його примусово розблокував, опублікував.

Після цього дуже уповільнилась робота системи, настільки, що інколи навіть не відкривалися запити на оновлення.

Заблокував модуль знову, опублікував, - швидкість роботи відновилась.

Що це відбувалося ?

Нравится

2 комментария

Здравствуйте.
Статус модуля (заблокирован\разблокирован) не влияет на время отклика системы BPM'online. При компиляции работа значительно замедляется, так как происходит генерация исходного кода всех элементов конфигурации. Вероятнее всего, в Вашем случае замедление было вызвано совпадением по времени с компиляцией.

Згоден. Причина була не в цьому.
Затримку спричинив трішки складніший шаблон регулярного виразу, по якому розбиралися вхідні листи.

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

Підкажіть, будь-ласка, як для Select() вписати With (Nolock)

Нравится

2 комментария

Как-то так:

var countSelect = new Select(UserConnection)
			  	.Column(Func.Count(Column.Asterisk())).As("Count") as Select;
countSelect.WithHints(Hints.NoLock);

Дякую, те, що треба :)

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