An Avanade Blogging Community

Welcome to An Avanade Blogging Community Sign in | Join | Help
in Search

Marco Rizzi - All around Sharepoint

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

In questi giorni mi sono 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 internamente gestisto.
Per farlo tornare un oggetto tipizzato a SPFieldLookupValueColletion occorre fare un item.Update() prima del blocco 2.

Published Wednesday, May 21, 2008 10:14 AM by marco.rizzi
Filed Under:

Comments

No Comments
Anonymous comments are disabled

This Blog

Post Calendar

<May 2008>
SuMoTuWeThFrSa
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567

Syndication