SharePoint 2013: How to update multi-value lookup field using JavaScript CSOM - Stack Overflow

I have a Contacts list which has a multi-value lookup field called ContactType. The result of a CAML qu

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?

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?

Share Improve this question edited Sep 18, 2015 at 3:40 user1309226 asked Sep 17, 2015 at 3:46 user1309226user1309226 7592 gold badges11 silver badges34 bronze badges
Add a ment  | 

1 Answer 1

Reset to default 4

Don't build array of SP.FieldLookupValue, instead save multiple contact types to string.

var clientContext = new SP.ClientContext.get_current(); //if the page and the list are in same site.If list is in different site then use relative url instead of get_current
var oList = clientContext.get_web().get_lists().getByTitle('Contacts');
var itemCreateInfo = new SP.ListItemCreationInformation();
var oListItem = oList.addItem(itemCreateInfo);

var contactTypes = null;

$.each(contact.contactTypes, function (index, contactType) {
    if (index != 0)
        contactTypes += ';#' + contactType.id + ';#' + contactType.title;
    else
        contactTypes =  contactType.id + ';#' + contactType.title;
});

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

oListItem.update();

clientContext.executeQueryAsync(
    // success return
    function () {
        var success = true;
    },
    // failure return
    function (sender, args) {
        window.alert('Request to create contact failed. ' + args.get_message() +
                '\n' + args.get_stackTrace());
    })

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1745589837a4634764.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信