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 エラー メッセージ ボックスにこのエラーが表示されます。

オブジェクト参照がオブジェクト インスタンスに設定されていません

4

1 に答える 1

8

フェーズにサブスクライブしInitiatedました。このフェーズのアイテムはまだチェックアウトされていないため、いいえ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")
    {
    }
}

警告のみを表示しますか、それともチェックアウトを防止しますか?

于 2012-07-27T12:26:31.277 に答える