When working with SharePoint object model normally you encounter this error when you are trying to update a list item programmatically for a lookup or a people picker type field.
Below I have described how we should go ahead to update listitems for these two types so as to avoid the error.
Lookup Type Field Column
public static SPFieldLookupValue GetLookupFieldFromValue(string lookupValue,string lookupSourceColumn, SPList lookupSourceList)
{
SPFieldLookupValue value = null;
SPQuery query = new SPQuery();
query.Query = "<Where><Eq><FieldRef Name='" + lookupSourceColumn + "'/><Value Type='Text'>" + lookupValue + "</Value></Eq></Where>";
SPListItemCollection listItems = lookupSourceList.GetItems(query);
if(listItems.Count > 0 )
value = new SPFieldLookupValue(listItems[0].ID,lookupValue);
return value;
}
lookupValue : Value you want to assign to your item.
lookupSourceColumn : Column name from the source list that you are using as a lookup
lookupSourceList : Name of the source list which is having the column that acts as a datasource for the lookup type column
Now simply refer to the above method and use it to assign it to your list item of lookup type.
item["LookupField"] = GetLookupFieldFromValue(lookupfieldValue, lookupSourceColumn, listName);
People/User Type Field Column
SPUser user = web.EnsureUser(loginName);
item["UserTypeFieldName"] = user;
Updating in this manner will wipe out the fear of lookups and people picker fields. Enjoy Coding :)
Regards,
Geetanjali
Very good article. I am almost reading all ur articles.
ReplyDeletehttp://www.enjoysharepoint.com
What about when the User is a group? EnsureUser doesn't work for a SharePoint group, it throws an exception. Any thoughts?
ReplyDelete