Вопрос:

Создал процесс для перемещения сотрудников (объектов обслуживания) из одного сервисного договора в другой по содержанию строки «адрес».

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

Ответ:

Такой БП не предусматривает один момент, а именно: когда БП добавляет "Объект обслуживания", то не заполняет "Тип".

Как это увидеть?

1. Зайдите в Справочники

2. Нажмите "ДОБАВИТЬ СПРАВОЧНИК"

3. В "Объект" выберете "Объект обслуживания" в "Название" тоже пропишите "Объект обслуживания" и сохраните.

4.Появился справочник "Объект обслуживания", откройте его.

5. Через ВИД - Настроить колонки отобразите колонки : Контакт, Сервисный договор, Тип

6. Посмотрите, что у тех, контактов, которых сюда добавили бизнес процессом не заполнено поле "Тип".

Это и есть причина, по которой при создании обращения не подтягивается "Сервисный договор". Необходимо заполнить по всем "Тип" = "Контакт".

Можно просто выгрузить объекты обслуживания в Excel, заполнить и загрузить назад. Так будут исправлены те контакты. которые уже ранее добавили при помощи БП.

Нравится

Поделиться

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

Добрый день.

Процесс -> Задание сценарий содержит некий код:

if (UserConnection.GetIsFeatureEnabled("EmailMessageMultiLanguage"))

{

    некий код...

}

else

{

    некий код...

}

При запуске данного процесса всегда отрабатывает ветка "else".

Не могу понять что за параметр "EmailMessageMultiLanguage". В системных настройках по коду ничего найти не удалось... 

В профиле пользователя так же ничего похожего не обнаружил.

Нравится

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

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

Конкретно по EmailMessageMultiLanguage на странице включения параметров нет никаких пояснений. Но, очевидно, если его включить, то тут и в других местах выполнение пойдёт по верхней ветке.

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

Спасибо, действительно пройдя по адресу [Адрес приложения]/0/Nui/ViewModule.aspx#BaseSchemaModuleV2/FeaturesPage

попал на некую страницу добавления функциональности и возможностью вкл/выкл этой функциональности. К большому удивлению запись с кодом "EmailMessageMultiLanguage" я не обнаружил. Теперь понятно, почему отрабатывает ветка else.

У меня на тестовом сайте 7.12 Sales Enterprise она есть, выключена. Возможно, зависит от версии.

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

Вопрос:

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

Подскажите как, корректнее реализовать этот кейс в бизнес процессе?

Ответ:

Для этих целей можно воспользоваться стандартными элементами чтения данных.

Необходимая информация хранится в следующих объектах - "Вхождение пользователя в роли" с колонками Пользователь и Роль, 

"Объект администрирования" (в т.ч. пользователи и роли) с колонкой Контакт.

1. Читать данные из "Объект администрирования" необходимой Функциональной роли (по названию или id) 

2. Читать данные "Вхождения пользователя в роли", где Роль = Пункт1. Id

3. Читать данные "Объект администрирования", где id = Пункт2. Пользователь

4. Использовать полученное значение Пункт3.Контакт согласно бизнес-целям.

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

Нравится

Поделиться

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

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

Например, не сохранились данные в элементе "добавить данные", допустим, это не критично, можно ли продолжить процесс?

Нравится

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

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



В момент возникновения ошибки экземпляр процесса фиксирует текущее состояние.



Если устранить источник проблемы и повторно выполнить элемент с ошибкой в журнале процессов - БП продолжит выполнение.



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



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

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

Добрый день!

Есть БП с текстовым параметром (TextResult), целочисленным параметром (IntResult), идентификатор (AccountId). В БП я задаю им определенные значения, явно отличные от пустой строки, нуля и пустого Guid. После выполнения БП я хочу получить результирующее значение любого параметра.

Пробовал как указано на академии Get запрос делать прямо в строке браузера http://localhost:8082/0/ServiceModel/ProcessEngineService.svc/TestProce…

