public virtual IList <FlowElement> Execute(ICommandContext commandContext)
        {
            Cfg.ProcessEngineConfigurationImpl processEngineConfiguration = commandContext.ProcessEngineConfiguration;
            Interceptor.ICommandExecutor       commandExecutor            = processEngineConfiguration.CommandExecutor;

            IHistoricActivityInstanceQuery query = processEngineConfiguration.HistoryService.CreateHistoricActivityInstanceQuery()
                                                   .SetProcessInstanceId(processInstanceId);

            if (finished.HasValue)
            {
                if (finished.Value)
                {
                    query.SetFinished();
                }
                else
                {
                    query.SetUnfinished();
                }
            }

            IList <IHistoricActivityInstance> list = query.OrderByHistoricActivityInstanceStartTime().Desc().List();

            string              processDefinitionId = list[0].ProcessDefinitionId;
            Process             process             = ProcessDefinitionUtil.GetProcess(processDefinitionId);
            IList <FlowElement> elements            = new List <FlowElement>();

            foreach (var actInst in list)
            {
                elements.Add(process.GetFlowElement(actInst.ActivityId, true));
            }

            return(elements.Distinct().ToList());
        }