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

Нравится

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

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

Судя по описанию необходимо работать одновременно с коллекцией данных, а не первой выбранной записью.
Пока с коллекцией может работать только элемент "Добавить данные" в режиме выборки.
Для решения вашей задачи можно использовать [Задание-сценарий], написать в нем интересующий запрос.
Или создать циклический процесс, который будет обрабатывать 1 контакт за 1 итерацию в цикле.

Спасибо, с помощью сценария сделали, чтобы процесс повторялся столько раз, сколько контактов в детали

int count = Get<int>("count");
int count2 = count - 1;
Set<int>("count", count2);
return true;

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

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

Алгоритм следующий:
А. Добавить в объект Контакты служебное поле с типом Логическое, например ForCycle.
Б. Первый процесс запускается по нужному событию и устанавливает для всех контактов ForCycle = true.
В. Второй процесс циклический:
1) читать кол-во контактов, у которых ForCycle = true
2) поток по умолчанию ведет к завершению процесса
3) условный поток: [Читать кол-во записей] > 0 - ведет к элементу Читать первый контакт, где ForCycle = true. На этом этапе мы получим Id первого интересующего контакта - > обрабатываем контакт - > устанавливаем ForCycle = false -> в конце поток перехода ведет к Пункт 1

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

Спасибо, получилось.

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

Добрый день, подскажите пожалуйста как передать параметры в преднастроенную страницу в бизнеспроцессе, и как их потом прочитать дальше в БП?

Нравится

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

Коллеги, добрый вечер!

Мы реализовали действие в разделе Юр. лиц, которое инициирует загрузку данных из сервиса СПАРК и записывает их в базу с помощью хранимой процедуры. Возникла проблема, связанная с тем, что по загруженным Юр. лицам не запускаются процессы (стартовые события процессов - сигнал добавление/изменение).

Кто-нибудь с таким сталкивался?

Нравится

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

Небольшое дополнение - в действии используется метод showBodyMask (this.showBodyMask();) для отображения анимации загрузки. Если это важно.

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

Стартовые сигналы не реагируют на прямые запросы к БД (добавление/изменение/удаление записей).
Сигналы срабатывают если запрос выполняется через EntitySchemaQuery - https://academy.terrasoft.ua/documents/technic-sdk/7-9/rabota-s-dannymi
Вы можете решить вашу задачи с помощью триггеров в БД или создать процесс, который будет периодически запускаться с помощью планировщика и обрабатывать интересующие записи.

Поясните, пожалуйста, ваш ответ. EntitySchemaQuery используется для чтения данных.

У нас также реализована загрузка данных через конфигурационный сервис с помощью механизма - https://academy.terrasoft.ua/documents/technic-sdk/7-9/postroenie-zapro….

При добавлении данных через этот конфигурационный сервис процессы тоже не запускаются.

В конфигурационном сервисе тоже нужна дополнительная логика?

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

Классы Insert, Update, Delete не вызывают срабатывания сигналов, поскольку запись не ведется на уровне ESQ.

Таким образом процессы запущены не будут.

Пример работы с ESQ можно найти в схеме ImapClient метод SaveActivityParticipants. При таком создании записей процессы будут запущены.

Коллеги, а триггеры в БД имеется в виду на добавление/изменение?

Если у нас будет обновление поля через ESQ и одновременно будет создан триггер на изменение этого поля в БД, не будет ли двойного срабатывания стартового события одного и того же процесса?

И какая логика должна выполняться после срабатывания триггера в БД?

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

"Сергей Фролов КРОК" написал:

Коллеги, а триггеры в БД имеется в виду на добавление/изменение?

Если у нас будет обновление поля через ESQ и одновременно будет создан триггер на изменение этого поля в БД, не будет ли двойного срабатывания стартового события одного и того же процесса?

Как было сказано ранее - если операции происходит на уровне сервера БД (процедуры, триггеры, прямые запросы в БД), то процессы срабатывать не будут. По этой причине процесс сработает только по запросу ESQ - триггеры не запустят второй экземпляр процесса.

Спасибо за информацию!

Подскажите, а как должен выглядеть триггер в БД, инициирующий запуск процессов?

"Сергей Фролов КРОК" написал:Подскажите, а как должен выглядеть триггер в БД, инициирующий запуск процессов?

