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

 

Нравится

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

Попробуйте сделать так. Мне кажется должно сработать.

сделать эти поля обязательными , например

Попробуйте сделать так. Мне кажется должно сработать.

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

Процесс запускается по конкретному контакту

Задаётся вопрос пользователю 

Открывается страница редактирования (тек.контакт) 

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

Пробовал через условный сравнить значение  (Допущена ошибка в формуле: Используется недопустимый оператор) **Естественно ожидал)))

Вопрос в том, что как можно создать что-то похожее на логическое если (Если Дата заполнена--Ю процесс останов) если нет открыть страницу редактирования 

Прикрепленные файлы

Нравится

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

вы сравниваете число и дату, вот вам и ошибка, когда сравниваю дату все ок, и не проверяйте пустоту даты сравнением  == или  != , вам надо проверять больше ли она минимально возможной даты DateTime.MinValue

вы сравниваете число и дату, вот вам и ошибка, когда сравниваю дату все ок, и не проверяйте пустоту даты сравнением  == или  != , вам надо проверять больше ли она минимально возможной даты DateTime.MinValue

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

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

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

 

P.S.
Так же, в этом меню незаслуженно обделены Минуты, их часто не хватает для быстрых процессов.

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

Добрый вечер!

 

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

Разработчики рассмотрят ее в одной из будущих версий.

 

Спасибо, что делаете наш продукт лучше!

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

Всем доброго времени суток, хотелось бы немного прояснить вопрос.
Пробую вызывать веб-сервис из бизнес-процесса.
Через Postman, прохожу аунтентификацию через .../ServiceModel/AuthService.svc/Login, далее вызываю .../0/odata - получаю перечень таблиц и статус 200, то же самое через адресную строку браузера.

Но если вызывать этот веб-сервис через бизнес-процесс, кроме HTTP Error 401.1 - Unauthorized или Invalid user name or password не получил.
В бизнес-процессе пробовал вызывать сначала веб-сервис .../ServiceModel/AuthService.svc получать через параметры процесса BPMCSRF  - без результата.

Через веб-сервис .../0/ServiceModel/EntityDataService.svc/  получаю статус 200 и ответ в виде XML.


Суть вопроса почему .../0/odata возвращает статус 200 и данные через постман и браузер, а через бизнес-процесс возращает ошибку.
Приложение on-site. 

 

Нравится

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

Сергей,

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

Олег Нефедьев, спасибо.

Этот момент описан в документации, с аутентификацией с логином и паролем и в константах (пароль в зашифрованой константе) и в явном виде не работало, пробовал разные комбинации.

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

Добрый день!

Необходимо реализовать следующую задачу.

В моем пакете создан Исходный код следующего содержания:

На странице редактирования записи имеется поле "Скрипт проверки":

Каким образом я могу с помощью бизнес-процесса запустить этот скрипт и выполнить его таким образом, чтобы у меня запустился код из первого скрина и получить значение true? (само содержание Скрипта проверки не обязательно должно быть именно таким)

Нравится

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

Думаю, Вам нужно использовать Activator.CreateInstance()

Думаю, Вам нужно использовать Activator.CreateInstance()

Безуглый Кирилл Александрович,

А можно немного подробней...

Pavel Litvinovich, 

Вот пример кода:

using System;
using System.Reflection;

namespace ActivatorCreateInstance
{
    class Program
    {
        static void Main(string[] args) {
            var resultOne = Invoker.CreateAndInvoke("ActivatorCreateInstance.MyClass", null, "MethodOne", null);
            var resultTwo = Invoker.CreateAndInvoke("ActivatorCreateInstance.MyClass", null, "MethodTwo", null);
            Console.WriteLine(resultOne);
            Console.WriteLine(resultTwo);
            Console.ReadKey(true);
        }
    }

    public static class Invoker
    {
        public static object CreateAndInvoke(string typeName, object[] constructorArgs, string methodName, object[] methodArgs) {
            Type type = Type.GetType(typeName);
            object instance = Activator.CreateInstance(type, constructorArgs);

            MethodInfo method = type.GetMethod(methodName);
            return method.Invoke(instance, methodArgs);
        }
    }

    public class MyClass
    {
        public static bool MethodOne() {
            return true;
        }

        public static bool MethodTwo() {
            return false;
        }
    }
}
 

