1

SharePoint2007で実行されているアプリケーションのようなショッピングカートがあります。

リストアイテムに対して非常に標準的な更新手順を実行しています。

            using (SPWeb web = site.OpenWeb())
            {
                web.AllowUnsafeUpdates = true;
                SPList list = web.Lists["Quotes"];
                SPListItem item = list.GetItemById(_id);
                item["Title"] = _quotename;
                item["RecipientName"] = _quotename;
                item["RecipientEmail"] = recipientemail;
                item["IsActive"] = true;
                item.Update();
                site.Dispose();
            }

このアイテムは正しく更新されますが、システムアカウントによって変更されたように一時的に表示されます。少し待ってページを更新すると、CurrentUserによって変更されたものとして再び表示されます。

これは問題です。Pag​​e_Loadで、アクティブとしてマークされ、CurrentUserによって変更済みとしてリストされているアイテムを取得しているためです。これは、ユーザーがリストを更新すると、PostBackが終了すると、アクティブなアイテムがないことを示します。

それはweb.AllowUnsafeUpdatesですか?以前にセキュリティエラーが発生していたため、これが必要です。

私は何が欠けていますか?

4

2 に答える 2

1

まず、AllowUnsafeUpdatesではありません。これにより、コードからアイテムを変更できるようになります。

アプリケーションのフローを詳しく理解しないと、何が起こっているのかを判断するのは少し難しいです。ただし、Modified Byを使用してアイテムをユーザーに関連付けることは、良い考えではないかもしれません。これは、ご存知のように、システムまたは潜在的に管理者による変更がそのリンクを切断することを意味します。

現在のユーザーをカスタムフィールドに保存します。それはあなたの問題を解決するはずであり、より安全な設計の選択になるでしょう。

于 2012-06-09T07:04:48.123 に答える
0

イベントレシーバーで実行され、アイテムを更新している他のコードが存在する可能性があります。イベント受信者はシステムユーザーアカウントのコンテキストで実行され、イベント受信者からアイテムを更新すると、変更されたフィールドには次のように表示されます。システムアカウントがアイテムを変更しました。

于 2012-06-11T07:29:18.760 に答える