Добрый день!
Подскажите, пожалуйста, как в задании-сценарии сгенерировать сообщение бизнес процесса.
Нравится
Интересный вопрос!
Генерация сообщения — это класс 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, плюс условным потоком переходить или нет в элемент, в зависимости от логики в коде.
Зверев Александр,
Спасибо за подробный ответ. Очень познавательно и полезно это знать.
Но не уверен, что на это стоит полагаться в разработке своей логики, с учётом отхода от компилируемых процессов в пользу интерпретируемых вообще.