UserTask
параметры БП
Studio_Creatio
8.0

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

Хотел бы уточнить, как реализовать автозаполнение параметров моего созданного UserTask, например парамерами самого БП

Нравится

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

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

 

Да данный момент такой возможнсти в базовой конфигурации приложения нет, но я зарегистрирую ваше пожелание для ответственной R&D команды. 

Показать все комментарии
бизнес-процесс
параметры БП
Sales_Creatio
7.17

Здравствуйте! Нужно добавить перенос строки в вручную заполненный строковый параметр, для того чтобы выводить в разных местах с этим переносом. Как можно это сделать? \n и
не работают

Нравится

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

Здравствуйте Андрей, обычный перенос текста делается следующим образом (в прикрепленных файлах пример), а более детальная информация находится по ссылке на Академии ( https://academy.terrasoft.ru/docs/user/biznes_processy/nastrojka_proces… ).

 

Если ваша бизнес-задача отличается от данного примера, опишите её более детальнее.

 

Показать все комментарии
параметры БП
Collection
Business Process
Sales_Creatio_enterprise_edition
7.17

Привет. 



При запуске процесса из элемента "Задание сценарий" следующим образом: 



var manager    = UserConnection.ProcessSchemaManager;

var flowEngine = new FlowEngine(UserConnection);

var processSchema = manager.GetInstanceByName("test process");

Dictionary parameter = new Dictionary();

TestCompositeObjectList list = new TestCompositeObjectList();

list.Add(new A { ColName= "test1" });

list.Add(new A { ColName= "test2" });

parameter.Add("TestCollection", list);

parameter.Add("Name", "Test");

flowEngine.RunProcess(processSchema, parameter);

return true;

 

Сам класс TestCompositeObjectList был создан по этому примеру.

 

При запуске процесса ловим: 

System.InvalidCastException: Unable to cast object of type 'Terrasoft.Common.CompositeObjectList`1[Terrasoft.Common.CompositeObject]' to type 'System.Collections.Generic.List`1[System.String]'.



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

TestCollection - и есть коллекция записей с полем стринг.

Name - просто ещё один параметр.



Дайте пожалуйста пример как сделать это.

 

 

Нравится

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

Разобрался. 

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



Код вызова: 

 

var manager	= UserConnection.ProcessSchemaManager;
var flowEngine = new FlowEngine(UserConnection);
var processSchema = manager.GetInstanceByName("ProcessName");
 
Dictionary<string, object> parameter = new Dictionary<string, object>();
 
CompositeObjectList<CompositeObject> objList = new CompositeObjectList<CompositeObject>();
 
objList.Add(new CompositeObject (new Dictionary<string, object>() {{"SubParamName",  "SubParamValue1"}}));
objList.Add(new CompositeObject (new Dictionary<string, object>() {{"SubParamName",  "SubParamValue2"}}));
// ....
// Первый коллекция записей - второе примитивный 
parameter.Add("CollectionName", objList);
parameter.Add("PrimaryParam", "Test");
 
flowEngine.RunProcess(processSchema, parameter);

 

Получение в скрипте: 

 

CompositeObjectList<CompositeObject> collection = Get<CompositeObjectList<CompositeObject>>("CollectionName");

 

if (ProcessSchemaManager.GetCanUseFlowEngine(userConnection, processSchema)) {

                    var flowEngine = new FlowEngine(userConnection);

                    Dictionary<string, string> parameter = new Dictionary<string, string>();

                    parameter.Add("CaseRecordId", CaseRecordId.ToString());

                    flowEngine.RunProcess(processSchema, parameter);

                } else {

                    var moduleProcess = processSchema.CreateProcess(userConnection);

                    if (processSchema.Parameters.ExistsByName("CaseRecordId")) {

                        moduleProcess.SetPropertyValue("CaseRecordId", CaseRecordId);

                    }

                    moduleProcess.Execute(userConnection);

                }

Полозюков Евгений Петрович,

У вас в примере обычный параметр, а не лист. С обычными то все понятно. Меня интересует передача именно параметра типа коллекция записей.

Возможно ли это вообщ? Потому что тут последний коммент говорит что "неа".

Разобрался. 

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



Код вызова: 

 

var manager	= UserConnection.ProcessSchemaManager;
var flowEngine = new FlowEngine(UserConnection);
var processSchema = manager.GetInstanceByName("ProcessName");
 
Dictionary&lt;string, object&gt; parameter = new Dictionary&lt;string, object&gt;();
 
CompositeObjectList&lt;CompositeObject&gt; objList = new CompositeObjectList&lt;CompositeObject&gt;();
 
objList.Add(new CompositeObject (new Dictionary&lt;string, object&gt;() {{"SubParamName",  "SubParamValue1"}}));
objList.Add(new CompositeObject (new Dictionary&lt;string, object&gt;() {{"SubParamName",  "SubParamValue2"}}));
// ....
// Первый коллекция записей - второе примитивный 
parameter.Add("CollectionName", objList);
parameter.Add("PrimaryParam", "Test");
 
flowEngine.RunProcess(processSchema, parameter);

 

Получение в скрипте: 

 

CompositeObjectList&lt;CompositeObject&gt; collection = Get&lt;CompositeObjectList&lt;CompositeObject&gt;&gt;("CollectionName");

 

Показать все комментарии
подпроцессе
параметры БП
ошибка
БП
бизнес-процесс
Имя_параметра:_format
Sales_Creatio
7.15

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

мы питаемся в Бизнес процесс добавить подпроцесс, и когда передает только значение Лида, все ок,

но в подпроцессе у нас есть параметр, текстовый, и на него вылетает ошибка:

"Значение не может быть неопределенным. Имя параметра: format"

Пробовали и заполнять этот параметр значением по умолчанию в подпроцессе, и передавать значение с процесса, 

если он присутствует всегда одна и та же ошибка.



Версия: 7.15.4.3055

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

Нравится

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

Уточните, у Вас параметр назвается format или Name? Или это два разных параметра?

Здравствуйте, параметр называется - Name, с названием format у меня ничего нет.

Уверены, что дело именно в этом подпроцессе? Если запускать его из другого процесса, тоже такая ошибка?

Если переименовать Name как-то иначе, то тоже?

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

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

А в логи системы (стандартно в текстовом файле Error.log на веб-сервере) при этом что-то падает? В консоли браузера нет дополнительной информации в момент ошибки?

Показать все комментарии
отправка писем из БП
параметры БП
БП
7.13
Sales_Creatio_team_edition

Добрый день!

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

Пытаюсь создать условный поток с вычиткой данных о сроке действия банк.карты Контакта (Год) и (Месяц):

 

[#Читать Банк.карты.Первый элемент результирующей коллекции.Срок окончания(год)#]<="20"&&[#Читать Банк.карты.Первый элемент результирующей коллекции.Срок окончания(месяц)#]<=Месяц([#Читать Банк.карты.Первый элемент результирующей коллекции.Срок окончания(месяц)#])

 

*Желательно указать в условном потоке:

- что срок окончания(год)=Текущий год,

- что срок окончания(месяц)=Текущий месяц

Нравится

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

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

 

В дизайнере формул на вкладке «Системные переменные» есть «Текущее значение даты», а на вкладке «Функции» — «Месяц()». То есть можете написать «Месяц([#Системная переменная.Текущее значение даты#])». Для года функции не нашёл, можно написать числом в системную настройку, считывать оттуда и раз в год менять.

 

Или же сделать блок-скрипт, где проверять C#-кодом и результат писать в параметр логического типа. Код не привожу, он зависит от формата входных данных.

Показать все комментарии
параметры БП
чтение
параметров
Задание-сценарий
7.14
Studio_Creatio

Довольно простая задача - прочитать параметр БП который содержит ID или текст. При следующем коде в Задание-сценарий:

Guid activityId = Get("Activity11");

String activity1 = Get("ActivityGuid");

 

return true;

Выдает всегда ошибку:  

System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.

   в Terrasoft.Common.ReflectionUtilities.GetPropertyValueByPath(Object source, String propertyPath)

   в Terrasoft.Core.Process.ProcessModel.Get[T](String propertyPath)

   в Terrasoft.Core.Process.UsrProcess17NvgIncident1MethodsWrapper.ScriptTask1Execute(ProcessExecutingContext context)

   в Terrasoft.Core.Process.ProcessScriptTask.InternalExecute(ProcessExecutingContext context)

   в Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)

 

В чем может быть проблема ? 

Нравится

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

Добрый день.

 

Какую версию срм используете?

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

7.14.1.935

Александр Че,

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

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

Спасибо,

но как я понял из того же поста:

"Начиная с версии 7.12.3 все создаваемые бизнес-процессы в bpm’online являются интерпретируемыми. Для обращения к значениям параметра процесса следует использовать методы get и set."

В расширенных настройках только поле с Именем есть теперь.



Есть еще идеи ? 

Александр Че,

Служебное слово 'string' пишется с маленькой буквы, а у Вас с большой. Попробуйте написать правильно, вот так:

string activity1 = Get&lt;string&gt;("ActivityGuid");

И ещё меня смущает названия Ваших параметров: в строку пытаетесь получить параметр с названием 'ActivityGuid'. Вы точно правильно параметры приводите к соответствующим типам?

 

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

Начиная с версии 7.12.3 все создаваемые бизнес-процессы в bpm’online являются интерпретируемыми. Для обращения к значениям параметра процесса следует использовать методы get и set

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

Была идея что может указал системные переменные или слова.

Пересобрал БП.  И добавил другие параметры:

И все равно та же ошибка с GET ..

Скриншоты БП ниже



А после изменения кода в скрипте компилировали процесс или только сохраняли?

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

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

 

На 7.16.1 аналогичное работает нормально:

String ProcessSchemaParameter1 = Get&lt;String&gt;("ProcessSchemaParameter1");
Set("ProcessSchemaParameter2", ProcessSchemaParameter1);
return true;

Но тут механизм параметров дорабатывался, добавили направление.

Сомневаюсь, что в 7.14.1 просто стандартное обращение к параметру не работало. Может, у Вас сначала было неправильно с типом или названием параметра, и это закешировалось?

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

 в 7.14 еще нет направления, и параметры указываются в коде через их имена, которые указаны в параметрах процесса. 

Я тоже думал что закэшированно, и потому поднял быстро дефолтный Service и создал БП в пакете Custom и компилировал еще раз пакет уже в конфигурации, но ошибка так и не уходит.. такое ощущение что библиотеки не хватает.

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

 

Возможно, Ваш вопрос решит обновление.

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

В БП с таймером хочу получить локализованный шаблон email. 

Но при получении правил локализации получаю ошибку (см. https://community.terrasoft.ru/questions/osibka-pri-polucenii-sablona-email-v-fonovom-bp)

Вопрос. Почему ActorUserConnection, которое доступно после отработки таймера, не подходит DefaultLanguageIterator?

Вопрос 2: Можно ли сохранить UserConnection (в параметр или др. способом) для использования после таймера? 

Нравится

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

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

Показать все комментарии
Бизнес-процессы
параметры БП
конфигурация

Добрый день, форумчане)



Всегда был интересен вопрос след. характера:

В чём отличие типа данных у параметра БП таких как Уникальный идентификатор и Справочник?

Может в Справочник можно как-то внутрь заглянуть и вытянуть displayValue, избегая запрос к root таблице?



Сталкивался кто с подобным, интересен опыт Ваш.

Нравится

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

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

_processSchemaParameter1 = () =&gt; { return (Guid)(new Guid("b06f1e0e-f46b-1410-7190-00155d043204")); };
_processSchemaParameter2 = () =&gt; { return (Guid)(new Guid("b06f1e0e-f46b-1410-7190-00155d043204")); };
...
private Func&lt;Guid&gt; _processSchemaParameter1;
public virtual Guid ProcessSchemaParameter1 {
	get {
return (_processSchemaParameter1 ?? (_processSchemaParameter1 = () =&gt; Guid.Empty)).Invoke();
	}
	set {
_processSchemaParameter1 = () =&gt; { return value; };
	}
}
 
private Func&lt;Guid&gt; _processSchemaParameter2;
public virtual Guid ProcessSchemaParameter2 {
	get {
return (_processSchemaParameter2 ?? (_processSchemaParameter2 = () =&gt; Guid.Empty)).Invoke();
	}
	set {
_processSchemaParameter2 = () =&gt; { return value; };
	}
}
...
private void WritePropertyValues(DataWriter writer, bool useAllValueSources) {
	if (!HasMapping("ProcessSchemaParameter1")) {
writer.WriteValue("ProcessSchemaParameter1", ProcessSchemaParameter1, Guid.Empty);
	}
	if (!HasMapping("ProcessSchemaParameter2")) {
writer.WriteValue("ProcessSchemaParameter2", ProcessSchemaParameter2, Guid.Empty);
	}
}
 
...
protected override void InitializeMetaPathParameterValues() {
	base.InitializeMetaPathParameterValues();
	MetaPathParameterValues.Add("e0873088-8334-4b85-96a4-fa3e5ecb7374", () =&gt; ProcessSchemaParameter1);
	MetaPathParameterValues.Add("246467c7-071b-4cb0-8073-30c4f72be120", () =&gt; ProcessSchemaParameter2);
...	
protected override void ApplyPropertiesDataValues(DataReader reader) {
	base.ApplyPropertiesDataValues(reader);
	bool hasValueToRead = reader.HasValue();
	switch (reader.CurrentName) {
case "ProcessSchemaParameter1":
	if (!hasValueToRead) break;
	ProcessSchemaParameter1 = reader.GetValue&lt;System.Guid&gt;();
break;
case "ProcessSchemaParameter2":
	if (!hasValueToRead) break;
	ProcessSchemaParameter2 = reader.GetValue&lt;System.Guid&gt;();
break;
	}
}
...

А в метаданных:

      "Parameters": [
        {
          "TypeName": "Terrasoft.Core.Process.ProcessSchemaParameter",
          "UId": "e0873088-8334-4b85-96a4-fa3e5ecb7374",
          "Name": "ProcessSchemaParameter1",
          "CreatedInSchemaUId": "f4c123c0-d628-4d9f-867c-6c0b78c86395",
          "ModifiedInSchemaUId": "f4c123c0-d628-4d9f-867c-6c0b78c86395",
          "DataValueType": "b295071f-7ea9-4e62-8d1a-919bf3732ff2",
          "SourceValue": {
            "Source": 3,
            "Value": "[#Lookup.c449d832-a4cc-4b01-b9d5-8a12c42a9f89.b06f1e0e-f46b-1410-7190-00155d043204#]",
            "ModifiedInSchemaUId": "f4c123c0-d628-4d9f-867c-6c0b78c86395"
          },
          "ReferenceSchemaUId": "c449d832-a4cc-4b01-b9d5-8a12c42a9f89"
        },
        {
          "TypeName": "Terrasoft.Core.Process.ProcessSchemaParameter",
          "UId": "246467c7-071b-4cb0-8073-30c4f72be120",
          "Name": "ProcessSchemaParameter2",
          "CreatedInSchemaUId": "f4c123c0-d628-4d9f-867c-6c0b78c86395",
          "ModifiedInSchemaUId": "f4c123c0-d628-4d9f-867c-6c0b78c86395",
          "DataValueType": "23018567-a13c-4320-8687-fd6f9e3699bd",
          "SourceValue": {
            "Source": 3,
            "Value": "[#Lookup.c449d832-a4cc-4b01-b9d5-8a12c42a9f89.b06f1e0e-f46b-1410-7190-00155d043204#]",
            "ModifiedInSchemaUId": "f4c123c0-d628-4d9f-867c-6c0b78c86395"
          }
        }
      ],

То есть разницы практически нет, хотя внешний вид и интерфейс выбора значения разные.

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

select top 10 *, cast(PropertiesData as varchar(max)) from SysProcessData

Там для параметров видно тоже только Id.

Показать все комментарии
Схема бизнес процессов и разработка
параметры БП
элементы БП
7.11
sales_enterprise

Добрый день! 

Процесс не удаляется из конфигуратора, возникает ошибка. При генерации приложения, та же самая ошибка

 

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

В БД ничего похожего найти не смог 

Есть какие-нибудь идеи по удалению процесса?



Сам процесс перестал открываться, выбрасывает из конфигуратора на стандартную страницу ошибки

Нравится

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

Всем привет.

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

Заранее спасибо за помощь.

Нравится

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

Начиная с версии 7.12.3 все создаваемые бизнес-процессы в bpm’online являются интерпретируемыми. Для обращения к значениям параметра процесса следует использовать методы get и set 

Метод Get возвращает значение параметра элемента или процесса.

Сигнатура метода:

Get<T>(string path)

где:

T — тип значения параметра;

path — строка, определяющая путь к параметру или свойству. Путь формируется согласно правилам:

“имя параметра”,

“имя свойства”,

“имя элемента.имя параметра”,

“имя элемента.имя свойства”.

Метод Set указывает значение параметру элемента или процесса.

Сигнатура метода:

Set(string path, T value)

где:

value — указываемое значение,

path — строка, определяющая путь к параметру или свойству. Путь формируется согласно правилам, описанным выше для метода Get.

 

Так например чтобы получить в скриптаске UserConnection нужно использовать конструкцию:

UserConnection userConnection = Get<UserConnection>("UserConnection");

Чтобы получить строковый параметр БП:

string message = Get<string>("Message");

Подробнее тут

Начиная с версии 7.12.3 все создаваемые бизнес-процессы в bpm’online являются интерпретируемыми. Для обращения к значениям параметра процесса следует использовать методы get и set 

Метод Get возвращает значение параметра элемента или процесса.

Сигнатура метода:

Get<T>(string path)

где:

T — тип значения параметра;

path — строка, определяющая путь к параметру или свойству. Путь формируется согласно правилам:

“имя параметра”,

“имя свойства”,

“имя элемента.имя параметра”,

“имя элемента.имя свойства”.

Метод Set указывает значение параметру элемента или процесса.

Сигнатура метода:

Set(string path, T value)

где:

value — указываемое значение,

path — строка, определяющая путь к параметру или свойству. Путь формируется согласно правилам, описанным выше для метода Get.

 

Так например чтобы получить в скриптаске UserConnection нужно использовать конструкцию:

UserConnection userConnection = Get<UserConnection>("UserConnection");

Чтобы получить строковый параметр БП:

string message = Get<string>("Message");

Подробнее тут

Григорий Чех,

Спасибо большое! Как-то этот мануал мимо меня прошёл.

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