Я надеюсь вопрос не про кварц тригеры? Механизм который позволяет запускать процессы по расписанию.
https://academy.terrasoft.ru/documents/technic-sdk/7-4-0/zapusk-process…

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

var entitySchemaManager = _userConnection.GetSchemaManager("EntitySchemaManager") as EntitySchemaManager;
var activityParticipantSchema = entitySchemaManager.GetInstanceByName("ActivityParticipant");
var activityParticipant = activityParticipantSchema.CreateEntity(_userConnection) as ActivityParticipant;
activityParticipant.SetDefColumnValues();
activityParticipant.ActivityId = _currentEmailActivityId;
activityParticipant.ParticipantId = contactId;
activityParticipant.RoleId = roleId;
activityParticipant.Save();

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

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

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

System.Exception: Ошибка выполнения БП: BulkSmsId:95839e74-7d60-4220-8993-7a3995e0674b; Msg: Object reference not set to an instance of an object. BulkSmsId:5435b20b-55a9-4b5d-9844-20ee5e4b0459; Msg: Object reference not set to an instance of an object. at Terrasoft.Core.Process.NrbActualizeDailyBulkSms2MethodsWrapper.ScriptTask1Execute(ProcessExecutingContext context) at Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)

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

UPD: ввел в заблуждение, так как id не имеют значения. Необходимо понять почему система не может найти объект при запуске из QUARTZ, а при запуске от пользователя - находит.

Нравится

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

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

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

Пропишите по возможности логирование в выполнение элемента ScriptTask1Execute.

"Терещук Павел" написал:

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

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

Пропишите по возможности логирование в выполнение элемента ScriptTask1Execute.


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

"Сережкин Дмитрий Сергеевич" написал:А как такое возможно, что при запуске от пользователя параметры все заполнены, а при запуске из планировщика, какой-то теряется?

Может быть UserConnection?

Вполне может быть.

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

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

Создал колонку на детали Связи Активности, на пейдже она отображается и работает, а вот в редакторе БП её нету.
Существует ли какой-то способ добавить её туда?

Нравится

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

Добрый день!

Деталь Связи Активности формируется динамически, в нее добавляются все справочные поля данного объекта. В редактор БП автоматически подтягивает все lookup'ы которые есть в системе. Рекомендую перепроверить что Ваша колонка присутствует в объекте и ее можно найти в разделе Справочники.

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

Возможно я неправильно выразился, когда сказал, что колонки нету в редакторе БП: я имел ввиду элемент "Выполнить задачу", мне колонка нужна там, а если использовать "Добавить данные" (Активность), то там колонка есть, но это не то, что мне нужно. Справочник и колонка в объекте существуют, очистка кеша и редиса не помогли.

Здравствуйте,
Колонка к сожалению, там автоматически не появится, т.к. элемент «Выполнить задачу» это схема (ActivityUserTask), которая создает служебную задачу (аквтивность), и оперирует параметрами что описаны в этой схеме. Рекомендую вам за элементом «Выполнить задачу» использовать элемент «Изменить данные» и по id созданной задачи, изменять эту активность. Там (в элементе Изменить данные) ваша колонка будет.

Добрый день. Может кому актуально будет, но я нашел ответ на этот вопрос.

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

Решение напрашивается само собой: нужно в БП/Кейсе удалить старый элемент выполнить задачу, создать новый элемент, и настроить как только что удалённый. Связь появится.

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

Степин Константин Владимирович,

Константин идея хорошая, но есть одно большое НО. Если в БП есть зависимые элементы БП. То править нужно будет и их. и если представить что ветвление очень огромное, то это займет очень много времени.

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

Вопрос:

Как создать процесс, который контролирует неоплаченные счета. Например, каждую неделю система автоматически создает всем ответственным за счет (Состояние счета = Ожидание оплаты), активность - "Проконтролировать оплату счета".

Версия 7.11.

Ответ:

Алгоритм реалзиации:

1. Стартовый таймер, режим = неделя, указать время и день недели

2. Добавить данные, объект = Активность, режим = добавить результат выборки, Объект для выборки = Счет, фильтр Состояние оплаты = Ожидает оплаты, Ответственный = Результат выборки.Ответственный, Счет = Результат выборки.id, Заголовок = Проконтролировтаь оплату счета.

