Вопрос

Добрый день, коллеги.

В базе данных bpmonline я создал представление dbo.UsrGetStats c нужными мне атрибутами (Contact, MaxTime, MinTime, AvgTime).

Такой вопрос, как создать объект на основе этого DB VIEW (UsrGetStats)? 

У меня такой же вопрос

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

Добрый день.

Создаете так же, как и простую схему объекта. Подробнее об этом почитайте на академии.

Важно, чтобы названия колонок совпадали с названиями колонок в представлении и, если это справочная колонка, как например, Contact, то в представлении она должна называться ContactId, а в схеме Contact (это только в случае, если Вы ее хотите сделать справочной в схеме).

Также при создании схемы не забудьте указать признак 'Представление в базе данных':

Алла Савельева,

Здравствуйте, спасибо за ответ, помогло!

Примечание: во View не было Id из-за этого выходила ошибка.

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

Хочу в процесса объекта на событии Saving (Перед сохранением) в событийном под процессе.

Сверять значение

Entity.GetTypedOldColumnValue<Guid>("Calendar")==Guid.Empty;

И останавливать сохранение. Подскажите что нужно сделать чтобы приостановить сохранение?

У меня такой же вопрос

8 комментариев
Лучший ответ

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

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

Если все-таки хотите решить эту задачу через сравнение старого и нового значения, то лучше это делать на клиентском, а не на серверном уровне. Посмотрите метод asyncValidate.

Посмотрите этот пост, в котором обсуждается подобная задача.

Так же можно воспользоваться событийным слоем Entity

Алла Савельева пишет:

Посмотрите этот пост, в котором обсуждается подобная задача.

Очень странно есть событие Проверка записи но нет метода для остановки процесса. 

Entity.GetTypedOldColumnValue<Guid>("Calendar")==Guid.Empty

А в чём суть такой проверки? Так, если поле в какой-то момент стало пустое, больше никогда не сможете его заполнить и сохранить запись средствами ESQ.

Зверев Александр пишет:

Entity.GetTypedOldColumnValue<Guid>("Calendar")==Guid.Empty

А в чём суть такой проверки? Так, если поле в какой-то момент стало пустое, больше никогда не сможете его заполнить и сохранить запись средствами ESQ.

Поле календарь обязательно, и используется в расчетах.

При заполнении всех полей в реестре детали и нажатия на кнопку закрыть страницы. Это значение сохраняется пустым. А по нему идет расчет. 

Тогда зачем проверять GetTypedOldColumnValue? Оно же возвращает старое значение, а не нынешнее. Просто проверку обязательности для поля можно включить в дизайнере объекта.

Или же настроить значение по умолчанию и писать туда основной используемый календарь.

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

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

Если все-таки хотите решить эту задачу через сравнение старого и нового значения, то лучше это делать на клиентском, а не на серверном уровне. Посмотрите метод asyncValidate.

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

Можно ли как-то переименовать название объекта таблицы (точнее заголовок). При изменении в объекте сама ORM не переименовывает таблицу в базе данных, а если руками переименовать таблицу а потом объект - тогда выдает ошибку "Ошибка сохранения: ORA-00942: table or view does not exist".

И да, база данных Oracle

У меня такой же вопрос

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

Заголовок менять можно, название лучше не менять, поскольку оно прописано и в метаданных, и в полях таблиц, хранящих информацию о схемах, и в базе данных. Если всё же нужно, можно попробовать путём правки метаданных, аналогично клонированию объекта. Удалить старый объект, загрузить в систему исправленные метаданные и опубликовать. Но, скорее всего, не даст удалить при наличии ссылок на объект. Также нельзя переименовать схему, от которой наследуются другие схемы. Как обходной путь использовать ту же выгрузку метаданных в файл и его исправление для схемы и всех дочерних.

Именно заголовок сменился нормально, объект опубликовался:

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

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

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

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

Коллеги, добрый день. 

 

Имеется ли в системе какой-то инструмент, который позволит узнать имя объектов. 

Задача - отобрать права у пользователей, убрать строку из меню "дизайнер системы". 

В интерфейсе не нашёл информацию по данному меню. 

