Вопрос:

Виникла проблема при запуску БП при просроченні звернення. Базовий БП "Установка показателей просроченности обращений" встановлює логічні поля Просроченый по реакции і Просроченный по решению через базу тому ці поля важко використати для стартового сигналу запуску БП. Можливо є якісь інші методи щоб запустити БП при просроченні?

Ответ:

Для решения данной бизнес цели можно использовать стартовый сигнал вида:

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

Нравится

Поделиться

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

Вопрос:

Можно ли в подпроцессе завершить работу главного процесса (процесса где используется этот подпроцесс)? и каким образом?

Вот что нам нужно:

1. Есть главный процесс "Приготовление чая". 

1.1 Для этого мы создаем карточку проекта (Состояние: "в работе") и создаем ряд задач.

2. Есть подпроцесс "Проверка наличия кружки", который стартует после задачи "Вода в чайнике вскипела" главного процесса.

2.1 Подпроцесс "Проверка наличия кружки" может завершиться или нахождением кружки или констатацией факта, что кружка отсутствует. 

2.2 Если кружка отсутствует - необходимо в главном процессе "Приготовление чая" изменить значение поля "Состояние" карточки Проекта на "Отменен"

3. После изменения поле "Состояние" карточки Проекта на "Отменен"  (чтение сигнала, например) завершить работу главного процесса. 

Могли бы Вы уточнить как можно решить нашу задачу? 

Ответ:

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

Подход к реализации описанной задачи следующий:



Создаем подпроцесс (условно, CupSearch) с параметром прцоесса логичское, к примеру, CupFound.

В данном подпроцессе заполняем значение параметра CupFound с помощью элемента Формула.

Завершаем процесс элементом Останов.



Создаем родительский процесс, в нем добавляем элемент Подпроцесс (название элемента, например, CupSearch1), указываем процесс = CupSearch.

Условный поток из элемента подпроцесс : [CupSearch1.CupFound] == true , продолжение выполнения процесса

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

Рис. 1 Основной процесс "Приготовление чая"

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

 

Рис. 2 Подпроцесс "Поиск чашки"

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

Нравится

Поделиться

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

Добрый день!



Вроде, хотелось сделать совершенно стандартную вещь, но не пошло по стандарту:



необходимо в объекте Contact отлавливать изменение поля MobilePhone на сигнал ContactSaving.



Для этого по сигналу написали скрипт:



    var newMobilePhone = Entity.GetTypedColumnValue("MobilePhone");

    var oldMobilePhone = Entity.GetTypedOldColumnValue("MobilePhone");


    throw new Exception(newMobilePhone + " " + oldMobilePhone);

    return true;



Однако обе переменных newMobilePhone и oldMobilePhone  всегда принимают старое одинаковое значение.



Как получить актуальное новое значение этого поля?

Нравится

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

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

Все работает верно, поскольку Вы используете сигнал ContactSaving, то старое и новое значение это одно и тоже значение, поскольку транзакция еще не прошла. 

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

 

В пакете Base вижу такой код на событие ContactSaving:



IsCurrentUserPhoroChanged = (Entity.GetTypedColumnValue<Guid>("PhotoId") !=

    Entity.GetTypedOldColumnValue<Guid>("PhotoId") && Entity.GetTypedColumnValue<Guid>("Id") ==

UserConnection.CurrentUser.ContactId);



И во многих других местах на Saving происходит проверка изменения поля как раз таким способом

Владимир Соколов,

Действительно, если взять и выполнить аналогичный пример для поля Name, то в результате получим сообщение с разными именами:

var newName = Entity.GetTypedColumnValue&lt;string&gt;("Name");
var oldName = Entity.GetTypedOldColumnValue&lt;string&gt;("Name");throw new Exception(newName + " " + oldName );

Решила посмотреть что происходит на самом деле, изменила поле Name и поле MobilePhone и отловила запросы профайлером и получила следующее

изначально происходит изменения имени, 

после изменяется телефон в таблице ContactCommunication, 

и только потом изменяться телефон в контакте. 

И потому, на этапе Saving значения старое и  новое одинаковые, поскольку изменения телефона происходит в рамках процесcа ContactSaved (пакет Base).

с ContactSaved получается еще интереснее...

Во-первых, когда сообщение выдается, то оба номера (старый и новый) идентичны

А во-вторых, теперь это сообщение выдается далеко не на каждое сохранение, то есть, ощущение, что ContactSaved срабатывает не всегда

Владимир Соколов,

Вы можете перейти в конфигурации в к процессу на объекте Contact пакета Base, и ознакомиться с логикой ContactSaved. 

Поле MobilePhone изменяется не в рамках сохранения контакта, а в рамках метода SynchronizeCommunication(), который вызывается после сохранения контакта.

Ещё довольно странное поведение из-за такой синхронизации. В бизнес-процессе совсем не отлавливается событие изменения поля MobilePhone. 

