В первом бизнес-процессе в элементе Задание-сценарий вызываю другой бизнес-процесс.
Во втором бизнес-процессе выполняется логика и заполняются два исходящих параметра.
Как вычитать эти два параметр в первом бизнес-процессе
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 второго процесса }
Прошу подсказать как можно вычитать параметры.
Спасибо.
Нравится
Сразу после запуска точно нельзя, он ведь ещё не отработал. А если делать средствами БП, в одном элементе запустить подпроцесс, далее элементе «Формула» или в условии перехода обратиться к его параметру, как тут:
Для получения:
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.
Александр, именно. Нужно получить параметры с вызываемого процесса.
Исходя из Вашего комментария понимаю, что забрать обратно параметры нельзя в интерпретируемых процессах?
Сразу после запуска точно нельзя, он ведь ещё не отработал. А если делать средствами БП, в одном элементе запустить подпроцесс, далее элементе «Формула» или в условии перехода обратиться к его параметру, как тут:
У меня дело в том, что через подпроцесс должна пройти коллекция записей. Коллекцию я получаю в Задании-сценарий.
Придётся менять архитектуру логики.
Александр, спасибо за отклик.
В новых версиях усовершенствовали работу подпроцессов с коллекциями, сделали запуск отдельного подпроцесса по каждому её элементу. Подробнее см. в справке.
В 7.17.1 должен появиться возврат результата из нынешних интерпретируемых БП, в академии будут инструкции по запуску из клиентского и серверного кода.