В реестре прав доступа не могу понять как называется объект. 

У меня такой же вопрос

14 комментариев
Лучший ответ

Посмотреть названия элементов интерфейса можно через инспектор объектов в браузере.

Это меню реализовано в модуле LeftPanelTopMenuModule.

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

Посмотреть названия элементов интерфейса можно через инспектор объектов в браузере.

Это меню реализовано в модуле LeftPanelTopMenuModule.

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

Алла Савельева, я правильно понимаю, что под модулем Вы понимаете "пакет" ? 

Sunrise challenge,

Не, пакет - это пакет, а модуль - это модуль. Модуль - это ClientUnitSchemaManager, скриншот ниже:

Алла Савельева, волей-неволей вспоминается - "стою на асфальте, в лыжи обутый...". Не нахожу его 

Sunrise challenge,

Проверьте, не включена ли фильтрация в нижней панели окна сервисов (на скриншоте выделила красным):

Алла Савельева,

Вы оказались правы. Как-то не очевидно, что он установлен. 

Метод я нашёл, но сохранить изменения он не даёт: 

"Невозможно сохранить изменения элемента "LeftPanelTopMenuModule", так как он создан сторонним издателем или установлен из файлового архива"

Sunrise challenge,

Вам нужно заместить модуль LeftPanelTopMenuModule.

Посмотрите вот этот пост - там описан общий подход к внесению изменений в модуль.

Алла Савельева,

Спасибо за подсказки. В дополнение - есть ли более простой способ скрыть данное всплывающее меню или убрать из списка "Дизайнер системы"  ? 

Sunrise challenge,

Я не нашла никакой системной настройки, с помощью которой можно было бы управлять этой функциональностью.

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

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

Это не совсем правильно, ибо не нужно агентам и пользователям знать о лишнем функционале, во избежание путаницы. И поиска не регламентированных возможностей. 

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

Зверев Александр пишет:
Вообще, если бы такое настраивалось, то не в системных настройках, а в правах доступа на операции.

Это была описка - речь шла о правах доступа на операции.

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

Саша, а ты можешь это внести в список пожеланий от клиента? Я на 100% согласна, что такая настройка должна быть в базовой версии. 

Алла, такое пожелание уже заведено раньше.

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

Коллеги, приветствую.

Столкнулись с неожиданной проблемой при сохранении объекта в любом из пакетов: "Ошибка сохранения: Измерения массива превысили поддерживаемый диапазон.".

Никто не сталкивался? Также не понятно, где в логах найти подробную информацию об этой ошибке.

У меня такой же вопрос

3 комментария
Лучший ответ

Дело не совсем в приложении, очень похоже на то, что проблема с размером оперативной памяти на сервере.

Дело не совсем в приложении, очень похоже на то, что проблема с размером оперативной памяти на сервере.

Алла Савельева,

Алла, здравствуйте. На IIS сервере памяти хватает, тем не менее ошибка есть.

Arthur Matyukov,

А на сервере базы данных память проверяли?

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

Возник вопрос. Как создать такое поле чтобы его значение было уникальным, как id ?

К примеру наименование услуги, чтобы не было 2 одинаковых.
Или как заменить системный ID на свой?

У меня такой же вопрос

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

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

Вы можете добавить проверку на объекте на событие "До сохранение записи". Либо сделать триггером в БД.

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

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

У меня такой же вопрос

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

Виктор,

Вы можете выполнить добавление справочного поля в виде выпадающего списка с помощью мастера раздела:

http://academy.terrasoft.ru/documents/docs/product/bpm'online%20sales/omnichannel/7.6.0/BPMonlineHelp/chapter_section_wizard/section_wizard_page_fields_setup.htm

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

Добрый день Виктор!!!

как вы желаете создать справочник, вручную или с помощью мастера-разделов? под словом "вручную " я подразумевал создание страниц раздела, справочника, деталей с помощью Админской части BPMOnline.
если с помощью мастера разделов, то вот ссылка на академию

Мастер-раздела

как вы желаете это сделать, поясните пожалуйста? спасибо!!!

