本文介绍了如何以编程方式批准Sitecore中的内容项的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
是否有办法以编程方式批准Sitecore中的内容项目?
推荐答案
您可能需要这样做。为每个站点设置一个复选框,允许管理员选择是否要使用等待审批。管理员只需选中一个复选框即可跳过审批(草案为已批准)或不选中以维护工作流(草案>AA(批准或拒绝)>已批准):
- 在您的工作流中,在草稿状态下,验证您是否有提交命令将下一个状态指定为等待审批。
- 在提交命令下创建跳过操作。
- 在VS中创建类库项目,输出将是您的程序集。
- 在程序集中创建SkipAction类。
- 返回到您的SkipOver操作,安装类型字符串如下:类型字符串[共享]:YourAssembly.SkipAction,YourAssembly
- 转到Sitecore>模板,创建SkipApproval模板
- 将模板节添加到名为WorkflowSettings的模板。
- 将模板字段添加到WorkflowSettings,选中"类型"下的复选框。
- 保存并发布模板项。
- 在我的例子中,我们将SkipApproval添加到sectionSettings项中,然后将其分配给新站点的OUT标准模板。因此,对于创建的每个站点,我们添加sectionSettings模板,该模板将具有SkipApproval复选框。
将此代码添加到SkipAction类:
public class SkipAction { bool isSiteSettingsReached = false; /// <summary> /// This method facilitates grabbing of the skipapproval setting from setting>sectionsettings /// </summary> /// <param name="item"></param> /// <param name="fieldId"></param> /// <returns></returns> protected bool GetSkipSetting(Item item, string fieldId) { bool result = false; if (item.ID.Equals(null) || item.ID.Equals(ItemIDs.ContentRoot) || item.ID.Equals(ItemIDs.RootID)) { result=false; } if (isSkipApprovalChecked(item, fieldId)) { result = true; } if (!isSkipApprovalChecked(item, fieldId)) { result = false; } if (!isSiteSettingsReached) { result=GetSkipSetting(item.Parent, fieldId); } return result; } /// <summary> /// This method is initialized when skipaction is called /// </summary> /// <param name="args"></param> public void Process(WorkflowPipelineArgs args) { var contentItem = args.DataItem; var actionItem = args.ProcessorItem.InnerItem; var parameters = WebUtil.ParseUrlParameters(actionItem["parameters"]); var nextStateId = parameters["nextstateid"]; var skipFieldId = parameters["skipfieldid"]; if(nextStateId.IsNullOrEmpty() || skipFieldId.IsNullOrEmpty()) return; bool skip = GetSkipSetting(contentItem, skipFieldId); Sitecore.Data.Database web = Sitecore.Configuration.Factory.GetDatabase("web"); Sitecore.Data.Database production = Sitecore.Configuration.Factory.GetDatabase("production"); if (skip) { contentItem.PerformTransition(nextStateId, "auto skip"); using (new Sitecore.SecurityModel.SecurityDisabler()) { publishTo(web, contentItem); publishTo(production, contentItem); } contentItem.Locking.Unlock(); args.AbortPipeline(); } } /// <summary> /// this method is used to publish to environ by param /// </summary> /// <param name="targetToPublish"></param> /// <param name="item"></param> private void publishTo(Sitecore.Data.Database targetToPublish, Item item) { Sitecore.Data.Database sourceDB = Sitecore.Configuration.Factory.GetDatabase("master"); //// set publish options Sitecore.Publishing.PublishOptions myOptions = new Sitecore.Publishing.PublishOptions( sourceDB, targetToPublish, Sitecore.Publishing.PublishMode.Smart, item.Language, DateTime.Now); myOptions.RootItem = item; myOptions.Deep = false; Sitecore.Publishing.Publisher publisher = new Sitecore.Publishing.Publisher(myOptions); Sitecore.Jobs.Job myPublishJob = publisher.PublishAsync(); myPublishJob.Start(); } /// <summary> /// This method check the actual skip approval field in settings>sectionsettings /// </summary> /// <param name="item"></param> /// <param name="fieldId"></param> /// <returns></returns> public bool isSkipApprovalChecked(Sitecore.Data.Items.Item item, string fieldId) { if (item.HasChildren) { Sitecore.Data.Items.Item settingsItem = item.Axes.GetChild("Settings"); if (settingsItem == null) { return false; } else { isSiteSettingsReached = true; Sitecore.Data.Items.Item sectionsettingsItem = settingsItem.Axes.GetChild("SectionSettings"); if (sectionsettingsItem.DisplayName == "SectionSettings" && sectionsettingsItem[fieldId] == "1") { return true; } else { return false; } } } return false; } }
}
返回到您的SkipOver操作,添加如下参数(nextstateid=模板中的Approval State id,skipfielid=SkipApproval的项目ID):
参数[共享]:nextstateid={D0F57FA8-F472-4332-89D9-E429CD111E50}&;skipfieldid={XXXXXXXX-XXXX-XXXXXXXXXXXX}
- 编译和部署,启动Sitecore,作为有问题的管理员转到站点,选中"跳过审批",注销,在有编辑权限的用户下登录。进行更改,转到"审阅"选项卡>"提交",验证您是否仍然可以编辑,因为您已获得批准。
- 转到有问题的站点,取消选中"跳过审批",注销,在具有编辑权限的用户下登录。进行更改,转到"审阅"选项卡>"提交",验证项目是否已锁定并等待审批。
谢谢,c
这篇关于如何以编程方式批准Sitecore中的内容项的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!