4

「ページ」リストの「ItemAdded」イベントでアクティブ化されるイベント レシーバーを作成しました。コードは正常に実行されますが、私の問題はこれです。Sub ItemAdded の呼び出し中に、現在のリスト アイテム (この場合は aspx ページ) に属するフィールドの値を変更したいと考えています。

アイデアは、イベント レシーバーが構成する別の値になるように「タイトル」フィールドを構成できるということです。ユーザーが編集モードでページを表示するまでに、新しいタイトルがページに保存されます。これが私の現在の試みです:

Public Overrides Sub ItemAdded(ByVal properties As Microsoft.SharePoint.SPItemEventProperties)

 Dim newItem As SPListItem = properties.ListItem
 Dim currentSiteTitle As String = properties.OpenWeb().Title

 UpdateItemTitle(newItem, currentSiteTitle)
 newItem.Update()
 'newItem.SystemUpdate()

End Sub

ご覧のとおり、Update() と SystemUpdate() の両方を試しましたが、どちらの場合も、ユーザーがページをチェックインしようとすると、ページが外部で変更されたというメッセージが表示されます。さらに、ページを表示すると、タイトル フィールドの値は変更されていません。

私がやろうとしていることは可能ですか、それとももっと良い方法がありますか?

乾杯。ジャス。

4

4 に答える 4

3

properties.afterproperties を変更すると、保存の競合が回避されます。afterproperties はハッシュテーブルですが、次のようにアクセスできることに注意してください。

properties.AfterProperties["タイトル"] = "私の新しいタイトル";

于 2009-09-09T11:02:38.987 に答える
2

ItemAdd ed名前がすべてを物語っています。アイテムが追加された後に発生するのは非同期イベントであるため、カルスの問題です。理由がない限り、ItemAdding イベントをフックすることをお勧めします。

非同期と同期の詳細については、リンクを参照してください

于 2009-08-10T13:30:30.590 に答える
0

上記に続いて、ディスカッショングループで作業しているときに、リストアイテムのフィールドを変更できるのは、新しい値をプロパティに割り当てることができるItemUpdatingメソッドだけであることがわかりました。AfterPropertiesハッシュ対応前述のようにアイテム名に。

残念ながら、これは新しい返信がディスカッションに追加されたときに自動的に実行されたようには見えませんでした(おそらく他のリスト関連のシナリオにあります)が、ItemAddedメソッドにコードを挿入すると(ItemAddingもトリガーされませんでした)、それが見つかりました実行されていましたが、そこからアイテムを変更できなかったため、itemAdded:に次のようなものが表示されました。

  public override void ItemAdded(SPItemEventProperties properties)
    {
        SPListItem item = properties.ListItem;
        item.Update();
    }

この結果、フィールドは更新されますが、表示される前には更新されないため、ユーザーが出力ページに移動すると、リストは以前と同じように表示されますが、表示を変更したり、返信の詳細を確認したりすると、次のようになります。想定どおりに実際に変更されていることがわかります。

返信のほとんどがメールで届くと思っているので、これで十分です。

于 2009-11-12T17:27:49.100 に答える
0

これを実現する最善の方法は、ItemAdd ingイベントを使用することです。これにより、データベースに保存する前にタイトルの値を変更できます。ItemAdded でそれらを変更しようとすることは可能ですが、発生している頭痛の原因になります。

ItemAddingを試しましたか?

于 2009-08-10T13:30:52.523 に答える