добавить поле
обращение
портал
Технические вопросы
7.x

Добрый день!
ITIL Transitions 7.5
Хочу добавить новое поле в обращение (это ссылка на уже существующий справочник с имеющимися значениями), и вывести на страницу обращения и на страницу обращения в веб-портале.

Новое поле в обращение и на страницу обращение добавлено ( через мастер)

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

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

Во вложении
1)скрипт добавления нового поля на страницу обращения в веб-портале
2) скрин-шот страницы обращения в веб-портале

Скажите, почему так происходит? Что не так?

P.S. А можно ли через мастер добавлять новое поле на страницу обращения веб-портал?

Нравится

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

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

Чтобы у пользователя появился доступ к справочным значениям необходимо включить администрирование по операциям и раздать права доступа пользователям портала на соответствующий объект.

Добрый день!
Спасибо, но почему-то не помогло - ничего не изменилось

Дарья, уточните, пожалуйста, при выводе поля на портал Вы выполняли скрипт раздачи прав доступа портальным пользователям (по аналогии с пунктом 9 инструкции во вложении)?

Елена, конечно, не выполняла -я этот скрипт впервые вижу)
Спасибо, что вы его прислали - пригодится
Итак, насколько я поняла из пункта 9, чтобы пользователи веб-портала стали видеть значения справочника, нужно исполнить запрос, который бы раздал права на уже существующие его записи
по типу вот этого
/*Добавление прав на существующие записи Сервисов для портальных пользователей*/
insert into SysEntitySchemaRecordDefRight (CreatedById, SubjectSchemaUId, AuthorSysAdminUnitId, GranteeSysAdminUnitId, Position, Operation, RightLevel)
values (
'DAD159F3-6C2D-446A-98D2-0F4D26662BBE',
'C6C44F0A-193E-4B5C-B35E-220A60C06898',
'A29A3BA5-4B0D-DE11-9A51-005056C00008',
'720B771C-E7A7-4F31-9CFB-52CD21C3739F',
'0',
'0',
'1'
)

но мне не очень понятно, как должен выглядеть такой запрос в моем случае.

Вопрос:
распишите, пожалуйста, за что отвечает каждая колонка из запроса
SubjectSchemaUId, AuthorSysAdminUnitId, GranteeSysAdminUnitId, Position, Operation, RightLevel

где посмотреть значение SubjectSchemaUId для справочника Категории сервисов
какие значения должны быть в колонке AuthorSysAdminUnitId, GranteeSysAdminUnitId.

Помимо подобного запроса еще какие-то запросы нужно сделать?

Дарья, данный вопрос был решен в рамках удаленного подключения.

Загвоздка была в том, что в таблицу "SysSSPEntitySchemaAccessList", в колонку "UId" необходимо было внести Id схемы "SysSchema".

Показать все комментарии
Обращения
права доступа
права доступа по умолчанию
Технические вопросы
7.x

Добрый день.

В разделе "Администрирование. Доступ к объектам. Доступ к записям по умолчанию" указано, что пользователи определенной группы имеют право на чтение Обращения созданных только членами этой группы.

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

Возможно решить данную проблему средствами конфигурирования, или необходимо задействовать бизнес-процесс?

Нравится

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

Добрый день, Маргарита!

В данном случае Ваш процесс должен содержать подобные элементы:

1. Стартовый сигнал (создано Обращение, с происхождением <> Портал).
2. Чтение данных Обращения.
3. Чтение данных Заявителя.
4. Скрипт (который будет формировать выборку Контактов по Контрагенту Заявителя и раздавать им права на Обращение, по которому стартовал данный процесс).

Показать все комментарии
7.x
new
график поставок и оплат
заказы
поставки

В новой версии bpm’online sales 7.6 добавлена возможность настраивать шаблоны графиков поставок и оплат в заказах, а также всего в несколько кликов распределять продукты и создавать счета на каждом шаге графика.

О том как работать с новой функциональностью и максимально использовать все ее возможности читатайте в серии статей на сайте Terrasoft Academy.

Нравится

Поделиться

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

Рады сообщить о выходе нового обучающего видео-ролика по импорту данных из Excel в bpm'online.

Заходите на сайт Terrasoft Academy и узнайте, как выполнить первичный импорт клиентской базы, наполнить справочники или обновить данные раздела используя функциональность импорта.

