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

При добавлении, удалении или изменении записи детали "Бонусы", поле "Бонус по плану" каждой записи пересчитывается относительно суммы полей "Доля" всех записей. Пересчет реализован на сервере при событиях onSaved и onDeleted. Обновление грида детали происходит при помощи subscriber:

"SxProjectTeamBonus": {
"schemaName": "SxProjectTeamBonusDetailV2",
"entitySchemaName": "SxProjectTeamBonus",
"filter": {
"detailColumn": "SxProject",
"masterColumn": "Id"
},
subscriber:function(){
this.updateDetail(
{
detail: "SxProjectTeamBonus",
reloadAll: true
}
);
}
}
При удалении или изменении записи, в гриде детали на странице проекта отображаются верные значения. Но при добавлении правильные значения только у добавленной записи. Остальные же не обновляются. В базу заносятся правильные значения, но деталь просто отказывается обновляться.
Пробовал и this.updateDetail({detail: "SxProjectTeamBonus"}) и this.updateDetails() и при помощи SUBSCRIBE/PUBLISH.
Как заставить грид детали обновиться при добавлении новой записи?

Нравится

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

Решил проблему с помощью reloadEntity()
Но, может быть, все-таки есть способ обновить грид детали не обновляя страницу проекта?
Интересный факт - при нажатии на колонку грида, чтобы отсортировать по ней записи - данные обновляются.

Олег, добрый день!

Уточните, пожалуйста, версию, которую Вы используете.

Версия BPMOnline 7.5

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

Рекомендую посмотреть процессы, реализованные в объекте "Продукт в заказе" - при добавлении или удалении записи запускается процесс, которые пересчитывает поле "Итого".
Аналогичным образом может быть реализована Ваша задача.

Важно! При добавлении/удалении записи, Вам необходимо (на сколько я понял), пересчитывать не только значение поля в самом разделе, но еще и все записи в объекте детали, у которых поле для связи с объектом содержит то же значение, что и у добавляемой/удаляемой записи.

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

Добрый день.
Помогите с реализацией примера процесса в BpmOnline 7.6 BankSales

1. Необходимо создать новый объект в системе без создания нового раздела.
2. Создать его страницу редактирования.
3. Добавить его как деталь в раздел Физ.Лица.
4. Создать процесс в разделе Физ.Лица. при запуске которого открывается карточка редактирования созданного объекта с заполненным полем выбранного Физ. лица. и после сохранения карточки создается задача на пользователя.

Реализация на текущий момент:
1. Создал объект "Согласование отпуска" с полями Физ.Лицо., Заголовок, Ответственный
2. Создал новую деталь в разделе Физ.Лица с помощью мастера деталей
3. Зарегистрировал созданную мастером страницу редактирования с помощью процедуры
EXEC [dbo].[tsp_RegisterPage]
@ModuleEntityName = N'nfcMatchingAbsent',
@PageName = N'nfcnfcMatchingAbsent1Page',
@TypeColumnUId = NULL,
@TypeValue = NULL,
@AddMenuCaptionRus = NULL,
@AddMenuCaptionEng = NULL,
@CardHeaderCaptionRus = NULL,
@CardHeaderCaptionEng = NULL
4. Создал процесс, и добавил элемент страница редактирования.
5. В поле страница элемента редактирования "Страница редактирования" моя зарегистрированная страница не появилась.
6. Вписал значения страницы и объекта вручную (Id объектов в переменные ObjectSchemaId и PageSchemaId).
7. Установил значение по умолчанию Физ.Лицо
8. Опубликовал процесс.
9. При запуске процесса в консоли возникает ошибка:
В консоли опять ошибка Uncaught TypeError: Cannot read property 'cardSchema' of undefined
:8075/core/e995a30a7af7cc9773586f5211d95c73/Terrasoft/amd/core.js:555 user: Supervisor/7f3b869f-34f3-4f20-ab4d-7480a5fdf647
file: http://ччч.ru:8075/0/configuration/75c5ed49bdf66b4c26da63b1d93b3572/ConfigurationBootstrap.js
line: 6064
message: Uncaught TypeError: Cannot read property 'cardSchema' of undefined

Нравится

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

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

"Илья Т." написал:

Добрый день.

Помогите с реализацией примера процесса в BpmOnline 7.6 BankSales

