7.6
Деталь
Динамические группы
динамические фильтры
Технические вопросы
7.x

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

Нравится

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

Добрый день, Никита!

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

"Липатов Юрий Сергеевич" написал:

Добрый день, Никита!

Если я правильно Вас понял, Вам необходимо, чтобы в разделе [Активности],[Планирование визитов] в списке контрагентов, слева, была возможность настройки динамических групп.

К сожалению, данный функционал в базовой версии не предусмотрен.


Юрий,доброго времени суток!
Это я прекрасно понимаю. Хотелось бы услышать от вас как это можно решить с точки зрения программирования на js

Добрый день.

Можно попробовать сделать следующее: необходимо добавить в функциональную кнопку детали Контрагентов(PlanningAccountDetailV2) пункт меню с вызовом метода ShowFolderTree из BaseSectionV2, но отрендерить в контейнер PlaningCardContainer. Так же нужно будет добавить пункт меню с возвратом к детали Контрагентов.

Представление «Планировение» сильно переделывалось и такое решение может не помочь.

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

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

Когда в модуле страницы нужно добавить кнопку, то нужно написать следующую строку кода на Javascript:
"operation": "insert"
Напишите мне, пожалуйста, перечень всех значений, которые можно использовать с "operation" или дайте ссылку на их описание. Мне нужен их полный перечень.
Заранее благодарен.

Нравится

2 комментария
раздел
Создание раздела
Технические вопросы
7.x

Добрый день! При создании нового раздела в системе bpm'online не происходит его регистрация и невозможно использовать его в других модулях, например, для создания в меню быстрого запуска, либо нового замещения уже своего раздела.
Как зарегистрировать новый раздел?

Нравится

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

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

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

Более подробно Вы можете узнать в Академии (Настройка интерфейса ->Мастер разделов).

Спасибо, Алексей, но не то. При использовании мастера раздел НЕ регистрируется!

Нашел решение: необходимо добавить SQL-скрипт
DECLARE @LookupEntityName nvarchar(max) = 'имя схемы'
DECLARE @LookupPageName nvarchar(max) = 'имя страницы'

INSERT INTO SysModuleEntity (SysEntitySchemaUId)
VALUES ((SELECT UId FROM SysSchema WHERE Name = @LookupEntityName))

INSERT INTO SysModuleEdit (SysModuleEntityId, CardSchemaUId)
VALUES
(
(SELECT Id FROM SysModuleEntity WHERE SysEntitySchemaUId in
(SELECT UId FROM SysSchema WHERE Name = @LookupEntityName)
),
(SELECT UId FROM SysSchema WHERE Name = @LookupPageName)
)

Илья, разделы регистрируются.
Чтобы приложение наполнилось новыми разделами и можно было с ними работать необходимо перезаходить в приложение.

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

Добрый день!

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

В объекте Activity было добавлено поле типа Справочник, которое ссылается на справочник Активности. В это поле заносится скриптом ссылка на Email и заголовок письма отображается а активности. Все хорошо.
Но, при нажатии на ссылку, появляется карточка задачи, а не email-а. Причем вверху какрточки написано Email, но состав полей соответствует карточке задачи.

Как можно указать системе, что ссылка на данную активность - это email?

Нравится

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

Наталья, в системе есть ActivityPage и EmailPage для отображения Активности и Емайла соответственно. Проверьте, в той ли странице Вы открываете емайл?

Антон, а как мне указать в какой странице открывать? Она автоматически открывается в странице EmailPage.

раз открывается в emailPage, значит, правьте саму EmailPage через мастер раздела

Наталья, а что у Вас в адресной строке указано при открытии ссылки? Проверьте, чтобы e-mail и задача имеют разные страницы редактирования. Например, выполнить запрос в SysModuleEdit.

Илья, Антон,
открывается ActivityPage. Не в этом вопрос. Мне не надо редактировать страницу.
Вопрос в том как открыть вместо нее EmailPage ?

Я просто отображаю поле с помощью следующего кода:
{
"operation": "insert",
"name": "UsrLastEmail",
"values": {
"layout": { "column": 0, "row": 2, "colSpan": 24},
"bindTo": "UsrLastEmail",
"contentType": Terrasoft.ContentType.LOOKUP
},
"parentName": "CaseBlock",
"propertyName": "items"
},
Система сама его открывает при нажатии на ссылку. Но открывает карточку Задачи, а мне надо Email.

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

