private void CommandDatasourceItem(string message, Item componentItem, CommandRenderingDatasourceOptions options) { var workflow = componentItem.State.GetWorkflow(); if (!ItemInExpectedWorkflowState(componentItem, workflow, options)) { return; } workflow.Execute(options.CommandId.ToString(), componentItem, message, false); }
protected virtual CommandRenderingDatasourceOptions BuildOptions(NameValueCollection parameters) { var options = new CommandRenderingDatasourceOptions(); ComponentWorkflowAction type; options.Type = Enum.TryParse(parameters["type"], true, out type) ? type : ComponentWorkflowAction.Approve; if (string.IsNullOrWhiteSpace(parameters["commandid"]) || !ID.IsID(parameters["commandid"])) { switch (options.Type) { case ComponentWorkflowAction.Submit: options.CommandId = WorkflowIDs.SubmitCommand; break; case ComponentWorkflowAction.Reject: options.CommandId = WorkflowIDs.RejectCommand; break; case ComponentWorkflowAction.Approve: options.CommandId = WorkflowIDs.ApproveCommand; break; default: options.CommandId = ID.Null; break; } } else { options.CommandId = ID.Parse(parameters["commandid"]); } if (!string.IsNullOrWhiteSpace(parameters["workflowid"]) && ID.IsID(parameters["workflowid"])) { options.WorkflowId = ID.Parse(parameters["workflowid"]); } else { options.WorkflowId = WorkflowIDs.RelatedItemWorkflow; } return(options); }
protected virtual bool ItemInExpectedWorkflowState(Item componentItem, IWorkflow workflow, CommandRenderingDatasourceOptions options) { if (workflow == null || workflow.WorkflowID != options.WorkflowId.ToString()) { return(false); } var workflowState = componentItem.State.GetWorkflowState(); if (workflowState == null || workflowState.FinalState) { return(false); } var commandItem = componentItem.Database.GetItem(options.CommandId); return(commandItem != null && commandItem.Parent.ParentID == options.WorkflowId); }