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

Имеем классический трехуровневый ландшафт: Разработка (DEV), Тестирование (TST) и промышленный (PRD). В DEV включен режим разработки в файловой среде. Есть потребность в наполнении DEV данными из PRD. Именно только данные. Пробовал делать бэкап базы PRD и разворачивать его на DEV. Из минусов решения - это то, что все пакеты разработки становятся установленными из вне, теряют связь с хранилищем, заново приходится отключать все настройки синхронизации почты и перенастраивать интеграции на другие базы.

Есть вариант написать SQL скрипт в котором определить перечень некопируемых таблиц и запускать его. Кстати, подобным образом происходит копирование систем у SAP (если уместно данное сравнение).

А как это делаете вы?

Нравится

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

Здравствуйте! Что касается пакетов,  можете разблокировать их выполнив sql скрипт

update SysPackage
set IsChanged = 1, InstallType = 0, IsLocked = 1, Maintainer = 'Customer'
where Name in ('PkgName')
and SysWorkspaceId in (select Id from SysWorkspace where Name = 'Default')

Что касается привязки пакета к хранилищу, то по этому поводу хорошо описано в данной статье- https://academy.terrasoft.ru/documents/technic-sdk/7-14/privyazka-k-svn-ne-svyazannogo-s-hranilishchem-paketa

Здравствуйте! Что касается пакетов,  можете разблокировать их выполнив sql скрипт

update SysPackage
set IsChanged = 1, InstallType = 0, IsLocked = 1, Maintainer = 'Customer'
where Name in ('PkgName')
and SysWorkspaceId in (select Id from SysWorkspace where Name = 'Default')

Что касается привязки пакета к хранилищу, то по этому поводу хорошо описано в данной статье- https://academy.terrasoft.ru/documents/technic-sdk/7-14/privyazka-k-svn-ne-svyazannogo-s-hranilishchem-paketa

Нигрескул Алексей,

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

Чтобы на тесте не включались интеграции с прода, можно написать один большой SQL-запрос, который чистит нужные значения системных настроек, справочников и прочего. А затем его запускать после разворачивания теста из бекапа прода вручную или, например, по действию в TeamCity.

Все зависит как часто вам нужно с прода переносить данніе в среду разработки, и нужно ли переносить абсолютно все или например данные нескольких разделов (те отдельные таблиы) если второе то как вариант можно использовать зеркалирование (Database Mirroring) или другие аналогичные мезанизмы синхронизации разных БД

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

Коллеги, прошу помощи в решении следующего кейса.

Есть оргструктура техподдержки на 3 организации. Mos, Nov, NEZ

NOV и NEZ подчиняются MOS.

Раздел обращения. Все обращения создаются автоматически из почты. Т.е. поле создал в 98% одинаково. Поле контрагент заполняется само и соответствует организации. Надо настроить раздачу прав на обращения таким образом, чтобы обращение, созданное организацией NOV было доступно только NOV и MOS. Обращение созданное организацией NEZ было доступно только NEZ и MOS. Обращение созданное организацией MOSбыло доступно MOS.

Тоже надо сделать и для других объектов: Конфигурационные единицы, Сервисы, Сервисные договоры, проблемы, изменения.

Есть предположение что это надо делать БП и перераспределять права в зависимости от организации по событию создания Обращения.

И второй вопрос. Как массово сменить права на ранее созданные обращения?

Нравится

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

Мы делаем один процесс распределения прав на запись, который имеет несколько сигналов для запуска (например):
- смена ответственного, 
- смена контрагента,
- смена статуса,
- смена триггерного поля на true.

В объект обращений добавляем триггерное Boolean поле. И затем простым процессом устанавливаем это поле в true для всех записей, для которых хотим перераспределить права по уже прописанным в БП правилам. Ну, и этот БП внутри сбрасывает триггер на false.

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

Я думаю для изминение прав на существующие записи вам будет полезно приложение, 

по предоставлению временных прав доступа и изменению прав доступа на существующие записи

Для новых объектов можно создать БП реагирующих на добавление объекта и меняющих права на него, используя ЭЛЕМЕНТ ПРОЦЕССА [ИЗМЕНИТЬ ПРАВА ДОСТУПА]

Мы делаем один процесс распределения прав на запись, который имеет несколько сигналов для запуска (например):
- смена ответственного, 
- смена контрагента,
- смена статуса,
- смена триггерного поля на true.

В объект обращений добавляем триггерное Boolean поле. И затем простым процессом устанавливаем это поле в true для всех записей, для которых хотим перераспределить права по уже прописанным в БП правилам. Ну, и этот БП внутри сбрасывает триггер на false.

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

 

