Создать подпроцесс программно

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

Нравится

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

С привязкой не получалось сделать, а вот как просто запустить процесс из кода можно в этой теме глянуть https://community.terrasoft.ru/questions/mnogokratnyi-zapusk-bp-s-razny…

 

Пример, где SxRecalcPotentialInOppNeed название запускаемого процесса, в Dictionary параметры передаваемые процессы :

UserConnection.ProcessEngine.ProcessExecutor.Execute("SxRecalcPotentialInOppNeed", 
new Dictionary<string, string> {
 
	{ "OpportunityId", opportunityId.ToString() }
 
});

 

Трефилов Павел Сергеевич,

Это я знаю. Мне нужно именно с привязкой к основному это сделать. 

Можно открыть код какого-нибудь компилируемого БП, где есть элемент ProcessSchemaSubProcess и посмотреть, как с ним работают в автогенерируемом коде. Например, в ContactAgeActualizationRunnerProcess подпроцесс определяется так:

ProcessSchemaSubProcess actualizecontactagesubprocess = CreateActualizeContactAgeSubprocessSubProcess();
FlowElements.Add(actualizecontactagesubprocess);
...
protected virtual ProcessSchemaSubProcess CreateActualizeContactAgeSubprocessSubProcess() {
	ProcessSchemaSubProcess schemaActualizeContactAgeSubprocess = new ProcessSchemaSubProcess(this) {
		UId = new Guid("845629d7-6a9f-47ae-8c06-0703688e57ce"),
		ContainerItemIndex = 0,
		ContainerUId = new Guid("d0f0790b-45ea-4f02-b60d-7200272e0e16"),
		CreatedInOwnerSchemaUId = new Guid("bb4d6607-026b-4b27-b640-8f5c77c1e89d"),
		CreatedInPackageId = new Guid("524f976c-dc16-4613-afcd-8360daff9aa0"),
		CreatedInSchemaUId = new Guid("db59d752-4f9e-4fcf-b854-d2eaa0b1f259"),
		EntitySchemaUId = Guid.Empty,
		IsForCompensation = false,
		IsLogging = true,
		ManagerItemUId = new Guid("49eafdbb-a89e-4bdf-a29d-7f17b1670a45"),
		ModifiedInSchemaUId = new Guid("db59d752-4f9e-4fcf-b854-d2eaa0b1f259"),
		Name = @"ActualizeContactAgeSubprocess",
		Position = new Point(505, 166),
		SchemaUId = new Guid("51734939-e406-46f0-b832-0b87c66b860b"),
		SerializeToDB = true,
		Size = new Size(69, 55),
		TriggeredByEvent = false,
		UseBackgroundMode = false,
		UseLastSchemaVersion = false
	};
	InitializeActualizeContactAgeSubprocessParameters(schemaActualizeContactAgeSubprocess);
	return schemaActualizeContactAgeSubprocess;
}

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

 

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

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