private void ExecuteCommand(Guid id, string commandName, DocumentModel document)
        {
            var currentUser = CurrentUserSettings.GetCurrentUser().ToString();

            if (commandName.Equals("SetState", StringComparison.InvariantCultureIgnoreCase))
            {
                if (string.IsNullOrEmpty(document.StateNameToSet))
                {
                    return;
                }

                var setStateParams = new SetStateParams(id, document.StateNameToSet)
                {
                    IdentityId             = currentUser,
                    ImpersonatedIdentityId = currentUser
                }.AddTemporaryParameter("Comment", document.Comment);

                WorkflowInit.Runtime.SetState(setStateParams);

                return;
            }

            var commands = WorkflowInit.Runtime.GetAvailableCommands(id, currentUser);

            var command =
                commands.FirstOrDefault(
                    c => c.CommandName.Equals(commandName, StringComparison.CurrentCultureIgnoreCase));

            if (command == null)
            {
                return;
            }

            if (command.Parameters.Count(p => p.ParameterName == "Comment") == 1)
            {
                command.Parameters.Single(p => p.ParameterName == "Comment").Value = document.Comment ?? string.Empty;
            }

            WorkflowInit.Runtime.ExecuteCommand(command, currentUser, currentUser);
        }
        private void ExecuteCommand(Guid id, string commandName, DocumentModel document)
        {
            var currentUser = CurrentUserSettings.GetCurrentUser(HttpContext).ToString();

            if (commandName.Equals("SetState", StringComparison.InvariantCultureIgnoreCase))
            {
                if (string.IsNullOrEmpty(document.StateNameToSet))
                {
                    return;
                }

                var setStateParams = new SetStateParams(id, document.StateNameToSet)
                {
                    IdentityId             = currentUser,
                    ImpersonatedIdentityId = currentUser
                }.AddTemporaryParameter("Comment", document.Comment);

                WorkflowInit.Runtime.SetState(setStateParams);

                return;
            }
            else if (commandName.Equals("Resume", StringComparison.InvariantCultureIgnoreCase))
            {
                if (string.IsNullOrEmpty(document.StateNameToSet))
                {
                    return;
                }
                var pi = WorkflowInit.Runtime.GetProcessInstanceAndFillProcessParameters(id);

                var activity = pi.ProcessScheme.Activities.FirstOrDefault(a => a.IsForSetState && a.State.Equals(document.StateNameToSet, StringComparison.OrdinalIgnoreCase));

                if (activity == null)
                {
                    return;
                }
                var resumeParams = new ResumeParams(id, activity.Name)
                {
                    IdentityId             = currentUser,
                    ImpersonatedIdentityId = currentUser
                }.AddTemporaryParameter("Comment", document.Comment);

                WorkflowInit.Runtime.Resume(resumeParams);
                return;
            }

            var commands = WorkflowInit.Runtime.GetAvailableCommands(id, currentUser);

            var command =
                commands.FirstOrDefault(
                    c => c.CommandName.Equals(commandName, StringComparison.CurrentCultureIgnoreCase));

            if (command == null)
            {
                return;
            }

            if (command.Parameters.Count(p => p.ParameterName == "Comment") == 1)
            {
                command.Parameters.Single(p => p.ParameterName == "Comment").Value = document.Comment ?? string.Empty;
            }

            WorkflowInit.Runtime.ExecuteCommand(command, currentUser, currentUser);
        }