Владимир Соколов пишет:
Правда, мы отказались от возможности пользователям вручную раздавать права на записи

Если не секрет, то почему отказались? 

Алексей Следь,

Алексей Следь пишет:
Если не секрет, то почему отказались? 

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

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

Когда будет реализована идея https://community.terrasoft.ru/ideas/priznak-sozdania-prav-vrucnuu, тогда сможем понимать, что добавил пользователь, и не удалять те права

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

 

О компании

Фармацевтическая компания «ГЕДЕОН РИХТЕР-РУС» – это дочернее предприятие ОАО Гедеон Рихтер (Будапешт, Венгрия), крупнейшего производителя лекарственных средств в Восточной Европе.

 

Предпосылки внедрения bpmonline

До использования bpmonline обращения в отдел информационного обслуживания не обрабатывались с использованием автоматизированных систем. После проведенного аудита ISO было принято решение автоматизировать процесс работы с заявками внутренних клиентов, которыми являются сотрудники компании.

 

Целью проекта было внедрить эффективный инструмент обработки обращений.

Выполненные настройки

Внедрение bpmonline в данной компании проходило в два этапа.

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

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

  • справка с места работы;
  • копия трудовой книжки;
  • консультация.

 

 

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

 

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

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

 

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

 

 

Был создан отчет, который отображает средний балл удовлетворенности по обращениям HR-департамента.

 

Результат

Внедрение bpmonline позволило решить задачу обработки обращений от внутренних клиентов — сотрудников компании. Работа в единой ИТ-экосистеме позволила сократить и упростить коммуникации между сотрудниками смежных подразделений внутри компании.

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

 

Нравится

Поделиться

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

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

Не могу найти внятного мануала на тему использования фильтрация в БП. 

Хочу отфильтровать ответственного по тикету по группе ответственных. (Выбираем группу -> список ответственных уменьшается). 

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

Нравится

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

Вашу задачу можно решить не только с помощью бизнес-правил.

Например, в базовой версии фильтрация поля 'Ответственный' настраивается через атрибуты таким образом:

"Owner": {
	"dataValueType": Terrasoft.DataValueType.LOOKUP,
	"lookupListConfig": {"filter": BaseFiltersGenerateModule.OwnerFilter}
}

Более того некоторые задачи по фильтрации данных с помощью бизнес-правил вообще не решаются.

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

Начните с просмотра этой статьи. В ней несколько ссылок на более подробное описание различных моментов связаных с БП. Так же просмотрите  статью СТРУКТУРА КЛИЕНТСКОЙ СХЕМЫ

 

 

 

Вашу задачу можно решить не только с помощью бизнес-правил.

Например, в базовой версии фильтрация поля 'Ответственный' настраивается через атрибуты таким образом:

"Owner": {
	"dataValueType": Terrasoft.DataValueType.LOOKUP,
	"lookupListConfig": {"filter": BaseFiltersGenerateModule.OwnerFilter}
}

Более того некоторые задачи по фильтрации данных с помощью бизнес-правил вообще не решаются.

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

Алла Савельева,  требуется следующую логику: 

1) При выборе ответственного, список доступных для выбора групп ответственных должен содержать только те группы, в которые входит ответственный

И обратное:

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

Sunrise challenge,

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

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

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

Нужно ли где-то определять BaseFiltersGenerateModule.OwnerFilter? 

Sunrise challenge,

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

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

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

Компилятор не выдаёт ошибок, схема сохраняется, при этом фильтрация не осуществляется

Sunrise challenge,

А в консоли браузера есть такие-то ошибки при выборе значения для этого поля?

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

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

Нужна ваша помощь. 

При внесении изменения в БП - "Отправка email сообщения контакту обращения", появляется ошибка. 

Правильно ли я понимаю, что нужно заместить какой-то класс? Какой, если так? 

Нравится

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

Проводите вычисления через элемент "Задание-сценарий" 

Могли бы подсказать зачем, если процесс "из коробки" использует другой элемент? 

В новом (нынешнем) дизайнере процессов серьёзно урезали возможности формул. Если в 5.Х и ранних 7.Х там можно было написать кусочек C#-кода с вызовом функций, то сейчас — только функции из перечня в дизайнере формул.

Альтернативным решением может быть либо C#-скрипт, как посоветовал выше Айдар, либо же создание своего пользовательского действия, тоже написанного на C#, с последующим его запуском из элемента «Выполнить действие процесса» с нужными параметрами.

Если такое условие нужно один раз  — проще скрипт, действие же удобнее при многократном использовании.

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

Т.е.: 

1) При обновлении версии приложения, БП, использующие подобные формулы, перестанут работать? 