Видео доступно по ссылке: Универсальный импорт данных.

Еще больше видео-уроков для старта работы с системой здесь.

Нравится

Поделиться

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

- delete - :smile:

Спасибо за замечание! Мы уже внесли корректировки. В течение дня добавим обновленный ролик.

"Александр Кудряшов" написал:

Видео полезное, только "Ecxel" в самом начале немножко отвлекает :)


Заменили :)

Всё просто, пока нет контрагентов с одинаковыми названиями. И пока для этих контрагенты не нужно импортировать контакты. Тогда связь по названию уже не годится

Показать все комментарии
LDAP
пользователи
Технические вопросы
7.x

Добрый день!
Скажите, пожалуйста, можно ли настраивать авторизацию с LDAP "точечно" - то есть, например, не всех пользователей из группы в LDAP, а только некоторых.
Если такой возможности нет, то какое обходное решение вы можете посоветовать?

Нравится

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

Здравствуйте, Дарья!

Мы уточнили у Вас, что речь идет не об авторизации, а именно о синхронизации пользователей с помощью LDAP.
Решение следующее:
1. Сначала Вам необходимо на сервере Active Directory (где находится информация о пользователях) создать новую группу.
2. В созданную группу внести только тех пользователей, которых Вы хотите синхронизировать с bpm'online.
3. В настройках синхронизации с LDAP указать название новой группы. Сохранить настройки.

Таким образом, в последующих синхронизациях будут задействованы только определенные пользователи.

Показать все комментарии
время решения
обращение
Технические вопросы
7.x

Добрый день,
bpm'online ITIL service 7.5.0.1473

Возможно ли получить значение характеризующее время остатка до момента "План. решение" в обращении набором состояний/характеристик обращения, которое потом можно использовать в бизнес-процессе?
или необходимо создать какую-то свою, пользовательскую переменную и использовать в бизнес- процессе её?

Например, необходимо отправлять Ответственному за обращение письмо на эл. почту, в случае если остаток времени до предоставления решения по обращению меньше 20% общего времени отведенного на решение данного инцидента.

или, например, необходимо переназначать ответственного с 1 линии на 2 линию, в случае если остаток времени до предоставления решения по обращению меньше 40% общего времени отведенного на решение данного инцидента.

и т.д. и т.п.

Нравится

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

Добрый день, Маргарита!

Вы можете решить данную задачу, используя бизнес процессы.
Одна из возможных реализаций:

0) Создайте параметр бизнес процесса с типом "Целое число"
1) Бизнес процесс запускается по сигналу добавления обращения.
2) Элементом "Чтение данных", Вы получаете инфорамацию по времени "План. решение" обращения.
3) Далее элементом C# Вы можете подсчитать значение времени (по первому кейсу) 0,8*("План. решение" - фактическая дата и время) в секундах и установить его в параметр, созданный на нулевом шаге.
4) Используйте элемент таймер. Установите значение таймеру из параметра. Таким образом через 80% времени, отведенного на решения инцидента бизнес процесс "пойдет" дальше.
5) Вновь используйте "Чтение данных". Прочтите данные по обращению. Если обращение находится в конечном состоянии - процесс завершается.
Если же обращение не разрешено:
6) "Чтение данных" по объекту Контакт, где Обращение.Ответственный = Контакт.Id.
7) Элемент "Отправить email", где поле "Кому" заполнено значением поля "Email" из прочитанного на предыдущем шаге элемента, а в поле "От кого" - выбранный из справочника предварительное настроенный email адрес пользователя, от имени которого будет происходить отправка. Конец процесса.

Если пользователь может изменить "План. решение", то необходимо учитывать, что процесс необходимо перезапустить.

Огромное спасибо, Алексей, за ваш ответ.

Показать все комментарии
Реализована
7.x
автоматизация бизнес-процессов
Сейчас элемент "Изменение прав доступа" позволяет работать только с вручную введенными значениями. Но не позволяет изменять права доступа для пользователей, полученных в результате самого бизнес процесса.Например, сменился ответственный по контактам. Необходимо новому предоставить доступ к истории работы с клиентом. Сейчас приходится это делать вручную. А можно было бы через БП. Спасибо.
2 комментария

Поторопился.
Нашел. Оказывается, можно.