Тo есть, что бы создать список со значениями:
Рука
Нога
Голова
Глаз

Мне надо создавать отдельный раздел и делать так что бы он не отображался с левой стороны для юзера?

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

А потом внесите(зарегистрируйте) этот справочник в разделе Справочники, и наполните значениями

Виктор, если вы желаете создать просто справочник с константными значениями, то вам достаточно средствами Админки, создать схему таблицы (Объекта). При создании схемы Объекта, присваиваем Имя объекта,в поле "Родительский объект" выбираем "Базовый справочник", Сохраняем и публикуем схему Объекта. После переходим "Дизайнер системы" --> "Справочники". Регистрируем созданный справочник, для этого в разделе Справочники нажимаем кнопку "Добавить справочник", в поле "Объект" выбираем нашу схему созданного Объекта, присваиваем справочнику Название и Сохраняем. После сохранения позиционируем курсор на созданном справочнике и жмем кнопку "Открыть наполнение". Выполняем наполнение созданного справочника. А уже далее если вам требуется отобразить созданный справочник на странице редактирования, в виде поля, пользуемся Мастером раздела.

Можно и так как посоветовала Дарья. Я рассказал ручной способ создания справочника. :smile: Мне так привычнее и удобнее.

Михаил, как разработчик мне так будет проще. Будем пробывать! Спасибо!!

Доброго времени суток!
Дабы не плодить новые темы задам вопрос тут.
Есть стандартный справочник Контакты. Мне надо создать его копию, но только так что бы в нем показывались только Контакты с нужным типом записи. Вопрос как добавить данный фильтр?

"Сенько Виктор" написал:Вопрос как добавить данный фильтр?

Добрый день Виктор!!!

фильтр пользовательский или на уровне кода?

Я думаю в данном случае код не нужен. Но если надо так надо)
Просто я немного в шоке как сложно в данной crm сделать некоторые простые вещи)

Виктор, платформа BPMOnline разработана и продумана на самом высочайшем уровне. Программировать на платформе BPMOnline одно удовольствие. можно интегрировать новые инструменты сторонних разработчиков, можно создавать свои инструменты, никто вас Виктор в этом не ограничивает. Движок платформы развивается от версии к версии. SDK растет, SDK и инструменты внутри платформу конкуренты на рынке IT. BPMOnline уже заняла и занимает лучшие похвалы в Мире, и отмечена уже не одним изданием.

Ну не просто так мы переходим на данную crm.
Но вопрос открыт. Что делать?

Здравствуйте, Виктор!

Два варианта:
1) Создать объект в конфигурации. При этом в поле родительский объект Вам необходимо указать "Базовый объект". Далее Вы добавляете нужные колонки и публикуете объект.

При этом создается таблица в БД.
Далее, Вы регистрируете справочник, указывая созданный Вами объект.

2) В мастере разделов добавить новое справочное поле, выбрать вид отображения - выбор из списка, выбрать "Новый справочник", задать название и заголовок новому справочнику (с этих данных будет создан объект) (*).
Сохраните внесенные изменения, перейдите в справочники и зарегистрируйте справочник по заголовку объекта, который Вы указали в шаге (*).

я еще раз Виктор с вашего позволения продублирую свой вопрос:

Какой фильтр вам привести в пример, как создавать, пользовательский или на уровне кода?

"Сенько Виктор" написал:Есть стандартный справочник Контакты. Мне надо создать его копию, но только так что бы в нем показывались только Контакты с нужным типом записи.

Что по данному вопросу вам посоветовать, подсказать, какими примерами поделиться?

Буду очень рад если вы приведете пример для двух способов. Вчера Вы мне хорошо помогли.

Первый способ Виктор пользовательский:

в первую очередь советую ознакомиться с Хелпом, "Как работать с фильтрами в разделах." Вот ссылка: Работа с фильтрами, Настройка фильтров.

