如何以编程方式批准Sitecore中的内容项

如何以编程方式批准Sitecore中的内容项,sitecore,sitecore6,Sitecore,Sitecore6,是否有一种方法可以通过编程方式批准Sitecore中的内容项目?以下是您可能需要执行的操作。为每个站点设置一个复选框,允许管理员选择是否使用等待批准。管理员只需选中复选框即可跳过审批(从草稿到批准),或不选中复选框即可维护工作流(草稿>AA(批准或拒绝)>批准): 在工作流中的“草稿状态”下,验证是否有“提交”命令 将下一个状态指定为等待批准 在“提交”命令下,创建跳过操作 在VS中创建类库项目,输出将是您的程序集 在程序集中创建SkipAction类 回到SkipOver操作,设置类型字符串如

是否有一种方法可以通过编程方式批准Sitecore中的内容项目?

以下是您可能需要执行的操作。为每个站点设置一个复选框,允许管理员选择是否使用等待批准。管理员只需选中复选框即可跳过审批(从草稿到批准),或不选中复选框即可维护工作流(草稿>AA(批准或拒绝)>批准):

  • 在工作流中的“草稿状态”下,验证是否有“提交”命令 将下一个状态指定为等待批准
  • 在“提交”命令下,创建跳过操作
  • 在VS中创建类库项目,输出将是您的程序集
  • 在程序集中创建SkipAction类
  • 回到SkipOver操作,设置类型字符串如下: 类型字符串[共享]:YourAssembly.SkipAction,YourAssembly
  • 转到sitecore>templates,创建SkipApproval模板
  • 将模板节添加到名为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;                
        }
    }
    
    公共类脚本
    {
    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;
    }
    }
    
    }

  • 返回SkipOver操作,添加如下参数(模板中的nextstateid=批准状态id,skipfieldid=SkipProval复选框的项目id):

  • 参数[共享]: nextstateid={D0F57FA8-F472-4332-89D9-E429CD111E50}和skipfieldid={XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXXXXXXXXXXX}

  • 编译和部署,启动sitecore,作为有问题的管理员转到站点,选中“跳过批准”,注销,在具有编辑权限的用户下登录。进行更改,转到“审阅”选项卡>“提交”,确认您仍然可以编辑,因为您已获得批准
  • 转到有问题的站点,取消选中“跳过审批”,注销,在具有编辑权限的用户下登录。改变一下,去吧