2. Создал новую деталь в разделе Физ.Лица с помощью мастера раздела

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

Есть два решения Вашей задачи.
Первое - пользовательскими инструментами системы:
1) Создайте новый раздел, используя мастер раздела. Создайте поля, которые должны быть на детали.
Данное действие создаст страницу редактирования раздела (которая будет позже вызываться в бизнес процессе).
Созданный раздел не нужно выводить в рабочие места - он будет техническим.

2) Создайте деталь на основе объекта, созданного в первом пункте. Деталь создается с использованием мастера детали.

3) Выведите созданную деталь в нужный раздел, используя мастер раздела в нужном разделе (прошу прощения за тавтологию).

Итог: у Вас есть страница редактирования и деталь, которые смотрят в один объект.

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

Второе - создать свою страницу редактирования, используя навыки программирования на Java Script, унаследовав, например, базовую страницу редактирования справочников. После этого, созданную страницу необходимо зарегистрировать в качестве страницы редактирования, используя хранимую процедуру [dbo].[tsp_RegisterPage].

Алексей, ошибся, создал деталь с помощью мастера деталей.

И получается что на каждый новый объект нужно создавать технический раздел?
Это очень неэкономный способ. Так как параллельно создается множество иных объектов. И еще существует ограничение по длине названия создаваемого объекта.
И как быть если я хочу отобразить карточку уже существующего объекта? Например страницу редактирования Адреса?

Илья, для этого есть преднастроенная страница.
Преднастроенная страница хранит Id создаваемой записи. После преднастроенной страницы элементом "Изменить данные" созданная запись привязывается к нужному Контакту/Контрагенту.

Алексей, а можно ли как то передавать значения по умолчанию в элемент "преднастроенная страница" без создания промежуточных страниц?
Как показано здесь http://www.community.terrasoft.ru/img/video/lms/28/story.html это также очень затратный способ.

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

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

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

Нравится

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

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

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

:biggrin:
throw new Exception("Сообщение пользователю")

Дмитрий спасибо, то что нужно!

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

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

Подскажите, пожалуйста, пару моментов.
1. Пытаюсь реализовать раздел, аналогичный разделу "Счета". В разделе есть поле, где можно выбрать счёт из справочника "счета". Делаю вкладку, где размещается деталь "Продукты в счете". Колонка детали - "Счёт". Колонка объекта - "Счёт". Когда выбираю счёт, сохраняю его, в деталь продукты подгружаются, здесь всё нормально. Но когда создаю новый объект раздела, вместо пустого поля выдаётся список всех возможных продуктов. Как этого избежать - чтобы можно было просто выбрать нужные продукты при создании нового объекта раздела?
2. Делаю в этом же разделе ещё одну вкладку. Туда должна подгружаться пустая деталь для выбора продуктов - как при создании нового счёта. Эти продукты не привязаны к счёту. Как это правильно реализовать?

Спасибо.

Нравится

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

Здравствуйте, Александр!