после прочтения Хелпа можно приступать к созданию динамических Фильтров.
Для этого:
1. Открываем раздел "Контакты"
2. Открываем левую панель по работе в Фильтрами. Для этого в выпадающем меню "Фильтр", выбираем пункт меню "Показать группы"
3. Добавляем Динамическую группу. Для этого, на левой панель Фильтры, в выпадающем меню "Добавить группу", выбираем "Динамическую". Присваиваем имя и начинаем выполнять настройку Динамического фильтра.
4. Настраиваем фильтры, для этого нажимаем "Добавить условия", в появившемся окне выбираем колонку "Тип" = "Клиент". Как приведено на картинке ниже.

5. Сохраняем и Применяем созданных динамический фильтр.

Вот так последовательно можно Создавать динамические фильтры.
Рекомендую уже ознакомиться с преднастроенными динамическими фильтрами, что идут в поставке системы. Чтобы иметь предстваление какие простые или сложные условия можно создавать и использовать в работе.

Эм... Мне не надо фильтр в самом разделе.
Мне надо сделать так, что бы в данном диалоговом окне можно было выбрать только те Контакты, у которых Тип записи допустим Клиент. И только клиент. Выбор каких то любых контактов запрещен.

И как я понял надо создать новый специфический справочник?

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

Нет не создавал. Но все еще впереди. Так что буду благодарен за инфу

Добрый день Виктор!!!

прежде чем приступать к разработка на платформе BPMOnline 7.6 рекомендую ознакомиться с документацией по платформе. Вот ссылка на SDK по платформе BPMOnline 7.6: SDK BPMOnline 7.6

по вашей задачи вот ссылки на документацию.
1. как выполнить замещение схемы: Как создать замещающую схему страницы или раздела
2. применение фильтров к справочным полям: Добавление правила [FILTRATION] на страницу редактирования, Применение фильтров к справочным полям, Настройка полей страницы редактирования с помощью бизнес-правил

Ознакомьтесь Виктор пожалуйста с документацией. Попробуйте по образу и подобию выполнить фильтрацию по своему полю. Если не будет получаться, или будут вопросы, ошибки, прошу писать в данном посте. Спасибо!!!

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

Добрый день.
Помогите с реализацией примера процесса в 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 это также очень затратный способ.

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

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

При создании новой записи, зачастую нужно чтобы в отдельных полях уже были заполнены значения по умолчанию: поле для ввода номера телефона содержало значение +7, или для контакта поле Тип содержало значение Контактное лицо.

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

Ниже пример конкретного кейса, где необходимо указать имя контакта по умолчанию:
1. перейти в раздел "Конфигурация";
2. открыть объект, где содержится данная колонка (например, объект "UsrEntity1");
3. далее выбрать необходимую колонку (например, колонка "Column1") и в свойствах открыв "Значение по умолчнию" установить константу, например, "Иванов".

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

У меня такой же вопрос

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

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

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

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

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

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

BPM 7.3.0.745

При замещение объекта "Продукт в продаже" возникает ошибка:
Ошибка сохранения: Имя "OpportunityProductInterest" объекта "Продукт в продаже" превышает 22 символов

Error image

Возможно ли заместить этот объект?

У меня такой же вопрос

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

Добрый день, Тарас!
Можно снять ограничение на имя схемы. Для этого нужно изменить значение параметра maxEntitySchemaNameLength в файле web.config загрузчика, то есть в корневом каталоге сайта:

<general connectionStringName="db" securityEngineType="Terrasoft.DB.MSSql.MSSqlSecurityEngine, Terrasoft.DB.MSSql" executorType="Terrasoft.DB.MSSql.MSSqlExecutor, Terrasoft.DB.MSSql" engineType="Terrasoft.DB.MSSql.MSSqlEngine, Terrasoft.DB.MSSql" metaEngineType="Terrasoft.DB.MSSql.MSSqlMetaEngine, Terrasoft.DB.MSSql" metaScriptType="Terrasoft.DB.MSSql.MSSqlMetaScript, Terrasoft.DB.MSSql" typeConverterType="Terrasoft.DB.MSSql.MSSqlTypeConverter, Terrasoft.DB.MSSql" binaryPackageSize="1048576" currentSchemaName="dbo" enableSqlLog="false" useOrderNullsPosition="false" maxEntitySchemaNameLength=100/>

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

Войдите или зарегистрируйтесь, чтобы комментировать