protected internal virtual HistoryEvent CreateHistoricIncidentEvt(IIncident incident, HistoryEventTypes eventType)
        {
            // create event
            Event.HistoricIncidentEntity evt = LoadIncidentEvent(incident);
            // initialize
            InitHistoricIncidentEvent(evt, incident, eventType);

            if (HistoryEventTypes.IncidentCreate != eventType)
            {
                evt.EndTime = ClockUtil.CurrentTime;
            }

            return(evt);
        }
        protected internal virtual void InitHistoricIncidentEvent(Event.HistoricIncidentEntity evt, IIncident incident, IHistoryEventType eventType)
        {
            // init properties
            evt.Id = incident.Id;
            evt.ProcessDefinitionId = incident.ProcessDefinitionId;
            evt.ProcessInstanceId   = incident.ProcessInstanceId;
            evt.ExecutionId         = incident.ExecutionId;
            evt.CreateTime          = incident.IncidentTimestamp;
            evt.IncidentType        = incident.IncidentType;
            evt.ActivityId          = incident.ActivityId;
            evt.CauseIncidentId     = incident.CauseIncidentId;
            evt.RootCauseIncidentId = incident.RootCauseIncidentId;
            evt.Configuration       = incident.Configuration;
            evt.IncidentMessage     = incident.IncidentMessage;
            evt.TenantId            = incident.TenantId;
            evt.JobDefinitionId     = incident.JobDefinitionId;

            IncidentEntity          incidentEntity = (IncidentEntity)incident;
            ProcessDefinitionEntity definition     = incidentEntity.ProcessDefinition;

            if (definition != null)
            {
                evt.ProcessDefinitionKey = definition.Key;
            }

            // init event type
            evt.EventType = eventType.EventName;

            // init state
            IIncidentState incidentState = IncidentStateFields.Deleted;

            if (HistoryEventTypes.IncidentDelete == eventType)
            {
                incidentState = IncidentStateFields.Deleted;
            }
            else if (HistoryEventTypes.IncidentResolve.Equals(eventType))
            {
                incidentState = IncidentStateFields.Resolved;
            }
            evt.IncidentState = incidentState.StateCode;
        }