1) Достаточно сделать поле "Счет" обязательным для заполнения в Вашем разделе - новая запись не будет создана, если поле "Счет" не заполнено, а если поле "Счет" заполнено, то подтянутся продукты со счета.
2) Поле "Счет" является обязательным для заполнения в объекте "Продукты в счете". Для реализации данного функционала Вам необходимо в объекте "Продукты в счете":

  • Сделать поле "Счет" необязательным для заполнения
  • Создать новое справочное поле, которое будет "смотреть" на объект Вашего раздела (назовем его "Связь с разделом"

На детали Вам необходимо будет указать полем для связи с разделом следующие поля: Деталь.Связь с разделом, Раздел.Id

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

Как добавить свою страницу в список страниц доступных в элементе "Редактирование страницы" BpmOnline 7.6 BankSales

Нравится

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

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

Элемент "Страница редактирования" позволяет открывать страницы редактирования разделов/карточек. Для добавления собственной страницы необходимо регистрировать страницу через БД.
Более подробную информацию Вы можете ознакомиться открыв файл, который я прикрепил.

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

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

registraciyarazdela-kartochkiredaktirovaniyavnui.doc

Дмитрий, зарегестрировал страницу
EXEC [dbo].[tsp_RegisterPage]
@ModuleEntityName = N'nfcMatchingAbsent',
@PageName = N'nfcnfcMatchingAbsent1Page',
@TypeColumnUId = NULL,
@TypeValue = NULL,
@AddMenuCaptionRus = NULL,
@AddMenuCaptionEng = NULL,
@CardHeaderCaptionRus = NULL,
@CardHeaderCaptionEng = NULL

В списке элемента процесса она не появилась. Вписал значения страницы и объекта вручную (Id объектов в переменные ObjectSchemaId и PageSchemaId). В элементе Редактирование страницы все стало верно.
Опубликовал процесс и запустил.
В консоли опять ошибка Uncaught TypeError: Cannot read property 'cardSchema' of undefined
:8075/core/e995a30a7af7cc9773586f5211d95c73/Terrasoft/amd/core.js:555 user: Supervisor/7f3b869f-34f3-4f20-ab4d-7480a5fdf647
file: http://ччч.ru:8075/0/configuration/75c5ed49bdf66b4c26da63b1d93b3572/Con…
line: 6064
message: Uncaught TypeError: Cannot read property 'cardSchema' of undefined
date: Thu Sep 17 2015 17:22:57 GMT+

Илья, уточните, с чем вы работаете: 7.6 или 5.2. Эти платформы хотя и имеют некоторые общие механизмы, но реализация может значительно отличаться. Нельзя просто так взять и запустить скрипт от 7.Х в 5.Х.

Александр, Конечно с 7.6, я даже в заголовке это указал.

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

"Демьяник Алексей Олегович" написал:

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


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

Илья, по функционалу или по строению кода ничем, кроме того, как она зарегистрирована в таблице SysModuleEdit (страница раздела).
Согласно базовой логики если Вам необходимо открывать страницу раздела, то используйте «Страницу редактирования». В данном элементе можно использовать только страницы редактирования раздела.
Если Вам необходимо открывать страницу детали, то используйте «Преднастроенная страница».
Об это говорил пользователь Вильшанский Дмитрий.

Также заметил, что есть похожий топик созданный Вами, где были предложены другие варианты решения - http://www.community.terrasoft.ru/forum/topic/13029

Алексей, еще один вопрос, можно ли создать "технический раздел" по существующему объекту?
Пример: мне в процессе нужно открыть страницу редактирования адреса Физ. лица. с передачей параметра в эту карточку.
Вопрос: как это можно сделать наиболее оптимальным способом?

Илья, так как это страница детали, то для своего БП можете использовать преднастроенную страницу.
Создавать разделы можно на основании пользовательских существующих объектов, если в мастере раздела указать название существующего объекта.
Если это базовый объект, то можете попробовать убрать значение системной настройки «Префикс названия объекта» и в мастере указать название объекта. Но гарантий нет, что с деталью «Адрес физ. лица» получиться.

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

Скажите, пожалуйста, в каком пространстве имён находится класс UserConnection, который имеет свойство EntitySchemaManager, относительно которого вызывается метод GetInstanceByName(). Собственно, меня здесь больше всего интересует сам метод GetInstanceByName(). Заранее благодарен.

Нравится

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

Евгений, добрый день!

Класс UserConnection находится в пространстве имён Terrasoft.Core.

Метод GetInstanceByName реализован в классе Manager, от которого наследуются все менеджеры системы, в том числе и EntitySchemaManager. Класс Manager также находится в Terrasoft.Core.

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

Добрый день!
При расположении объектов с помощью css-разметки через подключение своего модуля с соответствующим кодом возник вопрос. Необходимо двигать ActionButtonsContainer и SectionContainer находясь в новом разделе. При этом SectionContainer должен находиться справа. Переопределив SectionContainer через исходный код с BaseSectionV2 получилось сделать последнее (сделал для него "wrapClass": ["section", "right-el"]).

Но, при переходе в любой другой раздел (без перезагрузки страницы или сброса кэша) продолжает отрабатывать мой css-модуль. Т.о. в других разделах разметка ActionButtonsContainer и SectionContainer начинает "плыть".

Как можно избежать подобного?

Нравится

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

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

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

"Лабьяк Олег Игоревич" написал:
Для избежания необходимо в Вашем модуле определить уникальные классы и использовать их вместо базовых или совместно с базовыми, чтобы не затрагивать остальные элементы.

Олег,спасибо! Если мне нужно добавить в свой раздел модуль карты и расписания, то мне нужно в блоке diff делать insert соответствующих объектов и указывать в свойстве "values" какие мне угодно значения в поле "wrapClass"?

есть такие загадочные записи, возможно наведет вас на мысль:

[id*='like-it-'],
[id*='tags-button-'] {
padding: 0px;
padding-left: 0px!important;
margin: 0px;
top: 0px;
vertical-align: middle;
margin-right: 10px;
background-position: 3px;
background-repeat: no-repeat;
height: 26px;
}
 
или
 
div[data-item-marker*="FileDetail"] {
	div[data-item-marker*="tiled"], div[data-item-marker*="listed"] {
 
		.ts-controlgroup-tools {
			.disable-left-margin {
				margin-left: -1px;
			}
		}
	}
}
Показать все комментарии
EntitySchemaQuery
Технические вопросы
7.x

У класса EntitySchema есть метод GetPrimaryColumnName. В SDK, его описание состоит только из одной строчки: "Возвращает имя первичной колонки данной схемы на уровне базы данных.". Т.е., другими словами, этот метод возвращает имя колонки первичного ключа таблицы?

Нравится

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

Евгений, первичный ключ - это значение, а GetPrimaryColumnName возвращает название колонки.
Первичной колонкой может быть любая колонка (например, «Name» или «Code»).

Т.е. первая колонка в перечне колонок объекта?

Первичная колонка в объекте. В основном это "Name".
Но первичную колонку объекта может менять на другую любую. Но тех. поддержка не рекомендует, так как на первичную колонку завязана базовая логика.

Вот, например, если взять объект Contact. У него есть поле (колонка) Name, вот она и является первичной колонкой объекта?

Евгений, совершенно верно.

Евгений, совершенно верно.

Хорошо, спасибо.

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

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

Вопросы:
1)Можно ли посмотреть журнал изменений, встав на конкретную запись в системе?
например в карточке контрагента/обращения/контакт выбрать действие - "показать журнал изменений", и сразу же откроется история изменений именно по этой записи.
Искать в общем журнале неудобно, долго