Антон, спасибо.
Написала в техподдержку.

Как мне сообщили, что этот недочет исправлен в последних версиях 7.6.

Илья,
спасибо за информацию.

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

Здравствуйте!
Необходимо на странице портального обращения получить некоторые значения, например, Email из справочника контактов для контакта, который указан в поле Контакт. Пишу следующий код:

var contact1 = this.get("Contact");
var contactId = contact1.value;
var esqContact = Ext.create("Terrasoft.EntitySchemaQuery", {
rootSchemaName: "Contact"
});
esqContact.addColumn("Email");
esqContact.getEntity(contactId, function(result) {
if (result.entity) {
var ContactEmail = result.entity.get("Email");
this.set("ContactInfo", ContactEmail);
}
}, this);

contactId заполняется правильным Id, но в результате все время получаю result.entity равным null. Причем, result.success равен true.

Подскажите, пожалуйста, что может быть не так?

Нравится

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

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

Александр,
спасибо за помощь.
Я смотрела под отладчиком, Id берется правильный. До записи в поле дело вообще не доходит, т.к. result.entity равна null.
А Вы тестировали на какой странице?

Александр,
спасибо за участие. Ларчик просто открывался: у пользователя нет прав на контакты.

В разделе "объекты" брал Responsible, как поле со справочником контакты. Насколько я знаю, EntitySchemaQuery выполняет обработку накладывая существующие права. Может быть проблема в правах доступа?

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

Добрый день! При создании проблем не случается. Но возникают проблемы при модифицировании или удаления. Подскажите, пожалуйста, как правильно удалять разделы в bpm'online? Ведь много записей в таблице создается и других связок.

Нравится

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

и про детали тоже интересно

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

Сами разделы/детали (их страницы редактирования, а также объекты, на которые они ссылаются) Вы можете удалить из конфигурации.
При этом в базе данных останутся записи. Необходимо удалить записи с таблиц:
SysModule
SysModuleEdit
SysModuleEditLcz

"Демьяник Алексей Олегович" написал:Необходимо удалить записи с таблиц:

Что же так не любят SQL-запрос предоставить? :)

"Владимир Соколов" написал:

Что же так не любят SQL-запрос предоставить? :)


А разгадка проста: разделы стараются не удалять. Максимум — скрыть в рабочих местах и удалить из раздела все записи.

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

А полностью скрывать детали от пользователей нужно с помощью прав доступа?

Спасибо за ответы

Мне нужно удалить пользовательский раздел в BPMOnline. Сервисов, связанных с ним нет, но раздел в списке присутствует. Я удалил запись из SysModule, но это не помогло. В таблицах SysModuleEdit,
SysModuleEditLcz информации по нему нет.

"Зверев Александр" написал:Максимум — скрыть в рабочих местах и удалить из раздела все записи.

Проблема в том, что "мусор" появляется в условиях фильтрации и только усложняет её.

"Владимир Соколов" написал:

Что же так не любят SQL-запрос предоставить? :)

Владимир, на основании одного объекта можно сделать два раздела. Будет обидно, если предоставленный запрос удалит оба раздела вместо одного.
Приблизительный запрос ниже:

declare @SectionObject varchar(50)
set @SectionObject = /*Название объекта раздела*/
delete from SysModule where SysModule.SysModuleEntityId in
(select SysModuleEntity.Id from SysModuleEntity
join SysSchema
on SysSchema.UID = SysModuleEntity.SysEntitySchemaUId
where SysSchema.Name = @SectionObject)

Для выполнения запроса нужно еще очистить связи.

"Тюльпа Владимир" написал:

Мне нужно удалить пользовательский раздел в BPMOnline. Сервисов, связанных с ним нет, но раздел в списке присутствует. Я удалил запись из SysModule, но это не помогло. В таблицах SysModuleEdit,

SysModuleEditLcz информации по нему нет.

Владимир, уточните, пожалуйста, в каком списке присутствует раздел? Проверьте таблицу SysModuleInWorkplace.

"Тюльпа Владимир" написал:

