如何以编程方式批准Sitecore中的内容项
是否有一种方法可以通过编程方式批准Sitecore中的内容项目?以下是您可能需要执行的操作。为每个站点设置一个复选框,允许管理员选择是否使用等待批准。管理员只需选中复选框即可跳过审批(从草稿到批准),或不选中复选框即可维护工作流(草稿>AA(批准或拒绝)>批准):如何以编程方式批准Sitecore中的内容项,sitecore,sitecore6,Sitecore,Sitecore6,是否有一种方法可以通过编程方式批准Sitecore中的内容项目?以下是您可能需要执行的操作。为每个站点设置一个复选框,允许管理员选择是否使用等待批准。管理员只需选中复选框即可跳过审批(从草稿到批准),或不选中复选框即可维护工作流(草稿>AA(批准或拒绝)>批准): 在工作流中的“草稿状态”下,验证是否有“提交”命令 将下一个状态指定为等待批准 在“提交”命令下,创建跳过操作 在VS中创建类库项目,输出将是您的程序集 在程序集中创建SkipAction类 回到SkipOver操作,设置类型字符串如
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;
}
}
公共类脚本
{
bool issitesettingsreatched=false;
///
///此方法有助于从设置>分段设置中获取skipapproval设置
///
///
///
///
受保护的布尔GetSkipSetting(项,字符串字段ID)
{
布尔结果=假;
if(item.ID.Equals(null)| | item.ID.Equals(ItemIDs.ContentRoot)| | item.ID.Equals(ItemIDs.RootID))
{
结果=假;
}
如果(isSkipApprovalChecked(项目,字段ID))
{
结果=真;
}
如果(!isSkipApprovalChecked(项目,字段ID))
{
结果=假;
}
如果(!issiteSettingsReach)
{
结果=GetSkipSetting(item.Parent,fieldId);
}
返回结果;
}
///
///此方法在调用skipaction时初始化
///
///
公共作废进程(WorkflowPipelineArgs args)
{
var contentItem=args.DataItem;
var actionItem=args.ProcessorItem.InnerItem;
var parameters=WebUtil.ParseUrlParameters(actionItem[“parameters”]);
var nextStateId=参数[“nextStateId”];
var skipFieldId=参数[“skipFieldId”];
if(nextStateId.IsNullOrEmpty()||
SkipFieldDid.IsNullOrEmpty())
返回;
bool skip=getskipset(contentItem,skipFieldDid);
Sitecore.Data.Database web=Sitecore.Configuration.Factory.GetDatabase(“web”);
Sitecore.Data.Database production=Sitecore.Configuration.Factory.GetDatabase(“production”);
如果(跳过)
{
contentItem.PerformTransition(nextStateId,“自动跳过”);
使用(新Sitecore.SecurityModel.SecurityDisabler())
{
publishTo(web、contentItem);
出版(生产、内容项目);
}
contentItem.Locking.Unlock();
args.AbortPipeline();
}
}
///
///此方法用于通过参数发布到环境
///
///
///
私有void publishTo(Sitecore.Data.Database targetToPublish,Item)
{
Sitecore.Data.Database sourceDB=Sitecore.Configuration.Factory.GetDatabase(“master”);
////设置发布选项
Sitecore.Publishing.PublishOptions myOptions=新建Sitecore.Publishing.PublishOptions(
sourceDB,
直截了当的,
Sitecore.Publishing.PublishMode.Smart,
项目.语文,
日期时间(现在);
myOptions.RootItem=项目;
myOptions.Deep=false;
Sitecore.Publishing.Publisher Publisher=新建Sitecore.Publishing.Publisher(myOptions);
Sitecore.Jobs.Job myPublishJob=publisher.PublishAsync();
myPublishJob.Start();
}
///
///此方法检查设置>章节设置中的实际跳过审批字段
///
///
///
///
公共布尔值isSkipApprovalChecked(Sitecore.Data.Items.Item项,字符串字段ID)
{
if(项目.子项)
{
Sitecore.Data.Items.Item settingsItem=Item.Axes.GetChild(“设置”);
if(settingsItem==null)
{
返回false;
}
其他的
{
IssiteSettingsReach=真;
Sitecore.Data.Items.Item sectionsettingsItem=settingsItem.Axes.GetChild(“SectionSettings”);
如果(sectionsettingsItem.DisplayName==“SectionSettings”&§ionsettingsItem[fieldId]==“1”)
{
返回true;
}
其他的
{
返回false;
}
}
}
返回false;
}
}
}