2) Далее, в журнале изменений видно, что какой-то пользователь что-то менял в объекте, но не видно что же собственно он менял - например, в объекте "Обращения" отслеживаются изменения нескольких полей - ответственный, состояния и т.п.
Хотелось бы посмотреть, какие конкретно поля менялись, и что именно - в этом же и заключается смысл отслеживания изменений. Есть на данный момент такая возможность?

Возможность просмотреть историю изменений по конкретной записи, а также, какие именно поля менялись, была на платформе 3.х (3.4).
В версию 7.х данной возможности пока нет?

Нравится

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

По поводу вопроса с журналом изменений по конкретной записи увидела, что необходимо добавлять деталь самостоятельно
тема http://www.community.terrasoft.ru/forum/topic/12526

Хотя, на мой взгляд, было бы логично, если бы деталь включалась бы автоматически.

А что по поводу просмотра, какие именно поля менялись? Причем, насколько я вижу через sql, история изменения этих полей записывается - но только почему-то не выводится в клиенте такая информация

Дарья, здравствуйте.

Когда Вы настраиваете журнал изменений, Вы выбираете колонки для логирования.

После того, как добавите деталь, Вы можете вывести в реестр настроенные колонки.

Отсортируйте по дате изменения и смотрите, какие колонки были изменены.

Добрый день! Спасибо
Тогда вопрос по добавлению детали
В теме http://www.community.terrasoft.ru/forum/topic/12526
предлагается создать в конфигурации объект представления VwSysContactLog, и скрипт для создания представления в бд.
Этот объект надо унаследовать от другого какого-то объекта?
На принтскрине в объекте перечислены следующие поля ID, Name, ChangeTracked.
ChangeTracked - это справочник судя по всему - на какой справочник ссылка должна быть?
Id - это уникальный идентификатор, не вижу такой тип поля при добавлении поля в объект, как его добавить?
Если я хочу на деталь выводить колонки для логирования, такие как ответственный, статус и т.п., мне тогда нужно добавить их как поля в этот объект представления?

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

1. Если Вы присмотритесь внимательно, то по скриншотам видно, что:

