Tuesday, June 5, 2007
SharePoint 2007 : Champs Lookup et People
Je me suis arraché les cheveux pour répondre à ce qui me semble être une incohérence :
Cas 1: si on utilise un champ lookup ou People dans une liste, les données sont renvoyées sous forme d'une chaîne de caractères "#1#;data1#;".
Cas 2: Si on utilise un champ lookup ou people dans une liste avec sélection multiple, les données sont renvoyées sous forme d'une chaîne de caractères "#1#;data1#;#2#data2#;".
Il existe un objet SPFieldLookupValueCollection qui contient des SPFieldLookupValue qui a deux propriétés intéressantes :
- LookupId : pour récupérer l'Id de l'item de la liste liée dans le lookup
- LookupValue : pour récupérer le libellé (ce qu'on voit dans la liste)
Dans le Cas 2, on peut "caster" cette chaîne à l'aide de :
SPListitem relation;
SPFieldLookupValueCollection temp = (SPFieldLookupValueCollection)relation["columnName"];
columnName est une colonne de type lookup ou people à sélection multiple et relation est un élément de la liste
Mais cela ne marche pas dans le Cas 1 : SharePoint génère une erreur. Une première approche serait de caster avec SPFieldLookupValue :
SPFieldLookupValue tempValue = (SPFieldLookupValue)relation["columnName"];
Mais non, ça ne marche toujours pas !
Ce qu'il faut faire, avant de chercher un super algorithme de parsing de la chaîne de caractères, c'est d'utiliser un paramètre du constructeur :
SPFieldLookupValue tempValue = new SPFieldLookupValue(relation["columnName"].ToString());
Dans ce cas on obtient bien un objet SPFieldLookupValue avec les propriétés LookupId et LookupValue qui sont vraiment bien pratiques.
Pourquoi ne pas avoir une seule façon de "caster" ??
Subscribe to:
Posts (Atom)