Question

J'ai un champ dans une liste qui accepte un objet SPFieldUser. J'ai un objet SPUser que je voudrais remplir ce champ avec, mais je ne peux pas convertir implicitement l'un à l'autre.

Comment puis-je faire cette conversion?

Était-ce utile?

La solution

On dirait que vous avez obtenu deux concepts peu confuses. Il y a trois entités qui sont importantes ici:

Chaque ligne de données (liste) article a un élément de données pour chacun des champs, mais les champs eux-mêmes n'accepte aucune donnée; ils déterminent ce que les données et comment le gérer.

Ainsi, afin d'ajouter un SPUser à SPFieldUser vous devez ajouter à la place à l'élément de la liste en question. Par exemple:

SPList list = SPContext.Current.List;
SPListItem listItem = list.GetItemById(1);
listItem["Author"] = SPContext.Current.Web.CurrentUser;
listItem.Update();

Lorsque l'élément de données est défini dans le code ci-dessus, le SPUser objet est converti en un SPFieldUserValue en arrière-plan. SPFieldUserValue est juste un wrapper autour de la SPUser que le les utilisations de SPFieldUser pour sauver et le manipuler.

Malheureusement, nous ne pouvons pas tirer profit de cette conversion automatique lorsque nous obtenons l'arrière de valeur, donc nous devons faire ce qui suit:

SPList list = SPContext.Current.List;
SPListItem listItem = list.GetItemById(1);

SPFieldUserValue userValue = new SPFieldUserValue(SPContext.Current.Web, listItem["Author"].ToString());
SPUser user = userValue.User;

Autres conseils

Vous pouvez assigner l'objet SPUser directement au champ:

SPUser user = web.SiteUsers["domain\\username"];
item["MyCustomField"] = user;

Obtient l'utilisateur qui est associé à la valeur du champ.

SPFieldUserValue userValue=someValue;
SPUser user = userValue.User;
scroll top