Comment convertir puis-je SPUser à SPFieldUser?
-
16-10-2019 - |
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?
La solution
On dirait que vous avez obtenu deux concepts peu confuses. Il y a trois entités qui sont importantes ici:
- Un champ / colonne sur une liste ( SPField et ses dérivés, y compris SPFieldUser )
- Une ligne de données ( SPListItem )
- Un élément de données (chaîne, SPUser , etc. champ selon la type)
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;