有沒有一種方法可以以編程方式批准Sitecore中的內容項?如何以編程方式批准Sitecore中的內容項
3
A
回答
3
以下是您可能想要做的事情。爲每個網站設置一個複選框,允許管理員選擇是否要使用等待批准。管理員將只選中一個複選框來跳過認證(草案批准)或離開選中維護工作流程(草案> AA(批准或拒絕)>批准):
- 在您的工作流程,草案狀態下驗證您有一個提交命令 ,下一個狀態分配給等待批准。
- 在提交命令下創建一個SkipOver操作。
- 在VS中創建類庫項目,輸出將是你的程序集。
- 在程序集中創建一個SkipAction類。
- 回到你的SkipOver行動,安裝類型的字符串是這樣的: 類型爲String [分享]:YourAssembly.SkipAction,YourAssembly
- 轉到Sitecore的>模板,創建SkipApproval模板
- 添加模板部分模板稱爲WorkflowSettings。
- 將模板字段添加到WorkflowSettings,選擇類型下的複選框。
- 保存併發布模板項目。
- 在我的情況下,我們將Skipapproval添加到一個分區項目,然後分配給新站點的標準模板。因此,對於每個創建的網站,我們都添加了版塊設置模板,並且模板將包含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 =審批狀態ID,skipfieldid = skipapproval複選框的項目ID在模板中):
參數[共享]: nextstateid = {D0F57FA8-F472-4332-89D9-E429CD111E50} & skipfieldid = {XXXXXXXXXXXX-XXXXXXXX-XXXXXXXXXXXX}
- 編譯和部署,啓動Sitecore的,因爲有關管理員轉到網站,勾選「跳過認證」,註銷,登錄用戶在使用權編輯。進行更改,轉到審覈選項卡>提交,確認您仍然可以編輯,因爲您已被批准。
- 轉到有問題的網站,取消選中「跳過審批」,註銷,在有權編輯的用戶下登錄。進行更改,轉到審閱選項卡>提交,確認該項目已鎖定並等待批准。
感謝,C
0
這裏是一個博客,(相當描述性)告訴您如何更改工作流狀態的項目編程: http://www.cognifide.com/blogs/sitecore/changing-workflow-state-of-sitecore-items-programmatically/ 希望這有助於!
相關問題
- 1. Sitecore以編程方式傳輸項目
- 2. Sitecore內容編輯器 - 使發佈按鈕「批准和發佈」?
- 3. 創建,批准,編輯,批准網站內容模式
- 4. 如何以編程方式恢復子Sitecore項目?
- 5. Sitecore的編程方式隱藏項目
- 6. 如何以編程方式在android中編輯文件內容
- 7. Sitecore的:編程方式觸發的相關內容
- 8. 如何以編程方式設置/編輯webview的內容
- 9. 如何以編程方式更新sitecore中的引用?
- 10. 如何以編程方式向SiteCore中的GeneralField添加值
- 11. 如何以編程方式更改Eclipse中的幫助內容?
- 12. 如何以編程方式操縱Scala中文件的內容
- 13. Sitecore:以編程方式將工作流程分配給項目
- 14. Sitecore更新NameValueList以編程方式
- 15. 以編程方式觸發Sitecore事件
- 16. 如何以編程方式編寫節點內容模塊
- 17. 如何在sitecore中以編程方式更改「MediaLinkPrefix」?
- 18. 如何以編程方式選擇一個sitecore內容樹項目並將其展開?
- 19. 如何以編程方式填充Sitecore項目(添加項目和字段)?
- 20. Sitecore SPEAK UI以編程方式設置ComboBox的選定項目
- 21. 以編程方式更新dokuwiki頁面內容的選項
- 22. 如何以編程方式從Content Delivery Sever在SiteCore 8.0中發佈項目?
- 23. 如何以編程方式設置Viewbox的內容?
- 24. 如何以編程方式將ContentControl的內容綁定到DataContext?
- 25. 如何以編程方式讀取apk文件的內容?
- 26. 如何以編程方式刪除UITextField的內容?
- 27. 如何以編程方式放大/縮小WebView的內容?
- 28. 如何以編程方式列出Android APK文件的內容?
- 29. 如何在Sitecore內容編輯器中選擇項目
- 30. 在Jquery中以編程方式更改選項卡和選項卡的內容
您的意思是批准工作流程中的內容移至下一個狀態? – 2012-01-19 14:08:56