2012-11-28 19 views
4

當某個條件存在時,我需要停止發佈頁面,例如,如果頁面名稱包含使用事件系統的「one」。另外,其他頁面應該繼續發佈。如何在創建新的PublisherException時獲取Tridion LocalizableMessage的resourceName?

我想使用PublisherException而不是泛型異常。

問題是我不知道LocalizableMessage的resourceName。有任何想法嗎?

if (item.Title.ToString().Contains("one")) 
{ 
    Localization.LocalizableMessage errResource = new Localization.LocalizableMessage("error"); 
    throw new PublisherException(errResource, new Exception("Can't get there from here!")); 
} 
+1

除了LocalizableMessage的問題,是不是一個自定義解析器更適合這個任務? – Puntero

+0

我想你說我可以從PublishTransaction刪除項目,如果它符合條件?自定義解析器的錯誤消息是否可能出現在發佈隊列中?任何其他想法將反饋傳遞給用戶該項目不公佈?在這個例子中,我試圖將頁面發送到外部Web服務,並且當外部服務無法發佈時。 – robrtc

+0

您使用R5.3嗎?我看到你在下面的評論中提到 – GourmetCMS

回答

7

事件系統可以停止發佈,儘管如此,當你拋出一個異常時,它會停止整個事務。

和Puntero一樣,如果你想從Publish Transaction中刪除一個項目,那就是Custom Resolver進來的地方。從這裏你不能回傳給Publish Transaction,但你可以訪問Tridion Logger(eventlog) :

Tridion.Logging.Logger.Write("your message string", "MyResolver", LoggingCategory.General, TraceEventType.Information); 

至於在事件系統的LocalizableMessage,你應該能夠做到以下幾點:

throw new PublisherException(new LocalizableMessage(Properties.Resources.ResourceManager, "PagePublishErrorMessage")); 

當資源名稱指向你有一個字符串資源的名稱您項目。

+2

感謝您使用Tridion記錄儀的信息和建議。我可能會使用SignalR GUI擴展將信息傳遞給MessageCenter中的用戶。但是,我仍然更喜歡5.3中的OnRenderPre事件,並使用異常來使單個項失敗,並在發佈隊列中發出異常消息。 – robrtc

3

我@Puntero同意,如果您希望其他頁面中發佈操作穿過去,你應該使用一個解析器,而不是事件處理程序。

我試圖提出警告,提醒用戶一個項目沒有解決,但失敗。但是,在這裏可能會有一些很好的提示/想法:Raising a 「warning」 status during SDL Tridion 2011 publishing

最後,我可以設置「允許X失敗」的唯一方法,然後檢查模板,然後提出那裏的錯誤。這將被視爲渲染失敗,並允許發佈者轉到發佈事務中的下一個項目。

至於消息?您想要顯示什麼信息?

+1

非常有趣!如果我理解正確,您在自定義解析器中引發異常,然後在模板中檢查該異常?模板中的支票是什麼樣的? – robrtc

+0

那麼這是我試圖做的,但不能沒有誤用AppData或其他東西。所以我們只是最終把錯誤拋到了模板中。 – GourmetCMS

相關問題