При помощи элемента БП "Читать данные" читаете поле "Скрипт проверки"

Безуглый Кирилл Александрович,

Спасибо!

Безуглый Кирилл Александрович,

Данный код необходимо вставить в элемент Задание-сценарий в БП?

данный код создает консольное приложение. Этот код как пример, чтобы вы могли разобраться, как работает Activator.CreateInstance. И да, за основу можно взять тело кода и вставить его элемент БП "Задание-сценарий"

Безуглый Кирилл Александрович,

Спасибо! Разобрался!

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

Коллеги здравствуйте! Подскажите, пожалуйста, как изменить язык в шаблоне документации, которая формируется по БП. Сейчас в заголовках шаблона настроен английский язык, а мне необходимо сделать на украинском т.к. все описание будет украинском.

Нравится

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

Добрый день!

Прошу Вас более детально описать Вашу задачу и какие трудности у Вас возникли. Возможно Вы имеете в виду работу с мультиязычными шаблонами?

Для работы с мультиязычными email-сообщениями Вам необходимо выполнить в системе следующие действия:
1. Настроить языки общения с клиентами. Это язык, на котором контакту будут отправляться email-уведомления. Для указания языка общения и формирования мультиязычных шаблонов используются значения справочника [Языки общения].
 
2. Настроить мультиязычные шаблоны. Для этого, Вам необходимо добавить локализации для используемого шаблона.
Если необходимо добавить в шаблон несколько языков, повторите шаги 3 и 4 для каждой локализации.  В результате на странице шаблона появится несколько вкладок для формирования писем на выбранных языках.

При отправке, язык определяется следующим образом:​​​​​​​
1. Заполнен ли на странице контакта язык общения.
•Если поле заполнено, то адресату будет отправлен шаблон на его языке общения.
•Если поле не заполнено, то будет выполнен переход на следующий шаг проверки.
2. Заполнена ли системная настройка “Язык сообщений по умолчанию”.

•Если системная настройка заполнена, то адресату будет отправлено письмо на языке, установленном в системной настройке.

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

Более подробно с логикой работы мультиязычных шаблонов Вы можете ознакомиться на Академии: https://academy.terrasoft.ru/documents/base/7-16/kak-nastroit-otpravku-…

 

 

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

Добрый день!

Я запускаю БП из кода (при нажатии на соответствующую кнопку в Действия) с помощью ProcessModuleUtilities. 

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

Как сделать так, чтобы считывался Id карточки редактирования из которой запускается БП?

Вот скрин БП.

Нравится

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

В БП создать входящий параметр. Например RecordId с типом уникальный идентификатор.

Передать Id записи в свойство parameters в метод ProcessModuleUtilities.executeProcess.

someMethod: function() {
	this.customRunProcess("SomeProcessName", { RecordId: this.$Id });
},
 
customRunProcess: function(name, parameters, callback) {
	ProcessModuleUtilities.executeProcess({
		sysProcessName: name,
		callback: function() {
			this.hideBodyMask();
			Ext.callback(callback, this);
		},
		scope: this,
		parameters: parameters
	});
},

 

В БП создать входящий параметр. Например RecordId с типом уникальный идентификатор.

Передать Id записи в свойство parameters в метод ProcessModuleUtilities.executeProcess.

someMethod: function() {
	this.customRunProcess("SomeProcessName", { RecordId: this.$Id });
},
 
customRunProcess: function(name, parameters, callback) {
	ProcessModuleUtilities.executeProcess({
		sysProcessName: name,
		callback: function() {
			this.hideBodyMask();
			Ext.callback(callback, this);
		},
		scope: this,
		parameters: parameters
	});
},

 

Владислав Литвинчук,

Спасибо!

Владислав Литвинчук,

Подскажите еще один момент. Если мне еще необходимо помимо Id карточки получить значение одного из справочных полей. Как необходимо изменить код?

Павел, если карточка сохранена, значения её полей есть в базе. По Id можно вычитать в самом БП элементом чтения данных.

Pavel Litvinovich пишет:

Владислав Литвинчук,

Подскажите еще один момент. Если мне еще необходимо помимо Id карточки получить значение одного из справочных полей. Как необходимо изменить код?

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

Либо добавить еще входящий параметр, и дополнительно его передать со страницы в объект parameters при вызове процесса.

Владислав Литвинчук,

На подобии этого?

