locked
リストアイテムイベントレシーバーのItemUpdatedイベント処理内で、GUIからの処理か外部処理(バッチ)からの処理かを判断する方法 RRS feed

  • 質問

  • いつも、このフォーラムを参考にさせて頂いております。

     

    現在、リストアイテム更新時にイベントレシーバーのItemUpdatedメソッドが実行されるリストを作成しています。

    このリストアイテムに対して、ユーザーがブラウザから更新するケースと

    バッチ処理から更新するケースと存在するのですが、

    ItemUpdatedメソッドの中で、どちらの処理で更新されたのか判断する方法はありますでしょうか?

     

    バッチ処理による更新処理は「SPSecurity.RunWithElevatedPrivileges」メソッドを使用し、

    システムアカウントで処理を行うので、ItemUpdatedイベント引数のproperties.UserLoginNameはSHAREPOINT\systemとなります。

     

    しかし、ブラウザにサインインするアカウントがアプリケーションプールのカスタムアカウントの場合は

    サインイン時のアカウント名がシステムアカウントとなるため、アカウント名では判断できません。

     

    リストに隠し列を設定し、バッチ処理時に隠し列に値を設定するという方法は

    現在考えてはおりません。

     

    その他、何か良い方法がございましたら

    ご教授のほど、宜しくお願いいたします。

    2011年2月23日 1:32

回答

  • > しかし、ブラウザにサインインするアカウントがアプリケーションプールのカスタムアカウントの場合は
    > サインイン時のアカウント名がシステムアカウントとなるため、アカウント名では判断できません。

    ここで方向を間違っている気がします。。。

    業務設計で何とかするべき問題だと思います。

    どうしても、アプリ側で対応する必要が有るのであれば、隠し列で情報を持っておけば良いかと思います。

    思い付きレベルでは、システムが更新した最終日時を保存して、更新日と不一致なら、手動で更新したような感じで、、
    美しくは無いですねぇー


    Blog:http://blog.sharepointissue.com HP:http://www.piecepoint.jp/
    • 回答としてマーク 山本春海 2011年3月24日 6:17
    2011年2月27日 14:26

すべての返信

  • > しかし、ブラウザにサインインするアカウントがアプリケーションプールのカスタムアカウントの場合は
    > サインイン時のアカウント名がシステムアカウントとなるため、アカウント名では判断できません。

    ここで方向を間違っている気がします。。。

    業務設計で何とかするべき問題だと思います。

    どうしても、アプリ側で対応する必要が有るのであれば、隠し列で情報を持っておけば良いかと思います。

    思い付きレベルでは、システムが更新した最終日時を保存して、更新日と不一致なら、手動で更新したような感じで、、
    美しくは無いですねぇー


    Blog:http://blog.sharepointissue.com HP:http://www.piecepoint.jp/
    • 回答としてマーク 山本春海 2011年3月24日 6:17
    2011年2月27日 14:26
  • 今更ですが、バッチ内でSharePointライブラリを通して更新しているのなら、イベントレシーバのプロセスオーナーはバッチ自身になるので、

    System.Diagnostics.Process.GetCurrentProcess();

    で、バッチのプロセスが返ってくると思います。(Web経由で登録された場合はIISのワーカプロセス)

     

    2011年3月30日 2:47