5

I have a Contacts list which has a multi-value lookup field called ContactType. The result of a CAML query will show the following value for ContactType for one of the list items:

1;#Applicant;#2;#Employee

I had a look at Fiddler after executing a CSOM query against the multi-value lookup field and noticed that the SP.FieldLookupValue object has two properties with the values:

$1E_1 : 1
$2e_1 : "Applicant"

However when you save a value you can only set the lookupId which is 1 in this case. There is no method to set up the value as in lookup.set_lookupValue().

I am attempting to copy the contents of ContactType into a new list item of Contacts. Unfortunately I have no success when updating the ContactType field. This is what I've tried so far:

var clientContext = new SP.ClientContext.get_current(); 
var oList = clientContext.get_web().get_lists().getByTitle('Contacts');
var itemCreateInfo = new SP.ListItemCreationInformation();
var oListItem = oList.addItem(itemCreateInfo);

var contactTypes = new Array();

$.each(contact.contactTypes, function (index, contactType) {
    var lookup = new SP.FieldLookupValue();
    lookup.set_lookupId(contactType.id);
    contactTypes.push(lookup);
});

// other set_item statements skipped for brevity
oListItem.set_item('ContactType', contactTypes);

oListItem.update();

The error message is:

Invalid lookup value. A lookup field contains invalid data.

I also experimented with the following code without any success:

lookup.set_lookupId(contactType.id + ";#" + contactType.title);

In this case the error message is:

The input string is not in the correct format.

If I update a single lookup I have no problems but the issue lies in the saving of the array of lookups. For example, the following code works fine:

var lookup = new SP.FieldLookupValue();
lookup.set_lookupId(1);
contactTypes.push(lookup);
oListItem.set_item('ContactType', lookup);

but it doesn't play ball when attempting to save the array of lookups as in

oListItem.set_item('ContactType', contactTypes);

Any ideas?

3
  • Check whether contactType.id in $.each() loop is fetching correct lookup ID or not. Otherwise the code is perfect to update the multi value lookup field
    – Yayati
    Commented Sep 17, 2015 at 7:06
  • contactType.id is passing the correct lookup id. Commented Sep 18, 2015 at 0:26
  • There are correct answers below. However, if you'd like some more detail you can watch my YouTube video on the subject Update MultiSelect Choice and Lookup Field Values from JavaScript CSOM and REST API (youtube.com/watch?v=3RmtAhqSDR0) Commented Oct 13, 2018 at 1:48

3 Answers 3

0

Instead of creating a SP.FieldLookupValue(), you can store the contents in a string. You can then try directly setting the lookup column as a string like so:

var lookupString = "1;#Applicant;#2;#Employee";
oListItem.set_item('ContactType', lookupString);
1
  • 1
    Bullseye! Thank so much @Akhoy. Your answer solved my problem. Commented Sep 20, 2015 at 23:08
0

You can use following code, if you have Multiple Value LookUp Field and want to add listitem with all selected LookUp Field. Following code will add 3 lookUp Field value whose id is 1,2 and 3.

allBUValues=[1,2,3];

var lookupVals = [];

for(i=0;i<allBUValues.length;i++)
{
    var lookupVal = new SP.FieldLookupValue();
    lookupVal.set_lookupId(allBUValues[i]);
    lookupVals.push(lookupVal);
}

aListItem.set_item('BusinessUnit', lookupVals); 

aListItem.update();
0
-1

You might want to have a look at this post: Add values to lookupmulti field in c#

Since you are working with a multi-value lookup you should set the value of it with type SPFieldLookupValueCollection.

Powershell and JavaScript Code/Objects are often very similar in SharePoint.

Here is a post from R Manimaran with some more detail of it: https://rmanimaran.wordpress.com/2012/07/16/update-lookup-field-using-client-object-model/

2

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.