Вопрос

Генерация сообщения БП из задания-сценария

Добрый день!

Подскажите, пожалуйста, как в задании-сценарии сгенерировать сообщение бизнес процесса.

Нравится

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

Интересный вопрос!

 

Генерация сообщения — это класс 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, плюс условным потоком переходить или нет в элемент, в зависимости от логики в коде.

Зверев Александр,

Спасибо за подробный ответ. Очень познавательно и полезно это знать.

Но не уверен, что на это стоит полагаться в разработке своей логики, с учётом отхода от компилируемых процессов в пользу интерпретируемых вообще.

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