2) Т.е. при отсутствии знаний С# аналитик решить вопрос не сможет?

1) Новый дизайнер процессов появился довольно давно. Если обновляете систему тех времён со своими доработками, нужно всё тестировать. Кстати, вспомнил, в старых версиях вообще не было элемента-формулы, произвольный код писался в условии потока.

2) Без знания C# он бы не решил и в старой версии, на Вашем скриншоте используются функции и элементы синтаксиса языка.

Также см. аналогичное обсуждение раньше.

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

Добрый день.

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

Здесь все хорошо описано, но у меня почему-то не работает.

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

Есть две таблицы.

ServiceItem и ServiceInServicePact

В ServiceItem есть колонка ITRelatedServiceId для связи со схемой ServiceInServicePact по её колонке ServiceItemId.

Нужно получить колонку Id из ServiceInServicePact

Делаю все как по примеру:

[Имя_присоединяемой_схемы:Имя_колонки_для_связи_присоединяемой_схемы:Имя_колонки_для_связи_текущей_схемы].

EntitySchemaQuery esqServiceItem = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "ServiceItem");
esqServiceItem.AddColumn("[ServiceInServicePact:ServiceItemId:ITRelatedServiceId].Id");
string esqSqlText = esqServiceItem.GetSelectQuery(UserConnection).GetSqlText(); 

И это не работает.

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

 

Нравится

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

А что значит не работает, какая ошибка ?

Григорий Чех пишет:

Григорий Чех пишет:
ОтветитьЦитировать

 

Вот

Ругается на UserConnection, как вы его получаете? Ваш код вызывается из БП  или вєб сервиса???

По идее, если бы UserConnection было равно null, упало бы ещё на верхней строке. Нужно в отладке ещё посмотреть на значения всех упомянутых переменных, с чем что не так.

Как бы не в самой структуре запроса дело, верно была добавлена колонка «Id». Например, в схеме ExchangeEmailSyncProvider похожий запрос строят так:

var mssEntitySchemaQuery = new EntitySchemaQuery(userConnection.EntitySchemaManager, "MailboxSyncSettings");
string primaryColumnName = mssEntitySchemaQuery.AddColumn(mssEntitySchemaQuery.RootSchema.GetPrimaryColumnName()).Name;
//...
string activityRootFolderIdColumnName = mssEntitySchemaQuery.AddColumn("[ActivityFolder:Name:MailboxName].Id").Name;

 

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

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

 

Столкнулся с проблемой. 

1) На форме обращения дублируется поле "Сервисный договор", несмотря на то, что в конструкторе раздела отображается только одно 

2) Порядок полей на форме не соответствует порядку полей в конструкторе

Бизнес-правила отключил. 

Конфигурацию перекомпилировал полностью. 

Скрины вложением

Помогите понять в чём проблема ? 

 

Нравится

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

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

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

Предлагаете его переопределить?

Когда Вы меняете в мастере, оно и так переопределяется, в пакете Custom создаётся CasePageV2 с новым порядком полей. Но, видимо, в одном из пакетов выше по иерархии описано иначе и конфликтует.

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

Добрый день! 

Есть вопрос по реализации пользовательских кнопок со своими методами, на странице
редактирования для мобильного приложения .

Можете пожалуйста описать подробную реализацию на примерах
В документации нет примеров реализации

Нашел старый топик, но по нему не получается вывести свои кнопки
 

Нравится

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

См. примеры в статье и обсуждениях тут, тут и тут.

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

Добрый день! Наследуюсь от объекта Activity, далее наследуюсь уже от своей Активности .

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

Вопрос: есть ли возможность избежать такой последовательной публикации объектов?

Нравится

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

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

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

Сидоров Александр В.,

Спасибо!

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

Добрый день!

В бизнес-процессе у меня имеется параметр типа Справочник MyEmail со значением по умолчанию и задание-сценарий. Могу ли я методом Get не выполняя esq-запроса передать в задание-сценарий в виде строки это значение по умолчанию? При прямом обращении передает только Guid справочника. Спасибо!

Нравится

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

Михаил, Вы можете добавить элемент чтение данных и вычитать значение Name из справочника по Id и присвоить его в параметр БП в элементе формула. Потом использовать c Get.

Или же в другой параметр процесса внести значение поля Name по умолчанию и работать с ним через Get.

Нет, так как в исходном коде параметры с типом "Справочник" и "Уникальный идентификатор" имеют тип Guid. 

Михаил, Вы можете добавить элемент чтение данных и вычитать значение Name из справочника по Id и присвоить его в параметр БП в элементе формула. Потом использовать c Get.

Или же в другой параметр процесса внести значение поля Name по умолчанию и работать с ним через Get.

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