2012-07-27 64 views
2

我正在爲CheckOutEventArgs添加事件處理程序,並試圖獲取結帳用戶詳細信息。以下是我的代碼。無法在添加事件處理程序後簽出組件或頁面

public void Subscribe() 
{ 
    EventSystem.Subscribe<Page, CheckOutEventArgs>(PageCheckOutWarning, 
                EventPhases.Initiated); 
    EventSystem.Subscribe<Component, CheckOutEventArgs>(ComponentCheckOutWarning, 
                 EventPhases.Initiated); 
} 

private void ComponentCheckOutWarning(Component component, 
             CheckOutEventArgs args, EventPhases phase) 
{ 
    logdetails("Checkout User-->" + component.CheckOutUser.Title.ToString()); 
} 

當我嘗試檢出組件/頁面時,在Tridion Explorer錯誤消息框中出現此錯誤。

對象引用不設置到對象

回答

8

您已經訂閱了Initiated階段,在這個PHSE項目的一個實例,不檢查出來呢,因此沒有CheckOutUser。你應該訂閱一些後期階段。

此外,我不知道你的代碼在做什麼,但你可能會考慮訂閱一些通用類,如VersionedItem,它包含組件和頁面。

再次,不知道你的想法,但如果你只想警告看看SubscribeAsync方法。這樣它會執行得更快。

如果你還是想知道在開始階段的用戶 - 您可以從會議上得到它: component.Session.User.Title

您可以訂閱VersionedItem然後在事件處理函數中執行:

private void CheckOutWarning(VersionedItem item, CheckOutEventArgs args, EventPhases phase) 
{ 
    if (item.GetType().Name == "Component" || item.GetType().Name == "Page") 
    { 
    } 
} 

你想只是警告,還是想防止CheckOut?

+1

VersionedItem也將包含模板。而不是EventPhases.Initiated使用EventPhases.Processed。還要將null檢查添加到component.CheckOutUser。 – Bappi 2012-07-27 12:33:42

+0

我想在結帳時提供頁面和組件的警告消息。如果同一個修改者簽出頁面/組件,那麼不會有問題,如果修改者和簽出用戶不相同,那麼我必須顯示警告消息。爲了實現這一點,我需要訂閱組件和頁面的權利?或者有沒有辦法在單訂閱中做到這一點?或者有沒有更好的辦法? – user1428019 2012-07-27 12:51:25

+0

VersionedItem將覆蓋頁面,組件?我可以使用subscribe()嗎?並正在VersionedItem vitem = session.GetObject(page.Id)作爲VersionedItem; vitem.Revisor.Title;它僅給出當前簽出的用戶詳細信息。對於當前簽出的用戶,我嘗試了page.CheckOutUser.Title,但兩者都給出相同的輸出 – user1428019 2012-07-27 12:58:55

相關問題