Запуск БП для нескольких выбранных записей

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

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

var selectedRows = this.get("SelectedRows");

var processName = "NewServiceBuffer";
var parametersQueryString = '?SelectedRow='+selectedRows+'&ForContact=1';

Terrasoft.AjaxProvider.request({
    url: Terrasoft.workspaceBaseUrl + "/ServiceModel/ProcessEngineService.svc/" +
    processName + "/Execute" + parametersQueryString,
    method: "POST",
    jsonData: {}
});

Эту тему прочитал, понимаю как передавать в параметры каждый элемент, но как динамично создавать параметры, записей может быть разное количество

Нравится

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

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

С уважением,
Группа компаний Terrasoft

Здравствуйте, Олег!
Думаю, самым простым вариантом в данном случае будет разделить идентификаторы записей символом ";" и передать все как одну строку. А в БП прочитать с помощью String.Split().
Другой вариант - запускать отдельно БП для каждой записи, а заголовок активности также передавать как параметр. Во все экземпляры БП одинаковый. То есть тут нужно будет ввод заголовка из БП вынести в клиентскую часть.

Добрый день,
Андрей спасибо большое, действительно же можно просто строку передавать, подскажите еще если возможно как запустить БП кодом из C#, код из клиентской части явно не подойдет

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

var process = UserConnection.ProcessEngine.GetProcessByUId(processUId, true); //первый параметр - UId процесса
if (process != null) {
		process.SetPropertyValue("PropertyName", propertyVlue); //установка параметров процесса
		process.Execute(UserConnection);
}

Андрей, спасибо, только где глянуть Uid процесса?
В дизайнере процессов ProcessSchemaDesigner.aspx?id=61ad2e78-0dc8-4aaf-8fff-14e4f4cc66f0 это он?
Пробовал запустить используя код (также пробовал запускать используя Uid из таблицы SysSchema - тоже значение но в верхнем регистре)

var process = UserConnection.ProcessEngine.GetProcessByUId("61ad2e78-0dc8-4aaf-8fff-14e4f4cc66f0", true);
if (process != null) {
	process.Execute(UserConnection);
}

в дебаггере вылетает ошибка

var process = UserConnection.ProcessEngine.GetProcessByUId("61ad2e78-0dc8-4aaf-8fff-14e4f4cc66f0", true);
An exception of type 'Terrasoft.Common.ItemNotFoundException' occurred in Terrasoft.Core.dll but was not handled in user code
Additional information: Процесс с идентификатором "61ad2e78-0dc8-4aaf-8fff-14e4f4cc66f0" не найден

хотя в исходных файлах Uid именно такой

protected override void InitializeProperties() {
	base.InitializeProperties();
	Name = "TestProcess";
	UId = new Guid("61ad2e78-0dc8-4aaf-8fff-14e4f4cc66f0");
	CreatedInPackageId = new Guid("030d41ee-44a4-48d3-80a0-137c28cbd317");
	CreatedInSchemaUId = Guid.Empty;
	EntitySchemaUId = Guid.Empty;
	ModifiedInSchemaUId = Guid.Empty;
	ParametersEditPageSchemaUId = Guid.Empty;
	ParentSchemaUId = new Guid("bb4d6607-026b-4b27-b640-8f5c77c1e89d");
	QuickModelData = @"";
	SequenceFlowStrokeDefColor = Color.FromArgb(-4473925);
	SerializeToDB = true;
	SerializeToMemory = true;
	Tag = @"Bussines Process";
	TaskFillDefColor = Color.FromArgb(-1);
	UsageType = ProcessSchemaUsageType.Advanced;
	RealUId = new Guid("61ad2e78-0dc8-4aaf-8fff-14e4f4cc66f0");
}

Олег, прошу прощения. Похоже, я Вам немного не то посоветовал. Попробуйте так:

var manager = UserConnection.ProcessSchemaManager;
var schema =  (ProcessSchema)manager.GetInstanceByUId(ProcessUId);
 
//или можно так:
//var schema = manager.FindInstanceByName(processName);
 
var process = schema.CreateProcess(UserConnection);
if (process != null) {
		process.SetPropertyValue("PropertyName", propertyVlue); //установка параметров процесса
		process.Execute(UserConnection);
}

Андрей, спасибо большое, все получилось

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