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

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

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

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

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

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

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



Версия: 7.15.4.3055

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

Нравится

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

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

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

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

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

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

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

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

Показать все комментарии
Обсуждение
бизнес-процесс
БП
улучшение
функциональность

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

Привожу список того, что бы мне хотелось иметь в БП.

 

1. Отсутствие возможности комментирования. Необходимость возникает в средних и сложных БП с N > 20, где N - количество элементов в нем. Возникают недостатки: читабельности (неоднозначность в действиях); группировки (чтобы визульно можно было разделить элементы БП по группам).

 

2. Свойство "Последовательное чтение" и "Выборочное чтение" (по умолчанию) в служебной команде "Чтение записи". Позволяет не зависеть от команды изменения записи в рекурсии. Последовательность автоматически формировать по выбранной пользователем сортировке и Id (на данный момент, при дубликатах). Идея в том, что при последовательном чтении скрытно добавляется дополнительный фильтр пользовательской сортировки (больше или равно) и в последнюю очередь Id (больше).

 

3. Отсутствие простого завершающего события. Так как в БП может быть 2 и более потока, то необходимо для каждого из них возвращать свое завершающее событие. На данный момент реализована схема: либо все либо ничего. Т. е. результатом БП является единственный останов. Это мешает рассматривать БП как полноценную систему, умеющую хорошо работать с потоками - отсутствует возможность уничтожить отдельный поток. Например: есть N подпроцессов, которые нужно выполнить либо последовательно либо параллельно и отчитаться по каждому из них. На данный момент в Creatio требуется задействовать внешний объект, файл и т. п., для выполнения этого задания придется отдельно вводить понятия "экземпляр главного процесса" и "результат выполнения". В https://community.terrasoft.ru/questions/id-suschnosti-bp рекомендуют привязывать БП к экземпляру объекта, что не соответствует нашей задаче.

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

Илья, спасибо за пожелания.

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

По второму и третьему завёл.

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

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

Илья, можете ещё раз более подробно описать по второму пункту, что Вам требуется?

Показать все комментарии
бизнес-процесс
копирование записей детали
копирование
добавление
Sales_Creatio_team_edition
7.17

Добрый день, мне надо. что бы при создании записи в разделе копировались значения и родительской записи, так как полей больше 70

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

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

Нравится

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

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

Можно развить дальше и сделать отдельную кнопку для запуска процесса.

Алексей Следь,

мне надо что бы все 100+ полей копировались одной коллекцией, добавлять вручную такое мне не особо по душе

Dima Avdoshin,

Не понял. Один раз настроить в БП элемент добавить данные и все. Все 100+ полей будут копировать автоматически при создании новой записи. Если сложно настроить элемент добавить данные, то можно все сделать добавление данных скриптом в том же процессе. Можно через InsertSelect

Алексей Следь,

InsertSelect не вызвет событийную модель, что не есть хорошо.

Dima Avdoshin,

Как вариант можно заместить логику нажатия по плюсу на детале.

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

А все колонки из родительской скопирует базовая логика системы:

В режиме копирования система сама копирует значения всех полей, которые на объекте отмечены признаком "Копировать".

Владислав Литвинчук пишет:

InsertSelect не вызвет событийную модель, что не есть хорошо.

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

 

По изначальному вопросу темы:

Вы хотите копировать из одноимённых полей одного объекта в другой?

А то, если просто создать копию записи, то в реестре есть кнопка копирования записи, при нажатии на неё создаётся новая запись с заполненными полями, у которых в объекте включена галка «Копировать данные при копировании записи».

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

то в реестре есть кнопка копирования записи, при нажатии на неё создаётся новая запись с заполненными полями, у которых в объекте включена галка «Копировать данные при копировании записи».

Да именно это мне нужно, каким образом я могу вызвать ее программно?

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

можно пример пожалуйста

Сходу нашёлся пример только из интерфейса 5.Х в базовой карточке. От него можно отталкиваться, выкинув лишнее.

row = dataSource.Rows[0].Clone() as Terrasoft.Core.Entities.Entity;
Guid currentUserContactId = Page.UserConnection.CurrentUser.ContactId;
EntityPrimaryColumnValue = Guid.NewGuid();
row.SetColumnValue(primaryColumnName, EntityPrimaryColumnValue);
row.SetColumnValue("CreatedOn", DateTime.Now);
row.SetColumnValue("CreatedById", currentUserContactId);
row.SetColumnValue("ModifiedOn", DateTime.Now);
row.SetColumnValue("ModifiedById", currentUserContactId);
var columnNames = new List<string>();
foreach (var column in row.Schema.Columns) {
	if (column.HasDefValue && 
		((column.IsLookupType || column.IsMultiLookupType) &&
		column.ReferenceSchema.PrimaryDisplayColumn != null) &&
		!columnNames.Contains(column.Name)) {
		columnNames.Add(column.Name);
	}
}
row.LoadLookupDisplayValues(columnNames);
dataSource.Insert(row);