Мне нужно удалить пользовательский раздел в BPMOnline. Сервисов, связанных с ним нет, но раздел в списке присутствует. Я удалил запись из SysModule, но это не помогло. В таблицах SysModuleEdit,

SysModuleEditLcz информации по нему нет.

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

Ниже инструкция по удалению типового раздела из системы:

Пусть «ToDelete» - название обьекта раздела

1. Выполнить скрипт в БД для удаления регистрационных данных:

DECLARE @UId UNIQUEIDENTIFIER;
DECLARE @ModuleEntityUID UNIQUEIDENTIFIER;
DECLARE @ModuleID UNIQUEIDENTIFIER;
DECLARE @Name NVARCHAR(max) = 'ToDelete';
select @UId = UId from SysSchema where Name Like @Name
select @ModuleEntityUID = Id from SysModuleEntity where SysEntitySchemaUId = @UId
select @ModuleID = Id from SysModule where SysModuleEntityId = @ModuleEntityUID;
delete from SysModuleInWorkplace where SysModuleId = @ModuleID;
delete from SysModule where Id = @ModuleID;
delete from SysModuleEdit where SysModuleEntityId = @ModuleEntityUID;
delete from SysModuleEntity where Id = @ModuleEntityUID;
delete from SysDetail where EntitySchemaUId = @UId;
delete from SysLookup where SysEntitySchemaUId = @UId;
delete from [Lookup] where SysEntitySchemaUId = @UId;

2. Через конфигурацию удалите схемы в следующем порядке:

Клентские схемы (раздела, редактирования, детали)
ToDeleteFile
ToDeleteInFolder
ToDeleteInTag
ToDeleteTag
ToDeleteFolder
ToDelete

Проще всего запустить профайлер и создать ещё один раздел, посмотреть, в какие таблицы идёт запись.

Спасибо за материалы. Воспользоваться ими не пришлось. Запустил BPMOnline и злополучного раздела не увидел. Похоже, что сделанного оказалось достаточно.

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

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

Добрый день, Владимир!

Если раздел не зарегистрирован, скорее всего, что-то пошло не так при его сохранении. Вы можете либо зарегистрировать его вручную, либо же просто удалить страницы и объекты из конфигурации, и создать его заново.

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

Подскажите кто-нибудь - почему, в BPMonline 7.6, у работающего процесса не визуализируется входящая в состав его схемы преднастроенная страница. Вот (с некоторыми сокращениями - оставлены кнопка и поле) код модуля страницы, подключённой к преднастроенной странице:

define("RIBContactGuarantorsListModule", [/*"RIBContactGuarantorsListModuleResources", "Contact"*/],
        function(/*resources, Contact*/) {
                return {
                        // Название схемы объекта страницы редактирования.
                        //entitySchemaName: "Contact",
                        // Методы, опредёленные на странице.
                        methods: {
                                // Обработчик нажатия на кнопку [Предылущий].
                                OnPreviouseButtonClick: function() {
                                        this.showInformationDialog("Вызов метода кнопки [Предылущий] из модуля RIBContactGuarantorsListModule.");
                                }
                        },
                        details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
                        diff: [{
                        // Метаданные для добавления поля [Идентификатор]:
                                // Указать на то, что выполняется опера*/ция добавления элемента на страницу.
                                "operation": "insert",
                                "parentName": "Header",
                                "propertyName": "items",
                                // Имя добавляемого полоя.
                                "name": "Id",
                                // Дополнительные свойства поля:
                                "values": {
                                        // Настройка расположения поля на странице.
                                        "layout": { "column": 0, "row": 2, "colSpan": 15}
                                }
                        },
                        {
                        // Метаданные для добавления кнопки [Предыдущий], по нажатию на которую
                        // выполнется переход на предыдущую запись в таблице поручителей:
                                // Указать на то, что выполняется операция добавления элемента на страницу.
                                "operation": "insert",
                                // Указать имя системного контейнера на странице, в который будет добавлена кнопка.
                                "parentName": "LeftContainer",
                                // Указать, что кнопка добавляется в коллекцию элементов управления в контейнере,
                                // имя которого указано в parentName.
                                "propertyName": "items",
                                // Мета-имя добавляемой кнопки.
                                "name": "PreviouseButton",
                                // Дополнительные свойства кнопки:
                                "values": {
                                        // Тип добавляемого элемента - кнопка.
                                        itemType: Terrasoft.ViewItemType.BUTTON,
                                        // Привязка заголовка кнопки к локализуемой строке схемы.
                                        caption: { bindTo: "Resources.Strings.PreviouseButtonCaption"},
                                        // Привязка метода-обработчика нажатия кнопки.
                                        click: { bindTo: "OnPreviouseButtonClick"},
                                        // Настройка расположения кнопки на странице.
                                        "layout": { "column": 0, "row": 1, "colSpan": 1}
                                }
                        }
                        ]
                };
        });