someMethod: function() {
	this.customRunProcess("SomeProcessName", { RecordId: this.$Id });
    this.customRunProcess("SomeProcessName2", { RecordPeriod: this.$UsrPeriod });
},
 
customRunProcess: function(name, parameters, callback) {
	ProcessModuleUtilities.executeProcess({
		sysProcessName: name,
		callback: function() {
			this.hideBodyMask();
			Ext.callback(callback, this);
		},
		scope: this,
		parameters: parameters
	});
},

 

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

Да, точно. Так и сделал. Спасибо!

Pavel Litvinovich пишет:

Владислав Литвинчук,

На подобии этого?

Уже прочли в БП - ок.
Если бы передавать из страницы, то так:

 

someMethod: function() {
    this.customRunProcess("SomeProcessName", { 
        RecordId: this.$Id,
        RecordPeriod: this.$UsrPeriod // Если это справочное поле, то this.$UsrPeriod.value
    });
},
 
customRunProcess: function(name, parameters, callback) {
	ProcessModuleUtilities.executeProcess({
		sysProcessName: name,
		callback: function() {
			this.hideBodyMask();
			Ext.callback(callback, this);
		},
		scope: this,
		parameters: parameters
	});
},

 

Владислав Литвинчук,

Спасибо за помощь!

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

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

Нравится

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

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

Виктор, объект раздела «Библиотека процессов» строится по view VwProcessLib, поле «Активен» там вычисляется так:

,[Enabled] =
	CAST(CASE
		WHEN EXISTS (
			SELECT 1
			FROM [SysProcessDisabled]
			WHERE
				[SysProcessDisabled].[SysSchemaId] IN([VwSysSchemaInWorkspace].[Id], [VwSysSchemaInWorkspace].[ParentId]))
			THEN 0
		ELSE 1
	END AS BIT)

То есть для переноса признака неактивности нужно перенести на новое место записи в объекте «Деактивированные процессы» (SysProcessDisabled).

 

Или создать на новом месте записи скриптом вставки в эту таблицу, как описано тут, и прикрепить скрипт к пакету.

Зверев Александр пишет:
То есть для переноса признака неактивности нужно перенести на новое место записи в объекте «Деактивированные процессы» (SysProcessDisabled)

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

Владимир, насколько понял, у Виктора не переносится именно признак.

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

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

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

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

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

PROCESS_ENGINE_SERVICE_NAME: "ServiceModel/ProcessEngineService.svc",
...
		_runProcessOld: function(processName, parameters, callback, scope) {
			let queryString = "";
			if (parameters) {
				const queryItems = _.map(parameters, function(value, name) {
					return name + "=" + value;
				}, this);
				queryString = "?" + queryItems.join("&");
			}
			this.callService({
				serviceName: this.PROCESS_ENGINE_SERVICE_NAME,
				methodName: processName + "/RunProcess" + queryString
			}, callback, scope);
		},

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

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

Добрый день!

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

То есть аналитик смог бы настраивать текст и варианты ответов. И после этого элемента использовать условные потоки.

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

Елизавета, уже зафиксирована идея «Возможность открывать страницы по процессу/показывать сообщения как всплывающее/модальное окно / уведомление (не путать с панелью уведомлений)». 

 

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

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

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

Александр, да, с автогенерируемой страницей понятно, "Вопрос пользователю"  тоже подойдет для этой цели. Но идея именно в том, чтобы не открывать новую страницу, а выводить маленькое одно модальное окно)  Для глаз пользователя есть разница: открывается новая страница или же на старой появляется модальное окно.

Здорово, что идея уже зафиксирована, будем очень ждать реализации.

Елизавета, такого на уровне элементов БП, а не написанием кода на странице, пока нет, идея заведена.

Караваева Елизавета Дмитриевна,

Елизавета, по ссылке есть подходящий темплейт

https://marketplace.creatio.com/template/popup-element-business-process…

Константин, спасибо за уточнение. Тогда уже лучше его же отсюда.

Константин, спасибо большое, посмотрю, как работает!)

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

Спасибо!

 

Елизавета, доступно более продвинутое решение в виде дополнения на Маркетплейс. Оно позволяет показать окно, отобразить набор кнопок, принять результат и организовать дальнейшее ветвление процесса в зависимости от выбора пользователя. https://marketplace.terrasoft.ru/template/deystvie-processa-pokazat-mod…

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