2012-08-30 56 views
1

我需要做一個自定義項目的驗證,關於工作流的最終狀態檢查了存在於特定項目的語言版本。我知道我應該繼承Sitecore.Data.Validators.StandardValidator,或Sitecore.Data.Validators.ItemValidators.WorkFlowFinalStateValidator,但什麼是我可以使用這個方法?有什麼方法可以找到這個嗎?Sitecore的自定義項驗證

更新: 我使用StandardValidator類創建了自定義驗證器,並實現了ValidatorResult方法。然後我在系統/設置/驗證規則部分註冊了這個類。然後,我爲項目設置標準值字段,這適用於常規快速欄驗證規則和驗證欄。我能夠看到錯誤。

現在我想在工作流操作規則來使用它。我需要做什麼?我選擇了新規則將其設置在項目標準值部分的工作流程規則區域中,但是當我在工作流程中執行該命令時,它只是不運行......我錯過了什麼?

回答

3

我們的團隊與StandardValidator工作爲基礎,我們正在做的,比如寫一個AlphanumericValidator,確保文本字段值的任何字段驗證,沒錯,是字母數字。

我不確定您打算如何處理語言版本,但我知道我們正在運行一些工作流操作來檢查某個Item是否有另一種語言的版本,以通知用戶當前的翻譯狀態。當某個步驟發生批准操作時,在最終之前,我們添加了一個工作流操作來啓動我們的代碼。我們實際上實現並註冊了一個事件處理程序,而不是使用驗證程序。它看起來像這樣:

public void Process(WorkflowPipelineArgs args) 
{ 
    Item dataItemCurrentLanguage = args.DataItem; 
    Item dataItemOtherLanguage = GetItemInOtherLanguage(dataItemCurrentLanguage); 

    if (dataItemOtherLanguage != null && dataItemOtherLanguage.Versions.Count > 0) 
    { 
     //Insert what you want to check for here 
     if(isGood) 
     { 
      //Do something 
     } 
     else 
     { 
      Context.ClientPage.ClientResponse.Alert("Something bad!"); 
      args.AbortPipeline(); 
     } 
    } 
} 
+0

嗯......我認爲這對我的功能也足夠了。我試圖檢查一個項目何時進入最終的工作流程狀態,然後再去那裏,他們至少有兩種不同的語言版本......這是可能的嗎?如果是這樣,你能分享更多細節嗎? –

+0

Hey M.R,AbortPipeline調用可能是您想要查看停止流程到最終狀態的內容。上面這行是你如何通知用戶信息。 在這一點上,所有你需要做的是找出你的if/else邏輯,讓你那裏。我上面提供的樣本是爲了檢查雙語網站是否有兩種語言。如果您的語言超過2種,則需要使用各種語言調用GetItem,然後檢查每種語言的版本數。然後,如果您沒有找到2個語言版本,請以消息中止。 –