Добрый день.

У меня такой вопрос. Можно ли вызвать бизнес-процесс из скрипта c#?

Нравится

3 комментария
UserConnection userConnection = HttpContext.Current.Session[@"UserConnection"] as UserConnection;
ProcessSchemaManager processSchemaManager = (ProcessSchemaManager)userConnection.GetSchemaManager(@"ProcessSchemaManager");
ProcessSchema processSchema = processSchemaManager.GetInstanceByName(@"GetManager"); //вместо GetManager вставить название БП
Process process = processSchema.CreateProcess(userConnection);
 
if (processSchema.Parameters.ExistsByName(@"ContactNum"))
{
	process.SetPropertyValue(@"ContactNum", var1);
}
process.SetPropertyValue(@"ManagerNum", var2);//можно не проверять на существование параметра
...набиваем параметрами процесс...
process.Execute(userConnection);

"Варфоломеев Данила Викторович" написал:

UserConnection userConnection = HttpContext.Current.Session[@"UserConnection"] as UserConnection;

ProcessSchemaManager processSchemaManager = (ProcessSchemaManager)userConnection.GetSchemaManager(@"ProcessSchemaManager");

ProcessSchema processSchema = processSchemaManager.GetInstanceByName(@"GetManager"); //вместо GetManager вставить название БП

Process process = processSchema.CreateProcess(userConnection);



if (processSchema.Parameters.ExistsByName(@"ContactNum"))

{

        process.SetPropertyValue(@"ContactNum", var1);

}

process.SetPropertyValue(@"ManagerNum", var2);//можно не проверять на существование параметра

...набиваем параметрами процесс...

process.Execute(userConnection);

Спасибо.
Но почему-то это не хочет работать в скрипте бизнес-процесса. Выкидывает ошибку: Невозможно получить экземпляр схемы типа "Terrasoft.Core.Process.UsrProcess2Schema".

Разобрался сам, надо было просто скомпилировать 2-й бизнес-процесс.

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

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

Нравится

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

Добавление данных, которое сформирует активности для пользователей с ролью "Системные администраторы":

Еще нужно записывать повторный запуск процесса в Quartz (через определенное время). Эта тема обсуждалась здесь:
http://www.community.terrasoft.ru/forum/topic/13945

При такой настройке задача действительно поступает группе.
Однако, если это одна задача для роли, то есть для одного из членов группы, то необходимо, чтобы при изменении состояния задачи на "в работе" одним, этот статус должен быть виден и другим.
Фактически предложенное решение - это тиражирование задачи на группу, когда все выполняют одинаковую задачу, а вопрос заключается в постановке ОДНОЙ задачи для РОЛИ, т.е. одной задачи для одного из членов группы, так и не решена.

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

В таком случае реализация будет несколько отличаться - вначале будет генерироваться активность, а потом результат выборки будет добавляться в объект "Участники активности".

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

Добрый день!
Подскажите, пожалуйста, как назначить на кнопку "Квалифицировать" в разделе Лиды собственный бизнес-процесс?

Нравится

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

Кирилл,
Кнопка "Квалифицировать" запускает процесс, который указан в системной настройке "Процесс управления лидом". Можете заменить значение настройки на пользовательский процесс.
Елси потребуется запускать БП из клиентского модуля - примеры можно найти на академии или community:
https://academy.terrasoft.ua/documents/technic-sdk/7-8/zapusk-processa-…

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

Уважаемые коллеги!

Прошу Вас помочь решить проблему сравнения дат в бизнес-процессе по наступлению события.
Пытаюсь описать в формуле БП условие ветвления при наступлении события - система выдает ошибку (см. вложенный файл)

Нравится

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

Юрий,

1. Ошибка связна с конструкцией условия. В потоке “Время напоминания наступило” следует указать [Param1] == [Param2] (добавить еще один знак “=”).
2. По поводу задачи. Сравнение параметров с типом Дата/Время выполняется с точностью до секунд. Поэтому шанс, что выполнится условие [Дата напоминания] == [Текущая дата/время] стремится к нулю.
Как вариант можно воспользоваться свойством .TotalMinutes - https://msdn.microsoft.com/en-us/library/system.timespan.totalminutes(v… :
- создать параметр процесса [Дата напоминания] – передать значение из чтения данных
- создать параметр процесса [Текущая дата] – указать значение DateTime.Now
- в условном потоке указать [Дата напоминания] .TotalMinutes == [Текущая дата]. TotalMinutes

Большое спасибо, Олег!

Однако, возникла другого типа ошибка:

[Ошибка при выполнении выражения "ProcessSchemaParameter7.TotalMinutes==ProcessSchemaParameter6.TotalMinutes": No property or field 'TotalMinutes' exists in type 'DateTime' (at index 24)..].

(см. также вложенный файл)

