Marco Rizzi SPBlog

SharePoint, web and so many things.

Come settare da codice valori su un campo lookup multivalue in modo incrementale

Tempo fa mi era imbattutto in un problema che riguarda la scrittura di valori in un field di tipo lookup multi value. Per la precisione: ciò che veniva fatto è valorizzare la collezione del multi value un pò alla volta senza ogni volta salvare l'item, più o meno come riportato

SPListItem item = getItem();
//Code 1
SPFieldLookupValueCollection fieldLookupValues = (SPFieldLookupValueCollection)item["MultiValueField"]; // ok
fieldLookupValues.Add(new SPFieldLookupValue(1, "value));
item["MultiValueField"] = fieldLookupValues;
//... do some operations

//Code 2
fieldLookupValues = (SPFieldLookupValueCollection)item["MultiValueField"]; // Exception

Nel primo blocco di codice viene letto un field, settato il primo valore della collection e successivamente salvata la collection sul item.
Il secondo blocco, se seguito successivamente al primo, genera una exception di tipo 'Unable to cast object'. Questo perchè è l'oggetto SPListItem che si occupa di mappare la stringa di un lookup multi value, il cui valore è id1;#value1;id2;#value2, in un oggetto di tipo SPFieldLookupValueCollection. Una volta impostato un valore per questo campo, il type del field torna ad essere String, ovvero il tipo con cui viene gestito internamente.
Per farlo tornare un oggetto tipizzato a SPFieldLookupValueColletion occorre fare un item.Update() prima del blocco 2.

 

Technorati Tags: ,
Posted: apr 01 2009, 06:44 by marcorizz | with no comments
Filed under: ,