- Родительский объект не указан;
- ID указан, который был добавлен руками как новая колонка (уникальный идентификатор).

2. ChangeTracked – это ссылка на логируемый объект.

3. Отображение колонок зависит, от того как Вы настроите логирование объекта в журнале изменений. Отобразите колонки, которые Вам нужны.

«Поигратесь» создавать объект на основании представления экспериментальным путем и в результате все станет ясно.

Спасибо - с деталью получилось вывести колонки.

Остался вопрос по общему журналу изменений.

В журнале есть действие "Показать все изменения выделенной записи".
Я так понимаю, непосредственно с этим действием связана страница «RecordAllChangesGridPage»
из темы http://www.community.terrasoft.ru/forum/topic/13020
Вижу, что в функции идет окрашивание записи в целом(красная,синяя,зеленая)
и окрашивание одного поля в реестре(т.е. логируемого поля, если его значение изменено),
но эта ветка из форума по 5.х

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

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

Можно ли ориентироваться на подобный код из 5.х, который вы приводили
в теме http://www.community.terrasoft.ru/forum/topic/13020

var cellsBackground = new Dictionary();
if (PreviousRow != null && HighlightColumns) {
var previousRow = PreviousRow as Entity;
foreach (var column in row.Schema.Columns) {
if ((column.Name != "ModifiedOn") && (column.Name != "ModifiedBy")
&& (column.Name != "ChangeTrackedBy") && (column.Name != "ChangeTrackedOn")
&& (column.Name != "ChangeType")) {
object currentValue = row.GetColumnValue(column.Name);
object prevValue = previousRow.GetColumnValue(column.Name);
if (!Object.Equals(currentValue, prevValue)) {
cellsBackground.Add(column.Name, new DataSourceRowColumnBackgroundColorConfigValue("#FFF30F"));
}
}
}
}
PreviousRow = row;
config.AddConfig(new DataSourceRowColorConfigValue(backgroundColor));
config.AddConfig(new DataSourceRowColumnsBackgroundColorConfigValue(cellsBackground));
return config;
}
Или же принципы подсветки поля в 7.х другие?
Можно ли в 7. отображать другим цветом одно поле в реестре, или подобная возможность есть только в 5.х пока?

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

Цель: Реализовать подсветку записей реестра если у продажи на объекте поле IsNotInterest= true
Реализация:

Создаем метод gridRecolor.

gridRecolor: function () {
   var gridData = this.getGridData();
   var items = gridData.getItems();
   var loadedObject = {};
   Terrasoft.each(items, function (item) {
      item.customStyle = null;
      var facilityId = item.get("Facility").value;
      var opportunityId = item.get("Opportunity").value;
      var isNotInterest = item.get("IsNotInterest");
      //Если условие подходит, меняем цвет записи на темно-серый.
      if (isNotInterest) {
         item.customStyle = {
           'color' : "darkgrey"
         }
      }
      var primaryValue = item.get(item.primaryColumnName);
      //Формируем новый набор данных уже с подсветкой
      loadedObject[primaryValue] = item;
   }, this);
   gridData.clear();
   //загружаем новый набор данных
   gridData.loadAll(loadedObject);
},

Замещаем метод onGridDataLoaded, добавив в него вызов gridRecolor

onGridDataLoaded: function () {
   this.callParent(arguments);
   this.gridRecolor();
},

Вам остается только изменить предоставленный пример согласно Вашей бизнес-задаче.

Добрый день!
Спасибо, я видела этот пример - он подсвечивает всю запись реестра.
Мой вопрос был в том - можно ли сейчас подсветить отдельное поле(ячейку) в реестре в 7.х ( в 5.х как я вижу была такая возможность). Только запись можно целиком, получается?

и правильно ли я понимаю, что в общем журнале изменений в 7.х сейчас не получится посмотреть, что именно изменено ( только если деталь сделать):

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

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

Ясно, спасибо

Спасибо

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

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

Нравится

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

Можно воспользоваться открытыми веб-сервисами ЦБ РФ для синхронизации:
http://www.cbr.ru/scripts/Root.asp?PrtId=DWS

И, например, настроить БП по расписанию, который будет своевременно обновлять информацию.

Лучше это вынести в идею, чтобы реализовали в базовом пакете

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