ответ: http://schemas.microsoft.com/2003/10/Serialization/">null     ---- null, вместо текста который должен был быть результатом.

на запрос http://localhost:8082/0/ServiceModel/ProcessEngineService.svc/TestProce…получаю ответ http://schemas.microsoft.com/2003/10/Serialization/">0   ---- опять ноль, хотя указывал разные целые числа

ну и для Guid ответ http://schemas.microsoft.com/2003/10/Serialization/">"00000000-0000-0000-0000-000000000000"  --- снова ноль.

НО входящие значения параметров БП применяются и всё отлично.

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

Может "Параметр процесса, который хранит результат выполнения процесса" (взято из академии) как-то нужно пометить в БП?

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

 

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

 

Нравится

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

Добрый день, 

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

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

Tsopa,

Все верно спасибо.

Tsopa,

а что делать если процесс не компилируется (7.15.3) и в процессе не используется элемент задание-сценарий?

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

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

Вопрос:

Пользователю в нескольких местах БП предлагается выбрать контакт.

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

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

Ответ:

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

Рис. 1 Добавление параметра в процесс

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

Рис. 2. Использование параметра процесса в формуле

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



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

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

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

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

Рис. 3 – Созданный параметр для работы в основном процессе

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

Рис. 4 – Пример считывания параметра из подпроцесса в основной процесс

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



Рис. 5 - Пример использования полученного в основном бизнес процессе

 

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

Нравится

Поделиться

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

Не могу установить параметр БП типа EntityCollection с именем ActualPOAs. Делаю в коде:

var esq = new EntitySchemaQuery(context.UserConnection.EntitySchemaManager, "UsrPowerOfAttorney");
esq.AddAllSchemaColumns();
EntityCollection ActualPOAs = esq.GetEntityCollection(context.UserConnection);
// Упадет в следующей строке
Set<EntityCollection>("ActualPOAs", ActualPOAs);

После чего получаю исключение (ниже). Что я делаю не так?

Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: The best overloaded method match for 'Terrasoft.Core.Process.IProcessParameterStore.SetParameterValue(System.Guid, string, string)' has some invalid arguments at CallSite.Target(Closure , CallSite , IProcessParameterStore , Guid , String , Object ) at System.Dynamic.UpdateDelegates.UpdateAndExecuteVoid4[T0,T1,T2,T3](CallSite site, T0 arg0, T1 arg1, T2 arg2, T3 arg3) at Terrasoft.Core.Process.ProcessParameterInfoComposer.UpdateParameterInfoValue[T](Guid processUId, ProcessParameterInfo parameterInfo, String parameterPath, T value) at Terrasoft.Core.Process.ProcessModel.SetParameterValue[T](FoundParameterData result, T value) at Terrasoft.Core.Process.ProcessModel.TrySetValue[T](ProcessSchema processSchema, String propertyPath, T value) at Terrasoft.Core.Process.ProcessModel.Set[T](String propertyPath, T value) at Terrasoft.Core.Process.PowerOfAttorneyPackCheckMethodsWrapper.ScriptCheckPOAExecute(ProcessExecutingContext context) at Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)

Нравится

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

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

Необходимо параметру ActualPOAs просто присвоить полученную коллекцию:

ActualPOAs = esq.GetEntityCollection(context.UserConnection);

На элементе задание-сценарий перейти в расширенный решим и снять галочку "Для интерпретируемого процесса".

В настройках процесса установить галочку "Компилировать".

Demchenko Olha,

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

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

В функционале БП во-первых, не предусмотрено присваивание коллекций методом Set в интерпретируемых процессах, во-вторых, таймеру все равно компилируемый процесс или интерпретируемый.

Золотарев Артем Андреевич,

https://community.terrasoft.ru/questions/startovyi-taimera-v-bp - отсюда, ответ Логвин Андрей Витальевич: "Запуск компилируемых процессов по стартовому таймеру реализован в версии 7.11.3 и выше."