У объекта Entity есть метод .Clone() (или вызываемый им же конструктор Entity(Entity source)). Запускаем его, получаем новый объект в памяти. При необходимости заполняем текущими датой и пользователем стандартные 4 поля, затем те поля, значения которых в Вашей логике нужно поменять относительно образца. Все остальные поля, у которых в дизайнере есть галочка, скопировались автоматически. Id, естественно, будет уже новый.

Цикл из примера не нужен, ведь поля для отображения справочников нас сейчас не интересуют. И в конце запускаем у своего Entity метод .Save(), чтобы эта запись из памяти попала в базу. Кажется, ничего не упустил.

 

Но это всё на уровне C#-скрипта в процессе. Если надо в JS-логике, подобно кнопке копирования, нужно смотреть, как она устроена.

 

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

Показать все комментарии
бизнес-процесс
Обработка_таймера
Sales_Creatio_commerce_edition
7.17

Сегодня у нас встали все процессы где есть элемент Таймер. Просто останавливается на нем и все. Что можно сделать? Компиляция и генерация кода не исправляют ситуацию.

Нравится

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

Обратите внимание на  две похожих темы за недавнее время. Возможно, и у Вас та же причина и поможет то же изменение настроек.

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

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

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

Добрый день!



Есть задача - добавлять в аудиторию письма (элемент "отправка письма" в процессе) коллекцию получателей (контакты, или их email'ы)

 

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



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



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



Вопрос - каким образом задачу можно решить средствами low-code платформы? :)

Нравится

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

Доброе утро.

 

Средствами low-code можно попробовать реализовать с помощью обработки коллекций данных в бизнес-процессах через многоэкземплярное выполнение элемента [ Подпроцесс ].

Доброе утро.

 

Средствами low-code можно попробовать реализовать с помощью обработки коллекций данных в бизнес-процессах через многоэкземплярное выполнение элемента [ Подпроцесс ].

Показать все комментарии
бизнес-процесс
7.16
Studio_Creatio

В первом бизнес-процессе в элементе Задание-сценарий вызываю другой бизнес-процесс.

Во втором бизнес-процессе выполняется логика и заполняются два исходящих параметра. 

Как вычитать эти два параметр в первом бизнес-процессе

 var manager = context.UserConnection.ProcessSchemaManager;
 var processSchema = manager.GetInstanceByName("Второй процесс");
 var process = processSchema.CreateProcess(context.UserConnection);
 process.Execute(context.UserConnection);
       
 if (process.Status == Terrasoft.Core.Process.ProcessStatus.Done)
 {
        parameter1 = //вычитать параметр 1 второго процесса
        parameter2 = //вычитать параметр 2 второго процесса
  }

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

Спасибо.

Нравится

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

Сразу после запуска точно нельзя, он ведь ещё не отработал. А если делать средствами БП, в одном элементе запустить подпроцесс, далее элементе «Формула» или в условии перехода обратиться к его параметру, как тут:

scr_process_creation_designer_conditional_formula.png

Для получения:

var parametr1 = Get<Тип данных параметра>

("Код параметра");

 

Для присвоения:

Set("Код параметра", parametr1);

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

 

Сергей, если поискать, в SynchronizeWithGoogleModuleProcess есть пример такого получения параметров:

public virtual void LaunchProcess() {
	var entityManager = UserConnection.EntitySchemaManager;
	var manager = UserConnection.ProcessSchemaManager;
	var processSchema =  (ProcessSchema)manager.FindInstanceByUId(IntegrationProcessId);
	if (processSchema == null) {
		return;
	}
	var moduleProcess = processSchema.CreateProcess(UserConnection);
	moduleProcess.Execute(UserConnection);
	var syncGContactProcessUId = new Guid("2e4ae0af-2b8a-446f-bd58-7a66e3848de2");
	var syncGCalendarProcessUId = new Guid("0eceffe6-2795-439f-b915-118580947959");
	if (IntegrationProcessId == syncGContactProcessUId ||
		IntegrationProcessId == syncGCalendarProcessUId) {
		SyncProcessResult = (string)moduleProcess.GetPropertyValue("SyncResult");
	}
}

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