Для создания модуля страницы выбирал в конфигурации: Добавить/Расширенные/Схема модели представления карточки. Свой модуль - RIBContactGuarantorsListModule - унаследовал от BaseModulePageV2 ( NUI ). Прописал в ресурсах для модуля все строки (она - только одна). В процесс, при запуске которого должна выводиться эта страница, добавил элемент "Преднастроенная страница", в её окне, открывающемся при её добавлении в процесс, определил: Клиентский модуль: "Анкета физического лица; Поручители (для РИБ)" - это такой заголовок у модуля. Объект привязки: "Заявка" - есть такой объект (правда пока не наполнен записями). Вот только в качестве Экземпляра объекта привязки пришлось выбрать "[#Страница списка поручителей.Ответственный#]" - ничего другого система не принимала. Дал бизнес-процессу название и подпись. В его свойстве tag прописал строку "Business process". В меню запуска присутствует название процесса. После его запуска, в Журнале процессов видно, что он выполняется. Т.е., запуск и выполнение происходят без ошибки. Но на экран страница почему-то не выводится. Что у меня сделано неправильно? Ребята, помогите, пожалуйста.

Нравится

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

Евгений, в случае использования преднастроенной или автогенерируемой страниц в БП часто возникают проблемы с web-сокетами.
Для решения проблемы попробуйте поменять параметр defaultPort="2001" на любой другой, не использующийся в системе, в т.ч. и другими сайтами BPM.

<wsService type="Terrasoft.Messaging.SuperWSService.SuperWSService, Terrasoft.Messaging.SuperWSService" defaultPort="2001" encrypted="false" portForClientConnection="44310" maxConnectionNumber="100" clearIdleSession="false" clearIdleSessionInterval="120" />

Находится в ...\Ваш сайт\Terrasoft.WebApp\Web.config

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

Подскажите пожалуйста, как бороться с такой записью в логах, и нужно ли это делать в принципе?

2015-10-08 17:36:56,412 [15344] INFO  uzer Terrasoft.WebApp.Global WatchForWorkspaceReload - (Store.Cache[CacheLevel.Workspace]["BPMonline.Application.Version"] = 656) > (current version = 646). Reload web-application ...

После последней установки пакета, сформированного на другом сервере - такие сообщения просто забивают логи. Как я понимаю, из темы про Версионность, что в версии 7.2 есть версия только конфигурации (из таблицы SysWorkspace), но как на эту версию оказывает процесс установки пакета? IIS перезапускается, Redis чистится, кеш в браузерах также чиститься.
И при этом стали периодически прерываться процессы, начинаются, потом вот это сообщение и на этом больше ничего не логгируется по процессу, словно он более не работает (и результата процесса тоже нет). Или это никак не связано?

Нравится

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

Добрый день, Александр!

Необходимо обновить поле Version в таблице SysWorkspace на значение «646»

Возникла рассинхронизация версий сборки и версии индекса в таблице.

Т.е. просто скриптом обновить и всё? Или это как-то можно сделать из UI, например, конфигуратора?

Здравствуйте.
Скриптом или SQL-сценарием из конфигурации (соответствующая закладка над реестром записей).

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

Добрый день!
Скажите, пожалуйста, как в шаблоне почтового сообщения (7.6) можно вставить ссылку на объект
- при нажатии на которую открывалась бы карточка этого объекта.

Например

при нажатии на ссылку открыть - откроется карточка обращения

Нравится

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

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

