public virtual void DispatchEvent(IActivitiEvent @event) { if (enabled) { eventSupport.DispatchEvent(@event); } if (@event.Type == ActivitiEventType.ENTITY_DELETED && @event is IActivitiEntityEvent) { IActivitiEntityEvent entityEvent = (IActivitiEntityEvent)@event; if (entityEvent.Entity is IProcessDefinition) { // process definition deleted event doesn't need to be dispatched to event listeners return; } } // Try getting hold of the Process definition, based on the process definition key, if a context is active ICommandContext commandContext = Context.CommandContext; if (commandContext != null) { BpmnModel bpmnModel = ExtractBpmnModelFromEvent(@event); if (bpmnModel != null) { ((ActivitiEventSupport)bpmnModel.EventSupport).DispatchEvent(@event); } } }
public override IEventLogEntryEntity GenerateEventLogEntry(CommandContext <IEventLogEntryEntity> commandContext) { IActivitiEntityEvent activitiEntityEvent = (IActivitiEntityEvent)@event; ITaskEntity task = (ITaskEntity)activitiEntityEvent.Entity; IDictionary <string, object> data = handleCommonTaskFields(task); long duration = timeStamp.Value.Ticks - task.CreateTime.Value.Ticks; PutInMapIfNotNull(data, FieldsFields.DURATION, duration); if (@event is IActivitiEntityWithVariablesEvent) { IActivitiEntityWithVariablesEvent activitiEntityWithVariablesEvent = (IActivitiEntityWithVariablesEvent)@event; if (activitiEntityWithVariablesEvent.Variables != null && activitiEntityWithVariablesEvent.Variables.Count > 0) { IDictionary <string, object> variableMap = new Dictionary <string, object>(); foreach (object variableName in activitiEntityWithVariablesEvent.Variables.Keys) { PutInMapIfNotNull(variableMap, (string)variableName, activitiEntityWithVariablesEvent.Variables[variableName.ToString()]); } if (activitiEntityWithVariablesEvent.LocalScope) { PutInMapIfNotNull(data, FieldsFields.LOCAL_VARIABLES, variableMap); } else { PutInMapIfNotNull(data, FieldsFields.VARIABLES, variableMap); } } } return(CreateEventLogEntry(task.ProcessDefinitionId, task.ProcessInstanceId, task.ExecutionId, task.Id, data)); }