9

SharePointリストのItemAddingハンドラーを作成していますが、リストにはマルチユーザーフィールドが含まれています。現時点ではSPItemは実際には利用できないため、SPItemEventDataCollectionから返される文字列を使用することに追いやられていると思います。user1、user2、およびuser3が存在する場合、その文字列は次のようになります。

1; #MYDOMAIN \ user1;#4; #MYDOMAIN \ user2;#10; #MYDOMAIN \ user3

これを別の既存のメソッドに渡すために、これをSPUserオブジェクトの配列に変換したいと思います。これらの文字列を処理するSharePointの組み込みの方法はありますか、それともこの文字列の解析に追いやられていますか?

また、この文字列を処理する必要があると仮定すると、ここでの整数トークンは常に後続のドメイン\ユーザー名に対応しているように見えます。これが当てはまらず、整数またはドメイン\ユーザー名のいずれかが欠落しているか、そうでなければ正しくない場合はありますか?数字を使用してSPWebのSiteUsers.GetByID(id)メソッドを使用するのは安全でしょうか?いくつかのテストでは、それを失敗させることはできませんが、数値データと文字列データの両方が完全に冗長である場合に含まれるのは奇妙に思えます。

ありがとう!

4

2 に答える 2

16

SPFieldUserValueCollection は、探しているものを正確に実行します。そのコンストラクターは、SPWeb とユーザーの文字列を受け入れます。コレクション内の SPFieldUserValue アイテムは、Web の対応する SPUser オブジェクトを返す User プロパティを提供します。

private void ProcessUsers(SPListItem item, string fieldName)
{
  string fieldValue = item[fieldName] as string;
  SPFieldUserValueCollection users = new SPFieldUserValueCollection(item.Web, fieldValue);

  foreach(SPFieldUserValue uv in users)
  {
    SPUser user = uv.User;
    // Process user
  }
}

SPFieldUser 型は、標準の SPFieldLookup から動作を継承します。これには、ID とタイトルの両方が格納され、対応する SPFieldLookupValueCollection があります。ID は (弱い) 参照整合性をサポートしますが、キャッシュされた値は迅速なクエリを可能にします。

于 2009-01-19T07:21:08.027 に答える
0

これは、ユーザーフィールドからSPSuserを取得する場合に機能します。イベントデータからSPSuserを抽出する場合も同じです。

private SPUser getGroup(SPListItem item, string fieldName)
        {
            string fieldValue = item[fieldName] as string;
            if (string.IsNullOrEmpty(fieldValue)) return null;
            int id = int.Parse(fieldValue.Split(';')[0]);
            SPUser user = item.Web.AllUsers.GetByID(id);
            return user;
        }

整数は、ローカルSPWebのユーザーデータベース内のユーザーのIDを参照します。ただし、これは同期されていないため、リストアイテムが保存されたため、ユーザーがユーザーデータベースから削除された可能性があります。

于 2009-01-01T13:51:15.690 に答える