Правильно я понимаю,что 

ActualPOAs = esq.GetEntityCollection(context.UserConnection); будет работать в интерпретируемом процессе?

 

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

Попробуйте сделать, как написала Demchenko Olha и протестируйте работу БП.

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

А вот для 7.11.3 точно нормально работает и для компилируемого БП.

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

ActualPOAs = esq.GetEntityCollection(context.UserConnection); - работает только для компилируемого задания-сценария

Золотарев Артем Андреевич,

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

https://academy.terrasoft.ru/documents/technic-bpms/7-12/element-proces…, добавьте, что не методы Get и Set не работают для коллекций объектов. Иначе до этого догадаться, мягко говоря, непросто и отсюда начинаются бодания с ТП, которая просит денег (более дорогой пакет поддержки) за объяснение где ваша документация не соответствует реальности. А это уже просто не лезет ни в какие ворота!

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

Есть 2 процесса, которые запускаются по сигналу изменения некоторого поля в 2х разных сущностях, например, Account и Contact.

В одном процессе при изменении поля A в таблице Account вызывается изменение поля Б в Contact, а в другом при изменении поля Б таблицы Contact вызывается изменение поля A в Account.

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

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

Меня интересует, какие ещё есть 'более правильные' с точки зрения производительности варианты решения такой задачи?

 

Нравится

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

Добрый день!



А можете уточнить в какой лог не попадают данные, а так же показать Ваш ScriptTask?

Евгений Манько,

Не попадают в Change log в Администрировании

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

var update = new Update(UserConnection, "Contact")

            .Set("TypeId", Column.Parameter(ContactType))

            .Where("Account").IsEqual(Column.Const(AccountType)).Execute();

А в другом наоборот.

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



Добрый день! 

Данный скриптаск тяжелый так как он меняет все записи. Как обходное решение, в разделы можно добавить поля куда будет записываться временный признак (достаточно будет текстового поля которое доступного «только для чтения» которое будет меняться процессом). А в рамках процесса реализовать примерно такую схему – скриншот. Если добавить в стартовый сигнал условие что запрещающий временный признак не установлен, то процессы не будут запускать друг друга.

Евгений,

спасибо за совет, как вариант, может быть.

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

В любом случае, от существующего варианта нужно отказываться))))

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



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

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

Вопрос:

Реализован БП:

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

2 сигнала: 1. Создание записи, 2 изменение записи. От каждого по формуле. В формуле следующее: установить в параметр БП OrderId значение соответствующего сигнала. Затем считать данные объекта Заказ, где id=параметр OrderId. Затем изменить запись объекта Заказ где id=константа (проставить поле комментарий = OrderId). В результате в поле комментарий записывается значение 000000000000000000000000. Вывод: формула не передает значение с сигнала в параметр. Почему такое происходит?

Ответ:

Ошибка при передаче ID записи возникает из-а самой логики, настроенной в процессе.

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

И в дальнейшем будем передавать именно его.



При добавлении записи, поля "Комментарий" подтягиваются корректно, а заполняется в формате "00000..." из-за того, что согласно реализованной логике, передается id из другого сигнала, который не был задействован.

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

 

Нравится

Поделиться

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

Коллеги, здравствуйте! 

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

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

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

Спасибо!

Нравится

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

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

Добрый день!



Скорее всего это связано с тем что у команды нету прав на чтение связанных записей. Команда без выдачи прав на работу с контрагентом может видеть эти записи? 

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

Роман Никулин,

Добрый день!



Вы проверяли права команды на эти записи? Если у них не будет прав на эти записи, то команда не увидит записи несмотря на права на контрагента. Для раздачи прав на старые связанные записи можно создать бизнес с элементом «изменить права доступа». А фильтрации можно указать например поле контрагент заполнено.

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

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