1

ユーザー名を人物フィールドに保存するには:

カスタム フォームにユーザー エディター コントロールを提供し、解決された各エンティティを次のように保存しました。

 if (currentPeopleEditor.Entities.Count != 0)
 {
 SPFieldUserValueCollection userCollection = new SPFieldUserValueCollection();
 for (int index = 0; index < currentPeopleEditor.ResolvedEntities.Count; index++)
 {
  PickerEntity ObjEntity = (PickerEntity)currentPeopleEditor.ResolvedEntities[index];
  userCollection.Add(new SPFieldUserValue(objSPWeb,Convert.ToInt32(ObjEntity.EntityData["SPUserID"]), ObjEntity.Key));
  }
  newItem[Field.Key.ToString()] = userCollection;
  }            

一部のユーザーがこの例外を受け取ると述べるまで、それは非常にうまく機能していました:「無効なルックアップ値

ルックアップ フィールドに無効なデータが含まれています。値を確認して、再試行してください。」

調査の結果、ObjEntity.EntityData["SPUserID"]) が null を返すため、このエラーが発生していることがわかりました。

これは、このサイト コレクションにアクセスしていないが、企業の AD システムのメンバーである一部のユーザー名を保存する必要があるために発生していました。

4

2 に答える 2

0

SharePoint 2010 で上記の問題を解決するには、web.EnsureUser() を使用するだけです。

ユーザーをすべてのユーザー リストに追加し、spuser オブジェクトを返します。

于 2013-05-18T04:34:58.337 に答える
0

この問題を解決するために、私たちは SharePoint に注目し、その機能を再現しました。リストの 1 つで、タイプ people の列を追加し、グループで任意のユーザーを選択できるようにします。このリストに新しいアイテムを作成し、すべてのユーザー リストに存在しない名前のユーザーを選択します。アイテムを保存します。すべてのユーザー リストに戻ると、新しいユーザー名がこのリストに追加されていることがわかります。

注: UI ですべてのユーザー リストを表示するには、次の場所を参照します: サイト コレクション URL/_catalogs/users/simple.aspx

同じ機能を実現します。次のようにコードを更新しました

if (currentPeopleEditor.Entities.Count != 0)
{
    SPFieldUserValueCollection userCollection = new SPFieldUserValueCollection();
    for (int index = 0; index < currentPeopleEditor.ResolvedEntities.Count; index++)
{
               PickerEntity ObjEntity = (PickerEntity)currentPeopleEditor.ResolvedEntities[index];
               if (ObjEntity.EntityData["SPUserID"] == null)

                {
                      SPContext.Current.Site.RootWeb.AllUsers.Add(ObjEntity.Key, ObjEntity.EntityData["Email"].ToString(), ObjEntity.DisplayText, "");

                     SPContext.Current.Site.RootWeb.Update();

                     userCollection.Add(new SPFieldUserValue(objSPWeb, Convert.ToInt32(SPContext.Current.Site.RootWeb.AllUsers[ObjEntity.Key].ID), ObjEntity.Key));
                      }
                      else    
                       {    userCollection.Add(new SPFieldUserValue(objSPWeb,                 Convert.ToInt32(ObjEntity.EntityData["SPUserID"]), ObjEntity.Key));
                       }
         }
    newItem[Field.Key.ToString()] = userCollection;
 }  
于 2012-08-09T23:25:11.600 に答える