Ведь на момент выполнения функции Execute код скрипта продолжает выполняться, а дочерний БП ещё даже не запустился, process.Status не будет равен Terrasoft.Core.Process.ProcessStatus.Done.

Александр, именно. Нужно получить параметры с вызываемого процесса.

 

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

Сразу после запуска точно нельзя, он ведь ещё не отработал. А если делать средствами БП, в одном элементе запустить подпроцесс, далее элементе «Формула» или в условии перехода обратиться к его параметру, как тут:

scr_process_creation_designer_conditional_formula.png

 У меня дело в том, что через подпроцесс должна пройти коллекция записей. Коллекцию я получаю в Задании-сценарий. 

Придётся менять архитектуру логики.

Александр, спасибо за отклик. 

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

В 7.17.1 должен появиться возврат результата из нынешних интерпретируемых БП, в академии будут инструкции по запуску из клиентского и серверного кода.

Показать все комментарии
бизнес-процесс
ошибка
Справочное поле
настройка объекта
7.15
Service_Creatio

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

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

Нравится

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

Дмитрий, поскольку Ваша колонка ссылается не на физическую таблицу в БД, а на представление, то при установленных галочках «индексируемая» и при контроле целостности, система пыталась добавить внешний ключ в представление после чего и последовала  ошибка. Если перед публикацией снять галочку индексации и установить галочку «Не контролировать целостность», как показано на скриншоте ниже, публикация такого объекта пройдет без проблем. Для отображения всех свойств колонки, необходимо выбрать «все» в следующем меню. Наглядные скриншоты прикрепил.

Добрый день.

 

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

 

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

 

 

Алла Савельева пишет:

Добрый день.

Вам нужно в свойствах данного объекта установить признак 'Представление в базе данных', как на скриншоте ниже:

Нет. Это совет, как создать представление, на не в объекте ссылку на представление. 

Эта ошибка происходит из-за того, что система пытается создать внешний ключ (foreign key) на представление, а СУБД такой возможности не дает.



Нужно в свойствах справочной колонки, которая ссылается на представление указать признак "Не контролировать целосность". Это не будет создавать внешний ключ в БД.

 

Дмитрий, поскольку Ваша колонка ссылается не на физическую таблицу в БД, а на представление, то при установленных галочках «индексируемая» и при контроле целостности, система пыталась добавить внешний ключ в представление после чего и последовала  ошибка. Если перед публикацией снять галочку индексации и установить галочку «Не контролировать целостность», как показано на скриншоте ниже, публикация такого объекта пройдет без проблем. Для отображения всех свойств колонки, необходимо выбрать «все» в следующем меню. Наглядные скриншоты прикрепил.

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

Это то что нужно, спасибо!

Показать все комментарии
Ревью
баг
бизнес-процесс

Добрый день.

На нашей системе 7.16.3 воспроизводится следующий баг.

Создаем процесс.

1. Создаем элемент читать данные с чтением всех колонок

2. Создаем условный переход по данным из этого элемента

3. Создаем Добавить данные с данными из элемента п.1.

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

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

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

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

 

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

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

Добрый день.

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

Алексей, спасибо за информацию, зафиксировал идею.

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

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

 

Какие манипуляции необходимо выполнить для этого?

Нравится

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

Владимир, см. статью.

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

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

Показать все комментарии
справочники
бизнес-процесс
7.13
Sales_Creatio_enterprise_edition

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

 

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

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

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

Как можно продолжить процесс с изменением/добавлением значений только в этом справочнике, не раздавая при этом доступ к CanManageLookups?

Нравится

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

Добрый день.

 

Проверка по правам доступа на операцию CanManageLookups выполняется для всех объектов, которые унаследованы от BaseLookup (Базовый справочник).

 

Можно попробовать сменить родителя у объекта Вашего справочника на BaseObject (Базовый объект).

В этом случае не забудьте добавить поля Name и Description, которые есть в базовом справочнике, но нет в базовом объекте.

 

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

Алла, зачем менять родителя, просто во встроенном БП справочника перезатереть пустой функцию проверки CheckCanManageLookups.

public override void CheckCanManageLookups() {
}

Так сделано у ряда коробочных справочников, например, у Department.

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

Да, согласна. В данном случае твое решение является оптимальным.

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

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

 

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

Алла, ваш вариант тоже подходит, так как использование справочника было лишь номинальным и для удобства администрирования - поля Name и Desc мне не нужны, так как используются поля других справочников: Account + 2 поля Int.

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