Поправочка! Свойство .TotalMinutes есть только у TimeSpan (у DateTime нет) и возвращает значение с типом дробное.
Т.е. необходимо проверить, что [разница 2 параметров].TotalMinutes = 0.
Результат будет выглядеть как на скриншоте.

"Зарицкий Олег" написал: По поводу задачи. Сравнение параметров с типом Дата/Время выполняется с точностью до секунд.

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

([Дата напоминания] < [Текущая дата/время] ) && ([Напоминание еще не сработало])

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

Большое спасибо, коллеги!

К сожалению такая конструкция напоминания неэффективная, процессс зацикливатеся и выполняется практически бесконечно.
Предлагается другая конструкция БП (см. вложенный файл):
1. Вычислить разность дат - между датой напоминания и текущей датой, получим количество секунд.
2. Вставляем в обработку таймера полученное время в секундах и через это время происходит отправка e-mail напоминание ответственному.

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

"Ифутин Юрий Борисович" написал: Вставляем в обработку таймера полученное время в секундах

в таком варианте всегда возникает вопрос - а что, если дату напоминания поменяют?

"Ифутин Юрий Борисович" написал:Уважаемые коллеги, помогите пжл. правильно написать в формуле БП разность дат - сколько ни пробовал, сколько ни тренировался, ничего не получилось.

1. Создать 2 параметра процесса с типом Дата/Время
2. Замапить значение параметров процесса на чтение данных.
3. В формуле указать ([Param1] - [Param]).TotalSeconds. Учитывать, что тип возвращаемого значения - Дробное.

в таком варианте всегда возникает вопрос - а что, если дату напоминания поменяют?

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

2. Замапить значение параметров процесса на чтение данных.

Коллеги, подскажите, что значит "замапить" - я этот слэнг пока не понимаю... Если можно, напишите конкретно как это сделать...

