Dha*_*777 5 c# sitecore sitecore-workflow
我已经配置了一个工作流程,像往常一样以"草稿"状态开始.我已经为模板的标准值配置了工作流程.它在内容编辑器中工作得很好.(当我使用内容编辑器创建项目时,一旦我创建项目,工作流程就会被分配给项目,它的状态变为"草稿".)
但是当我在上述模板下以编程方式创建项目时,它不会分配工作流程.如何分配工作流程?如果有,请分享任何代码示例.
谢谢.
Sitecore.Data.Items.TemplateItem template = this.MasterDatabase.GetItem("/sitecore/templates/user defined/sample types");
Sitecore.Data.Items.Item parent = this.MasterDatabase.GetItem(parentId);
Sitecore.Data.Items.Item newItem;
// Create new item and retrieve it
newItem = template.CreateItemFrom("sampleName", parent);
newItem.Editing.BeginEdit();
newItem.Name = StringFormatter.CreateItemNameFromID(this.newItem);
newItem.Fields["Title"].Value = "Sample Title"
newItem.Editing.EndEdit();
Run Code Online (Sandbox Code Playgroud)
Jon*_*ins 11
我不会使用Dhanuka777的答案,因为它不使用Sitecore的工作流状态命令及其附带的有用功能,例如电子邮件生成.它还需要硬编码Guids.
以下代码的好处:
public bool UpdateWorkflow(WorkflowState newWorkflowState, Item item)
{
Assert.ArgumentNotNull(newWorkflowState, "The new WorkflowState can not be null");
Assert.ArgumentNotNull(item, "Item can not be null");
bool successful = false;
WorkflowState currentWorkflowState = GetWorkflowStateForItem(item);
if (currentWorkflowState != newWorkflowState)
{
IWorkflow workflow = GetWorkflowOfItem(item);
if (workflow != null)
{
List<WorkflowCommand> applicableWorkflowCommands = workflow.GetCommands(currentWorkflowState.StateID).ToList();
foreach (var applicableWorkflowCommand in applicableWorkflowCommands)
{
Item commandItem = _database.GetItem(applicableWorkflowCommand.CommandID);
string nextStateId = commandItem["Next state"];
if (nextStateId == newWorkflowState.StateID)
{
WorkflowResult workflowResult = workflow.Execute(applicableWorkflowCommand.CommandID, item, "", false);
successful = workflowResult.Succeeded;
break;
}
}
}
}
else
{
successful = true;
}
return successful;
}
public WorkflowState GetWorkflowStateForItem(Item item)
{
var workflow = GetWorkflowOfItem(item);
return workflow != null ? workflow.GetState(item) : null;
}
public IWorkflow GetWorkflowOfItem(Item item)
{
return _database.WorkflowProvider.GetWorkflow(item);
}
private Database _database
{
get
{
return Sitecore.Data.Database.GetDatabase("master");
}
}
Run Code Online (Sandbox Code Playgroud)
解决了标准字段的问题,
newItem.Editing.BeginEdit();
newItem.Fields["__Workflow"].Value = "{4D1F00EF-CA5D-4F36-A51E-E77E2BAE4A24}"; //Set workflow
newItem.Fields["__Workflow state"].Value = "{7F39DF46-B4B9-4D08-A0D4-32DE6FD643D1}"; //Set workflow state to Unposted.
newClassified.Editing.EndEdit();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6606 次 |
| 最近记录: |