Может быть не по теме, но как в версии 7.2 в шаблоне указать, что этот текст - это ссылка? При выводе/отправке текста ссылка заменяется на текст. Т.е. нельзя вставить ссылка, так, чтобы пользователь увидел ссылку - "Нажми на меня", получается только просто вставить адрес http://blabla.bla?r=10101&t=10101, и почтовик сам уже определяет, что это ссылка. Но выглядит это не лучшим образом.

"Александр Зубков" написал:

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

В таком виде приходят письма от техподдержки Террасофт.
Так что я думаю, решение должно существовать и быть опробованным и известным?

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

В службе технической поддержки компании Террасофт это реализовано средствами MS SQL сервера.
Александр Зубков уже описал метод реализации этого кейса средствами bpm`online.

"Михайленко Михаил" написал:

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

В службе технической поддержки компании Террасофт это реализовано средствами MS SQL сервера.

Александр Зубков уже описал метод реализации этого кейса средствами bpm`online.

В итоге в шаблон добавляется ссылка вида

то есть ссылка на схему+ид объекта

Выглядlит это в письме следующим образом

Можно ли как-то в шаблоне указать название красивое для ссылки?
типа

и при нажатии уже на "Открыть" открывалась бы ссылка
вида

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

Пользовательскими методами этот кейс не настроить в шаблоне. У Вас url не будет статичным, поэтому методом [url=http://сайт.com]Text[/url] его не решить. Возможно Вам стоит данный кейс реализовать на стороне почтового сервера.

Дарья,
это можно сделать, сформировав гиперссылку в MS Outlook (Новое письмо, закладка Вставка, Гиперссылка).
В открывшемся окошке в поле Текст указываете Открыть, а в поле адрес вашу ссылку вида:
http://имя вашего сервера/0/Nui/ViewModule.aspx#CardModuleV2/CasePage/edit/%Id%

После нажатия ОК, будет сформирована ссылка с текстом Открыть. Копируете ее из Outlook-а и вставляете в свой шаблон в системе.

Спасибо, Наталия!
Работает - это то, что нужно)

Доброго времени, коллеги!

Как правильно указать в шаблоне ссылку используя переменную %id%, чтобы получить номер ID в ссылке почтового письма?

Евгений, по аналогии с другими полями [#Id#] не подходит?

А по поводу ссылки, в 7.16 сделали в шаблоне HTML-блок с параметрами:

smartblock.gif

Зверев Александр,

Большое спасибо! Параметр [#Id#] подошёл, но вот генерирует он ID записи визирования, а не ID Изменения. Придётся делать макрос.

Версия платформы: 7.13.0.284

 

Если нужно значение другого справочного поля, можно аналогично по связям. Посмотрите, как в других шаблонах из справочника, где все они хранятся.

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

Раз поддержка отправила меня отлаживать код, вынесу вопрос из текущей работы в общую ленту для привлечения коллективного разума.
В одной из деталей на основе BaseGridDetailV2 с мультивыбором добавил в действия возможность снять все установленные "галочки", т.е. DeselectAll так:

this.set("SelectedRows", []);

А вот обратная операция не получается - нужно действием проставить все "галочки". Пробовал так:

var gridData = this.getGridData();
var collection = this.Ext.create("Terrasoft.BaseViewModelCollection");
var items = gridData.getItems();
Terrasoft.each(items, function(item) {
        collection.add(item.get("Id"));
});
this.set("SelectedRows", collection);

Не получается - то есть галочки не появляются.
Кто-нибудь пробовал такое действие сделать, коллеги? В системе примера не нашел...

Нравится

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

Добрый день Александр!!!

из вашего сообщения недопонял, что вы желаете реализовать Select ALL или DeSelect ALL. поясните пожалуйста. и я тогда вам приведу пример кода.

"Власов Михаил Викторович" написал:Select ALL

Именно select all. Буду очень благодарен за пример.
Deselect вполне получился.

Александр, добрый день!

В первом случае Вы присваиваете атрибуту "SelectedRows" пустой массив, а во втором пытаетесь присвоить коллекцию. Попробуйте во втором случае также присвоить массив идентификаторов:

var gridData = this.getGridData();
var selectedRows = [];
var items = gridData.getItems();
Terrasoft.each(items, function(item) {
        selectedRows.push(item.get("Id"));
});
this.set("SelectedRows", selectedRows);

Олег, спасибо. Ошибку свою понял, разобрался, все получилось.

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