Павел, но это обозначает, что мы можем улучшить нашу документацию или UX самих элементов, так что всё равно спасибо за идею. В версии 7.7 мы перерабатываем интерфейс построителя процессов. Уверена, что в новом интерфейсе функции станут более понятными.

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

bpm'online sales enterprise 7.6.0
Здравствуйте. Подскажите пожалуйста возможно ли настройка обратного уведомления об визировании?
В разделе "Заказы" был создан новый заказ и для его проверки был отправлен на визирование ответственному сотруднику. Уведомление о визировании пришло всё нормально, но после подтверждения визы обратного сообщения сотруднику не последовало. Приходиться заходить и проверять итог визирования.
Есть ли такая функция уведомления о результатах визирования? Можно ли её как-нибудь настроить или же она пока не предусмотрена?
Благодарю.

Нравится

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

Дмитрий, здравствуйте!

В базовой версии продукта уведомление о результатах визирования отсутствует.
Вы можете настроить его самостоятельно, настроив бизнес-процесс "Визирование заказа".

Спасибо!

"Арменчу Артём Александрович" написал:

Дмитрий, здравствуйте!

В базовой версии продукта уведомление о результатах визирования отсутствует.

Вы можете настроить его самостоятельно, настроив бизнес-процесс "Визирование заказа".

Спасибо!

С уважением, Арменчу Артём.


Здравствуйте.
Подскажите как можно настроить данный бизнес процесс? Настройка происходит через "Дизайнер системы"? Или же для этого есть какой-то другой способ?
Благодарю.

Дмитрий,

Совершенно верно. Для того, чтобы перейти в дизайнер процессов необходимо:

1) Перейти в Дизайнер системы
2) Перейти в Библиотеку процессов
3) Нажать Добавить в дизайнере

Документацию по созданию БП Вы можете найти в нашей странице на академии:

http://academy.terrasoft.ru/documents/?product=BPMS&ver=7.6.0

Спасибо!

Показать все комментарии
7.5
древовидная структура детали
Технические вопросы
7.x

Добрый день, подскажите, хотя бы алгоритмично, как создать деталь с древовидной структурой, вроде ProjectStructureDetail, хотел сделать по аналогии, но так и не нашел никакого упоминания о ней в ProjectPageV2

Нравится

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

Олег, здравствуйте!

К данному комментарию прикрепил наглядный пример по реализации иерархической детали.

realizaciyaierarhicheskoydetali.doc

Приятного дня!

Добрый день, спасибо за оперативный ответ, попробовал сделать по инструкции, но иерархичность грида не работает http://goo.gl/yCvmBG, кнопка добавления подчиненной записи вообще не активна, добавляются только по кнопке родительской записи, как обычные записи детали
В принципе не могу найти даже в базовой схеме детали метод getAddChildButtonEnabled

Пришлите список сервисов и сами сервисы в которые Вы вносили изменения на support@bpmonline.com для того чтобы мы детально проанализировали Вашу конфигурацию.
В тему письма впишите номер инцидента 0255638.

Отправил на почту письмо с детальным описанием проделанных действий.
P.S. с форума письмо на восстановление пароля содержит в теме [*****SPAM 4.1 *****] странно как то

Добрый день, по итогу общения по почте:

Согласно предоставленному файлу, в схеме детали после строки:
- "hierarchical": true
следует добавить:
- hierarchicalColumnName: "Parent"

Это как бы итак оговаривается в примере, причем там написано обратное, но я все же пробовал еще до подобного совета, результат тот же, деталь строится обычная, с обычным гридом

Олег, здравствуйте!

Для отображения кнопки «Добавить подчинённый элемент» добавьте в код детали:

getAddChildButtonEnabled: function() {
   return true;
},

Попробуйте в код детали подключить следующий миксин:

