Получить параметры процесса с C#

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

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

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

 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 должен появиться возврат результата из нынешних интерпретируемых БП, в академии будут инструкции по запуску из клиентского и серверного кода.

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