コード例 #1
0
        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);
                }
            }
        }
コード例 #2
0
        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));
        }