define("HierarchicalSectionUtilities", ["HierarchicalSectionUtilitiesResources", "GridUtilitiesV2"],
    function(resources) {
        Ext.define("Terrasoft.configuration.mixins.HierarchicalSectionUtilities", {
            extend: "Terrasoft.BaseObject",
            alternateClassName: "Terrasoft.HierarchicalSectionUtilities",
 
            expandedElements: {},
            expandHierarchyLevels: {},
            ExpandItemId: null,
            ExpandedLevels: null,
 
            changeSorting: function() {
                this.clearExpandHierarchyLevels();
                this.callParent(arguments);
 
            },
 
            /**
             * Обработчик загрузки дочерних элементов. Осуществляет проверку загружености
             * дочерних элеметов выбранной записи. Запускает загрузку нового уровня.
             * @protected
             * @virtual
             * @param {String} primaryColumnValue Уникальный идентификатор записи
             * @param {Boolean} isExpanded Признак того, разворачивает или сворачивает пользователь дочерние элеметы
             * true - если разворачивает, false в обратном случае
             */
            onExpandHierarchyLevels: function(primaryColumnValue, isExpanded) {
                if (!isExpanded || this.isItemExpanded(primaryColumnValue)) {
                    return;
                }
                this.setExpandedItem(primaryColumnValue);
                this.set("ExpandItemId", primaryColumnValue);
            },
 
            /**
             * Удаляет логику постраничности если загружаются дочерние объекты
             * @protected
             * @overridden
             */
            initCanLoadMoreData: function() {
                var parentItem = this.get("ExpandItemId");
                if (!parentItem) {
                    this.callParent(arguments);
                }
            },
 
            /**
             * получает коллекцию развернутых уровней
             * @returns {*}
             */
            getExpandedItems: function() {
                return this.get("expandedElements");
            },
 
            /**
             * Устанавливает новый уровень развернутости иерархии
             * @param primaryColumnValue
             */
            setExpandedItem: function(primaryColumnValue) {
                (this.getExpandedItems()[primaryColumnValue]) = { "page": 0 };
            },
 
            /**
             * Проверяет, были ли загруженны дочерные элементы выбранной записи
             * @protected
             * @virtual
             * @param primaryColumnValue Уникальный идетификатор записи
             * @return {boolean}
             */
            isItemExpanded: function(primaryColumnValue) {
                return !!(this.getExpandedItems()[primaryColumnValue]);
            },
 
            /**
             * Очищет информацию о загруженных и развернутых уровнях
             * @protected
             * @virtual
             */
            clearExpandHierarchyLevels: function() {
                this.set("expandedElements", {});
                this.set("expandHierarchyLevels", []);
                var grid = this.getCurrentGrid();
                if (grid) {
                    grid.expandHierarchyLevels = [];
                }
            },
 
            /**
             * Убирает информацию о том, что элемент развернут из системных параметров
             * @protected
             * @virtual
             * @param {String} itemId Уникальный идентификатор записи
             */
            removeExpandHierarchyLevel: function(itemId) {
                var expandHierarchyLevels = this.get("expandHierarchyLevels");
                this.set("expandHierarchyLevels", Terrasoft.without(expandHierarchyLevels, itemId));
                var grid = this.getCurrentGrid();
                if (grid) {
                    grid.expandHierarchyLevels = Terrasoft.without(grid.expandHierarchyLevels, itemId);
                }
            },
 
            /**
             * Дополнительная обработка после удаления записи
             * Очищает иерархию и перезагружает реестр
             * @overridden
             * @protected
             */
            onDeleted: function(result) {
                this.callParent(arguments);
 
                if (result.Success) {
                    this.clearExpandHierarchyLevels();
                    this.loadGridData();
                    this.reloadGridData();
                }
            },
 
            reloadGridColumnsConfig: function(doReRender) {
                var profile = this.get("Profile");
                var propertyName = this.getDataGridName();
                var gridProfile = profile[propertyName];
                if (!this.Ext.Object.isEmpty(gridProfile)) {
/**
* очень важны две следующие строки, благодаря им при перерисовке реестра в виде вертикального, не разрушаются стили иерархии, и она нормально отображается в вертикальном реестре.
*/
                    gridProfile.isTiled = false;
                    gridProfile.type = "listed";
                    var grid = this.getCurrentGrid();
                    if (!grid) {
                        return;
                    }
                    grid.type = gridProfile.type;
                    var viewGenerator = Ext.create("Terrasoft.ViewGenerator");
                    viewGenerator.viewModelClass = this;
                    var gridConfig;
                    var bindings = this.Terrasoft.deepClone(grid.bindings);
                    if (gridProfile.type === Terrasoft.GridType.LISTED) {
                        gridConfig = {
                            listedConfig: Ext.decode(gridProfile.listedConfig),
                            type: gridProfile.type
                        };
                        viewGenerator.actualizeListedGridConfig(gridConfig);
                        grid.captionsConfig = gridConfig.listedConfig.captionsConfig;
                        grid.columnsConfig = gridConfig.listedConfig.columnsConfig;
                        grid.listedConfig = gridConfig.listedConfig;
                        grid.initBindings(gridConfig.listedConfig);
                    } else {
                        gridConfig = {
                            tiledConfig: Ext.decode(gridProfile.tiledConfig),
                            type: gridProfile.type
                        };
                        var isVertical = (propertyName.indexOf("VerticalProfile") > -1);
                        gridConfig.isVertical = isVertical;
                        grid.isEmptyRowVisible = !isVertical;
                        viewGenerator.actualizeTiledGridConfig(gridConfig);
                        grid.columnsConfig = gridConfig.tiledConfig.columnsConfig;
                        grid.tiledConfig = gridConfig.tiledConfig;
                        grid.initBindings(gridConfig.tiledConfig);
                    }
                    grid.bindings = bindings;
                    if (doReRender) {
                        grid.clear();
                        grid.prepareCollectionData();
                        if (grid.rendered) {
                            grid.reRender();
                        }
                    }
                }
            }
        });
        return Terrasoft.HierarchicalSectionUtilities;
    }
);

