2012-01-11 12 views

答えて

3

あなたがしたいことがあります。管理者が承認待ちを使用するかどうかを選択できるサイトごとにチェックボックスを設定します。あなたのことを確認し、ドラフト状態の下で、あなたのワークフローで

  1. :管理者は、単純承認(承認にドラフト)をスキップするか、ワークフロー(案> AA(承認または拒否)>承認)を維持するために未チェックのままにする]チェックボックスをチェックします承認待ちの状態に次の状態が割り当てられたサブミットコマンド があります。
  2. submitコマンドで、SkipOverアクションを作成します。
  3. VSでクラスライブラリプロジェクトを作成すると、出力がアセンブリになります。
  4. アセンブリでSkipActionクラスを作成します。戻るあなたのSkipOverアクションへ
  5. 、このようなセットアップタイプ文字列:[共有] タイプ文字列:YourAssembly.SkipAction、YourAssembly
  6. 後藤サイトコア>テンプレートと呼ばれるWorkflowSettingsをテンプレートに追加テンプレートセクションをSkipApprovalテンプレート
  7. を作成します。
  8. WorkflowSettingsにテンプレートフィールドを追加するには、typeの下にあるチェックボックスを選択します。
  9. テンプレートアイテムを保存して公開します。
  10. 私の場合は、セクション設定項目にSkipapprovalを追加し、新しいサイトの標準テンプレートを割り当てます。したがって、作成されたサイトごとにsectionsettingsテンプレートを追加すると、テンプレートにSkipApprovalチェックボックスが表示されます。
  11. あなた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;     
        } 
    } 
    

    }

  12. 戻るあなたのSkipOverのアクションに、この(nextstateid =承認状態IDなどのパラメータを追加し、skipapprovalチェックボックスの=項目IDをskipfieldid )テンプレートで:

パラメータ[共有]: nextstateid = {D0F57FA8-F472-4332-89D9-E429CD111E50} & skipfieldid = {XXXXXXXXXXXX-XXXXXXXX-XXXXXXXXXXXX}に権限を持つユーザーの下

  1. コンパイルとチェック「承認をスキップ」、展開、問題の管理のgotoサイトとして、サイトコアを起動、ログアウト、ログイン編集。変更を加え、[レビュー]タブ> [送信]をクリックして、承認されたため編集できることを確認します。
  2. 問題のサイトに移動し、[承認をスキップ]をオフにしてログアウトし、編集権限を持つユーザーの下でログインします。変更を加え、レビュータブ>提出に進み、アイテムがロックされていることを確認し、承認待ちです。

おかげで、

関連する問題