Изображение удалено.

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



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

Нравится

Поделиться

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

Здравствуйте, подскажите, пожалуйста, как можно реализовать в бизнес-процессе удаление записи сразу со всеми связанными записями?

Нравится

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

Добрый день!

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

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

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

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

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

С уважением,
Дмитрий

Нравится

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

Добрый день!

Элемент [Автогенерируемая страница] недоступен для редактирования, т.е. настроить бизнес-правила не получится.
Для решения задачи используйте [Преднастроенная страница]. Тут вы можете настроить все необходимые правила/фильтры.

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

Здравствуйте, каким элементом в бизнес процессах можно обрабатывать входящие email сообщения? Необходимо, вытягивать email отправителя и если такой контакт есть в базе, то чтобы он автоматически подставлялся в это входящее сообщение в поле “привязать контакт”.

Нравится

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

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

Алгорит решения:
1. Стартовый сигнал по добавлению записи в объект Активности, где Тип = Email, Тип сообщения = Входящее.
2. Читать данные в активностях, где Id = Пункт 1. Id
3. Читать кол-во записей в контактах, где Email = Пункт 2. От кого
Условный поток: Если кол-во записей > 0 - изменить активносить
Поток по умолчанию: завершить процесс

Спасибо :smile:
А можно ли как-то сделать с помощью БП, чтобы в карточку контакта во вкладку “История” привязывалось полученное входящее сообщение? В блоке “Изменить данные” нет полей из вкладки “История” для установки id активности, а в "История раздела Контакты (представление)" есть только поле контакт :sad:

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

Для того, чтобы привязать активность (с типом Email) к контакту необходимо в активности заполнить поле Контакт.
В рамках процесса следует использовать элемент "Изменить данные". В активности заполнить поле Контакт интересующим значением.

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

!
с чем это может быть связано?

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

На детали "Активности" отображаются записи из раздела "Активности", у которых тип = Email. Активности с типом Email отображаются на детали "Email".

Базовая логика приложения скрывает деталь в двух случаях:

  1. У контакта тип "Сотрудник"
  2. У контрагента контакта тип "Наша компания"

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

Согласно скриншоту деталь не отображается. Именно по этой причине созданная активность не отображается.

.

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

Добрый день!

Столкнулся с такой проблемой: После смены состояния заказа пользователю задается вопрос о создании активности. После утвердительного ответа пользователь автоматически переходит на созданную страницу редактирования активности. Как составить бизнес-процесс так, чтобы значения параметров Контрагент и Контакт заказа автоматически переносились в страницу редактирования активности?

Буду очень признателен Вашей помощи.

Нравится

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

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

Если через DCM, то нужно создать подпроцесс.

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

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

[quote="Демьяник Алексей"]
Благодарю за ответ.

"Демьяник Алексей" написал:

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

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

У меня похожий вопрос. Из карточки контакта перехожу в пользовательскую активность и не получается унаследовать ФИО и пр. из карточки контакта.

Процесс запускаю по сигнальному элементу, в котором отслеживаю добавление записи с конкретными типом активности. Далее, по ID читаю Активность и читаю Контакт. Затем записываю ФИО из Контакта в нужное поле активности. И,... ничего не записывается. Прошу подсказать, что нужно изменить?
Заранее благодарен!

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

Алгоритм решения:
А. Создать процесс, условно CreateActivity:
1. Добавить в процесс параметр с типом Уникальный идентификатор – условно ParamContactId.
2. Добавить данные в объект Активность. Заполнить интересующие поля, указать [Тип = Выставка], [Контакт – ФИО = ParamContactId].
3. Элемент [Открыть страницу редактирования], открыть страницу существующей активности, где Id = Пункт 2.Id созданной записи.

Б. Заместить страницу редактирования контакта:
1. Добавить пользовательское действие.
2. Добавить обработчик. Обработчик будет:
- запускать процесс CreateActivity
- в параметр процесса ParamContactId – передавать Id текущего контакта

Пример создания пользовательской кнопки/действия и обработчика (запуск процесса) есть на академии и community:
https://academy.terrasoft.ua/documents/technic-sdk/7-9/zapusk-processa-…
http://www.community.terrasoft.ru/forum/topic/10554
http://www.community.terrasoft.ru/forum/topic/14042

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