С другой стороны, количество Communication options с таким типом может быть больше 1, потому непонятно, какое из них синхронизировано с главным полем в карточке, и изменение какого из них отслеживать

 

 

Добрый день, 

Стартовый сигнал действительно не реагирует на изменение в контакте/контрагенте полей Email/Мобильный телефон. Это связано с базовой логикой синхронизации этих полей с деталью средства связи контакта/контрагента. Вы можете ознакомиться с логикой в конфигурации, если открыть процесс элемента Contact и ContactCommunication.

Для решения задачи можно создать дополнительный процесс, который будет срабатывать при добавлении/изменении записи непосредственно в объекте [Средство связи контакта/контрагента].

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

Всем привет.

7.11(onsite)

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

Но доступ к части лидов на просмотр остается, при этом если зайти в настройку "Установка прав доступа", конкретного лида, то в свойствах стоит запрет на просмотр для учетки. 

Подскажите в чем проблемма?

 

Бизнес процессИзображение удалено.

Учетка - marketing

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

Нравится

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

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

Роман, добрый день!

В случае использования запрещающих прав необходимо проверить, что для объекта Лид проставлен признак Использовать запрещающие права, как показано на скриншоте.

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

Также, убедитесь, что учетка marketing не входит в роль Системные администраторы, т.к. у администраторов есть права на все записи.

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

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

Как удалить/завершить их скопом?

Нравится

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

Скопом - никак. Пока я ковырялся, вроде видел, что можно array guid-ов на закрытие процессов послать, но это не точно.

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

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

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

Логвин Андрей Витальевич,

А как отменить все процессы? Я знаю способ только по одному :)

Алексей-Карягин,

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

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

Вопрос:

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

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

Ввиду этого возник вопрос: как мне прочитать не первую, а вторую третью и т.д. записи соответствующие условию?

Возможны другие варианты решения задачи?

Ответ:

Для реализации с помощью цикла необходимо добавить в объекте дополнительное логическое поле (условно, Для цикла), и использовать его в рамках цикла (для уже добавленных данных проставлять значение = 1; а читать первый результат выборки, где Для цикла = 0).

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

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

Нравится

Поделиться

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

В моем БП возможна ситуация, когда в зависимости от условий ставятся задачи (Активности) от 0 до 3 разным людям. То есть, может быть так, что можно просто идти дальше, а может быть поставлено до 3 параллельных задач разным людям.

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

Как это лучше реализовать?

И можно ли ждать изменения Активности, которая не была создана?

Нравится

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

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

Если я правильно понял Вашу задачу, достаточно реализовать логику, как показано на скриншоте.

http://prntscr.com/ilxavr

По поводу ждать изменения Активности, которой еще не существует - к сожалению, такой возможности в рамках процесса нет, так как Вам нужно явно указать id записи, а узнать его заранее не представляется возможным.

Логвин Андрей Витальевич,

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

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

Добрый день!

наблюдаем такую странную картину поведения процесса.

а именно: Задача "Изменить данные заявки" выполняется на 1 раз больше чем две предыдущие задачи "Версия+1" и "Читать данные 2"

(нижний ряд задач)

 

может у кого-то была такая проблема? не могу понять как такое происходит

первый пример

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

 

второй пример

 

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

Нравится

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

Любовь, здравствуйте!

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

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

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

Контактная почта - support@terrasoft.ru

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

Запуск по урл бизнес-процессов из внешнего истчника не получает ответ от СРМ об успешном или неуспешном запуске БП. Просто пустая страница приходит в ответ. Из-за этого теряются данные, так как внешний источник отправил и думает, что СРМ получила данные, но иногда бывает, что процесс просто не запускался.



Вот урл  куда подставляю данные

$url = "https://Myssssite.bpmonline.com/0/ServiceModel/ProcessEngineService.svc/CloseActivityAssignCoaching/Execute?Name=".str_replace(' ', '+', trim($name))."&Phone=".trim($phone)."&Email=".trim($email)."&Skype=".trim($skype)."&Coaching=".$coaching."&ActivityId=".$coachingId."";



Можно ли както заставить СРМ отдавать результат запроса, чтобы понимать что БП запущен или нет после такого запроса?

Нравится

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

Николай, здравствуйте!

Результат можно посмотреть в response запроса.

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

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

Добрый день.

Подскажите пожалуйста в процессе есть автогенирируема страница на ней кнопка 

"Далее" при нажатии которой процесс идет дальше. Если нажать на "Закрыть" , то процесс закрывается, но висит в системе как "Выполняющийся". Как сделать так что бы по кнопке закрыть процесс "Завершался".  Стрелка в завершние есть.

Добавлять новую кнопку отмена и вести данную стрелку в завершение не вариант.

Нравится

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

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

Реализация самой страницы подразумевает такое поведение при закрытии страницы, и пользовательскими средствами данную логику не удастся изменить.

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

Или же можно создать свой собственный элемент процесса, взяв за пример базовый, и не выводить на нем кнопку Назад \ изменить в нем метод onCloseCardButtonClick.

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

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