Добрый день!
Подскажите, пожалуйста, как в задании-сценарии сгенерировать сообщение бизнес процесса.
Нравится
Интересный вопрос!
Генерация сообщения — это класс ProcessSchemaIntermediateThrowMessageEvent в ядре. Если взять любой компилируемый процесс и открыть его исходный код, будет видна автоматически сгенерированная логика, как с ним взаимодействуют. Например, в БП SendEmailToContactProcess есть такое сообщение:
В коде это соответствует (фрагменты):
ProcessSchemaIntermediateThrowMessageEvent sendemailintermediatethrowmessageevent = CreateSendEmailIntermediateThrowMessageEventIntermediateThrowMessageEvent(); //... protected virtual ProcessSchemaIntermediateThrowMessageEvent CreateSendEmailIntermediateThrowMessageEventIntermediateThrowMessageEvent() { ProcessSchemaIntermediateThrowMessageEvent schemaThrowMessageEvent = new ProcessSchemaIntermediateThrowMessageEvent(this) { UId = new Guid("06d86512-8024-45a7-8c47-97339c880a62"), ContainerItemIndex = 0, ContainerUId = new Guid("dbae19cb-4797-46a7-8d5e-7849ed4640f5"), CreatedInOwnerSchemaUId = new Guid("bb4d6607-026b-4b27-b640-8f5c77c1e89d"), CreatedInPackageId = new Guid("66e9e705-64b4-4dda-925e-d1e05a389eb6"), CreatedInSchemaUId = new Guid("44589e2b-11fc-4e7e-b97f-9bd6d8f1dbd2"), DragGroupName = @"Event", EntitySchemaUId = Guid.Empty, ImageList = null, ImageName = null, IsLogging = false, ManagerItemUId = new Guid("7b8b16fb-d4c6-4e8b-a519-988250ac636f"), Message = @"SendEmail", ModifiedInSchemaUId = new Guid("44589e2b-11fc-4e7e-b97f-9bd6d8f1dbd2"), Name = @"SendEmailIntermediateThrowMessageEvent", OwnerSchemaManagerName = @"ProcessSchemaManager", Position = new Point(232, 156), SerializeToDB = false, Size = new Size(0, 0), ThrowToBase = false, UseBackgroundMode = false }; return schemaThrowMessageEvent; } //... private ProcessThrowMessageEvent _sendEmailIntermediateThrowMessageEvent; //... public ProcessThrowMessageEvent SendEmailIntermediateThrowMessageEvent { get { return _sendEmailIntermediateThrowMessageEvent ?? (_sendEmailIntermediateThrowMessageEvent = new ProcessThrowMessageEvent() { UId = Guid.NewGuid(), Owner = this, Type = "ProcessSchemaIntermediateThrowMessageEvent", Name = "SendEmailIntermediateThrowMessageEvent", SchemaElementUId = new Guid("06d86512-8024-45a7-8c47-97339c880a62"), CreatedInSchemaUId = InternalSchemaUId, ExecutedEventHandler = OnExecuted, Message = "SendEmail", }); } }
Также там есть сгенерированные функции, где инициируется процесс, создаются его связи между элементами, включая этот.
Возможно, в Вашем случае выйдет программно генерировать аналогичные объекты и добиться нужного поведения.
Или же не генерировать, а создать элемент обычным образом в дизайнере, а программно только заполнять свойство Message, плюс условным потоком переходить или нет в элемент, в зависимости от логики в коде.
Зверев Александр,
Спасибо за подробный ответ. Очень познавательно и полезно это знать.
Но не уверен, что на это стоит полагаться в разработке своей логики, с учётом отхода от компилируемых процессов в пользу интерпретируемых вообще.