В результате деталь должна отобразиться нужным образом.
Также подобную реализацию можете посмотреть в разделе «Контрагенты» (деталь «Структура организации»).

Добрый день, наверное глупый вопрос, но найти ответа не смог, как подключить миксин? создал модуль, поместил в него код миксина, в код детали добавил :

details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
mixins: {
	HierarchicalSectionUtilities: "HierarchicalSectionUtilities"
},
diff: /**SCHEMA_DIFF*/[

и при открытии страницы где расположена деталь в консоль выбивает ошибку

Добрый день, Олег!
Если нужно подключить указаный выше по комментариям мексин HierarchicalSectionUtilities, то нужно подключить/зарегистрировать модуль содержащий мексин в define и подключить его в секции mixins, как показано ниже:

define("SchemeModuleName", ["HierarchicalSectionUtilities"], function() {
                return {
                               messages: {},
                               /**
                               * Классы-миксины, расширяющие функциональность данного класа.
                               */
                               mixins: {
                                               /**
                                               * @class HierarchicalSectionUtilities
                                               */
                                               HierarchicalSectionUtilities: "Terrasoft.HierarchicalSectionUtilities"
                               },
                               methods: {},
                               diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/
                };
});

Добавил миксин, ситуация не изменилась, деталь так же имеет обычную структуру...
http://goo.gl/dexq8R

Олег, в рамках удаленного подключения была предоставлена консультация. В результате деталь отобразилась корректно.
Для того, чтобы деталь была древовидной необходимо было перенести все функции миксина в код детали (классы) и переопубликовать объект.

Огромное спасибо за помощь, понял свои ошибки

Показать все комментарии
активности
кастомизация
расписание
7.x

Добрый день, друзья!
Есть необходимость вести учет занятости кабинетов предприятия (по аналогии с переговорками), с получением итогов - какие кабинеты больше используются.
У меня возникла идея создать кастомный тип активности "Кабинет", и привязать к нему 10 кабинетов, каждый из которых, является категорией данного типа с именем "Кабинет №1", "Кабинет №2" и .т.д.
Таким образом можно создавать в расписании эти активности, перетаскивать их и динамическими группами смотреть загрузку по кабинетам.
Однако я предвижу проблему, что разные пользователи смогут накладывать на одно и то же время активности одинаковой категории и может возникнуть путаница.
Подскажите, может я изобретаю велосипед, и все можно решить иначе и проще.
Спасибо!

Нравится

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

Скорее, тип будет стандартный "встреча", или "звонок", или какой-то еще, который нужен будет по данной активности.
Основным источником информации может быть новое поле "Кабинет", по которому и можно производить фильтрацию. И дополнительно писать скрипт, который проверяет, что в данном кабинете на то же время не запланировано других активностей

Спасибо

А почему просто не создать контакт с названием "Кабинет 1" и т.д. и добавлять его в деталь "участники активности". Тогда при фильтрации по отвественному "Кабинет 1" можно смотреть расписание, когда кабинет занят, а когда свободен. Также можно в последующем выстраивать аналитику по загруженности кабинетов.

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