Сколько себя помню, при чтении или изменении в 90% случаев условием фильтрации объекта является ID
Кликать постоянно несколько раз что бы снова и снова добавлять его в условия для нового блока БП может напрягать (если активно пилишь БП)
Итого предлагаю:
1. При добавлении блока на чтение / изменение автоматом добавлять пунктом фильтрации ID

 


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

 

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

Добрый день,

 

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

 

Спасибо за выбор нашего продукта.

 

С уважением,
Кучер Виталина
Оператор
Группа компаний Terrasoft

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

Добрый день!

Работаю в бизнес-процессе.

Необходимо поместить в одну из колонок детали с типом Строка значение из Справочника, но не Id, а то, что находится в колонке Название (пример: НЕ "b88bb1b9-6424-44c3-ac54-d601b2465197", а "очная проверка"). Если пользоваться Формула, то подставляются Id. Как решить данную проблему?

Нравится

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

Построить запрос в соответствующую таблицу по полученному значению.
Пример, Исполнитель - если он ссылается на справочник Контакт, то после элемента ReadDataUserTask2, добавить еще один элемент "Читать данные (новый элемент)", из таблицы Контакт, где Id =  ReadDataUserTask2.1-ый элемент.резкол.Исполнитель, читать колонку - Название, а в этой формуле уже использовать "Читать данные (новый элемент)".1-ый элемент.резкол.Название
 

Построить запрос в соответствующую таблицу по полученному значению.
Пример, Исполнитель - если он ссылается на справочник Контакт, то после элемента ReadDataUserTask2, добавить еще один элемент "Читать данные (новый элемент)", из таблицы Контакт, где Id =  ReadDataUserTask2.1-ый элемент.резкол.Исполнитель, читать колонку - Название, а в этой формуле уже использовать "Читать данные (новый элемент)".1-ый элемент.резкол.Название
 

Литвинко Павел,

Спасибо!

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

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

 

Нравится

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
	});
},

 

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

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

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

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

Нравится

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

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

Виктор, объект раздела «Библиотека процессов» строится по 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)

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

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

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

Зверев Александр пишет:

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

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

Нет, я перепутал с DCM. Это в кейсах приходится скриптами признак менять 

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