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" ??