Создал параметры дата/время: "Текщуая Дата" и "Дата напоминания ответственному".
Создал параметр дробное число: "Время до напоминания".
В формуле БП написал следующее выражение:
([#Дата напоминания ответственному#]-[#Текущая дтата#]).TotalSeconds
поместил в параметр "Время до напоминания"
В формулу БП "Обработка таймера" написал: [#Время до напоминания#]
При сохранении процесса получил ошибку:
Невозможно преобразовать тип "Decimal" в "Int32" для элемента или параметра "IntermediateCatchTimer1.StartOffset"

И вот так уже второй день - ни фига не получается...

Процес заработал...
Для этого переделал параметр "Время до напоминания" как целое число.
В формуле БП для разности дат написал:
ОкруглитьВниз(([#Дата напоминания ответственному#]-[#Текущая дтата#]).TotalSeconds)

Процесс работает достаточно точно по времени...

Однако, как и предполагал Владимир Соколов, если поменять дату напоминания, предыдущий процесс надо как-то отменять, так как предыдущий процесс работает до первой даты напоминания и также напоминает по e-mail как и измененная дата ...

Как думаете коллеги, как это сделать?

"Ифутин Юрий Борисович" написал:Однако, как и предполагал Владимир Соколов, если поменять дату напоминания, предыдущий процесс надо как-то отменять, так как предыдущий процесс работает до первой даты напоминания и также напоминает по e-mail как и измененная дата ...

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

И стартует этот же процесс на добавление/изменение уведомления.

А если рассмотреть другой алгоритм:

1. Фиксируем "Текущую дату1" при запуске 1-го напоминания
2. Фиксируем "Текущую дату2" при запуске 2-го напоминания
3. Если "Текущая дата2">"Текущая дата1" и (Состояние не равно "Завершена" или Состояние не равно"Отменена"), то Процесс№1 отменить

"Ифутин Юрий Борисович" написал:

А если рассмотреть другой алгоритм

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

Алгоритмов реализации может быть много - главное, чтобы работало.

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

Всем добрый день!
Необходимо реализовать кастомном разделе автоматическую отправку Email письма, в определённую, конкретную дату и время, указанную в соответствующей созданной колонке типа дата/время.
Дата и время отправки указываются пользователем при создании записи в разделе.
Как можно реализовать данный кейс с помощью бизнес-процесса используя стандартный функционал bpm'online sales enterprise 7.8?

Нравится

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

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

Используйте бизнес процесс. Общая структура бизнес процесса:
1) Стартовый сигнал по событию добавления записи в созданный вами раздел
2) Используйте элемент "Чтение данных" для получения значений добавленной записи
3) Используйте элемент "Формула" для подстановки в параметр элемента "Таймер" разницы между текущем временем (System.DateTime.Now) и значением в поле с типом "Дата время", сконвертированных к секундам.
Общая структура будет выглядеть где-то так:
((System.DateTime.Now).Subtract([#Параметр даты#])).TotalSeconds()
4) Используйте "Таймер"
5) Используйте "Отправить email" для отправки
6) Конец процесса

Это общая структура. Где-то еще должно быть получение email адреса получателя, и как вариант, формирование тела и темы письма.

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

Здравствуйте!
В sales enterprice 7.8 необходимо в разделе Лиды при нажатии на кнопку "Квалифицировать" запускать свой бизнес-процесс? Как это реализовать?

Нравится

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

Добрый вечер!
В продукте sales enterprice 7.8 настраивал бизнес-процесс для раздела продажи, но столкнулся с трудностью. Необходимо создать задачу по назначению даты проведения презентации и проведению презентации. Необходимо, что бы по задаче провести презентацию пользователь получал уведомление за один день до указанной даты проведения презентации, заполненной ранее. Пробовал написать следующую формулу, где брал разницу между назначенной датой проведения презентации и системной переменной текущее значение даты. Однако не работает. Как можно в бизнес-процессе реализовать подобный отсчёт по проставленной дате и вызвать напоминание задачи за день до указанной даты? Возможно как то по другому написать условие формулы?

Нравится

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

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

Добрый день!

Для решения задачи можно использовать свойства и методы DateTime (в данном случае .AddDays()). Подробней можно найти в документации msdn - https://msdn.microsoft.com/ru-ru/library/system.datetime(v=vs.110).aspx
Предположим есть дата проведения презентации [dd.mm.yyyy]
Создавать активность с помощью “Добавить данные”. Установить значение:
Начало = [dd.mm.yyyy].AddDays(-1)

Воспользовался Вашим советом. В моем случае нужно запустить цикл добавления записей +2 дня начиная с сегодня. Выходит в параметр я выбираю текущую дату [#Системная переменная.Текущее значение даты#].AddDays(-2)

Но если я к выбранному параметра уже добавляю 2 дня, при сохранении БП выдает ошибку.

Схема содержит ошибки: AddDataUserTask1.RecordDefValues.UsrDateDelivey [Невозможно вычислить выражение "[#[IsOwnerSchema:false].[IsSchema:false].[Element:{6b480f6c-2178-466d-9795-c8c615a5bf89}].[Parameter:{5a11f02a-3da8-417f-9f7e-0e264134e07d}].[EntityColumn:{d9be5aff-6fa8-4739-982f-881cfb12ec0e}]#].AddDays(-2)", ошибка: Exception has been thrown by the target of an invocation.].

Если дело в «Exception has been thrown by the target of an invocation», то это может быть связано с настройками компьютера, где происходит компиляция, а не в цифре 2.

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

Добрый день!

Возникла нужда интегрировать Terrasoft XRM Professional Services v3.3.2.292 с сервисом ExpertSender. Этот сервис имеет собственный API, который работает через POST и GET запросы.Ранее мы уже проводили интеграцию данного сервиса с BPM'online. Для этого мы создавали бизнес-процесс, который запускался как только в CRM добавлялся новый Лид. У этого Лида считывался email-адрес, после чего запускался скрипт, который отправлял на сервис ExpertSender API-запрос, в котором содержался считанный email. Таким образом, мы добавляли новых Лидов в сервис ExpertSender, который работает через API.

Теперь же нужно то же самое воссоздать в Terrasoft XRM. Мы смогли создать новый процесс, в нем создали скрипт, который отправляет POST-запрос на ExpertSender. Но вот как сделать, чтобы процесс запускался автоматически, когда добавляется новый Лид, и как у конкретно этого нового Лида считать email - разобраться так и не удалось. Возможно, кто-то здесь подскажет, что можно сделать?

Нравится

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

Здравствуйте, Александр Николаевич!

Для решения Вашей задачи Вы можете использовать функцию WFStartByID(WorkflowID, ParamNames, ParamValues). В качестве параметров, в которую передаются WorkflowID - ID сервиса Вашего процесса, ParamNames - массив имен параметров Вашего БП, для которых Вы хотите передать начальное значение, ParamValues - массив значений параметров.

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

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

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

Заранее благодарю за ответы!

С уважением,
Александр

Нравится

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

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

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

Благодарю!
Получилось!

Спасибо.

Нам вдвойне приятно получать от клиентов такой фидбек!

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

Добрый день.

Стоит следующая задача:
По БП после сохранения карточки лида необходимо открыть карточку продажи. Использую стандартный элемент БП "Открыть страницу редактирования".
Столкнулся с проблемой, что страница продажи не открывается, если предыдущая по БП карточка Лида открыта тоже с использованием элемента БП "Открыть страницу редактирования".

В связи с этим вопрос:
Возможно ли открыть карточку редактирования без использования стандартный элемент БП "Открыть страницу редактирования"

И ещё один вопрос:
Можно ли отключить создание активности при использовании элемента "Открыть страницу редактирования"?

Нравится

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

Добрый день!

1. Элемент “Страница редактирования” считается выполненным после сохранения карточки. Т.е. если в процессе последовательно стоят 2 элемента “Страница редактирования” – для того, чтобы открылась вторая страница пользователь должен нажать кнопку [Сохранить] на первой странице.
По другому страницу редактирования открыть не получится.

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

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