public override void Execute(IExecutionEntity execution) { ICommandContext commandContext = Context.CommandContext; string eventSubscriptionName; if (messageEventName is object) { eventSubscriptionName = messageEventName; } else { IExpression expressionObject = commandContext.ProcessEngineConfiguration.ExpressionManager.CreateExpression(messageExpression); eventSubscriptionName = expressionObject.GetValue(execution).ToString(); } IEventSubscriptionEntityManager eventSubscriptionEntityManager = commandContext.EventSubscriptionEntityManager; IList <IMessageEventSubscriptionEntity> subscriptionEntities = eventSubscriptionEntityManager.FindMessageEventSubscriptionsByProcessInstanceAndEventName(execution.ProcessInstanceId, eventSubscriptionName); foreach (IMessageEventSubscriptionEntity messageEventSubscriptionEntity in subscriptionEntities) { Context.ProcessEngineConfiguration.EventDispatcher.DispatchEvent(ActivitiEventBuilder.CreateMessageEvent(ActivitiEventType.ACTIVITY_MESSAGE_RECEIVED, messageEventSubscriptionEntity.ActivityId, eventSubscriptionName, null, messageEventSubscriptionEntity.ExecutionId, messageEventSubscriptionEntity.ProcessInstanceId, messageEventSubscriptionEntity.ProcessDefinitionId)); eventSubscriptionEntityManager.EventReceived(messageEventSubscriptionEntity, null, false); } Context.Agenda.PlanTakeOutgoingSequenceFlowsOperation(execution, true); }
public override void OnEvent(IActivitiEvent @event) { if (IsValidEvent(@event)) { if (@event.ProcessInstanceId is null) { throw new ActivitiIllegalArgumentException("Cannot throw process-instance scoped message, since the dispatched event is not part of an ongoing process instance"); } IEventSubscriptionEntityManager eventSubscriptionEntityManager = Context.CommandContext.EventSubscriptionEntityManager; IList <IMessageEventSubscriptionEntity> subscriptionEntities = eventSubscriptionEntityManager.FindMessageEventSubscriptionsByProcessInstanceAndEventName(@event.ProcessInstanceId, messageName); foreach (IEventSubscriptionEntity messageEventSubscriptionEntity in subscriptionEntities) { eventSubscriptionEntityManager.EventReceived(messageEventSubscriptionEntity, null, false); } } }