最新消息:Welcome to the puzzle paradise for programmers! Here, a well-designed puzzle awaits you. From code logic puzzles to algorithmic challenges, each level is closely centered on the programmer's expertise and skills. Whether you're a novice programmer or an experienced tech guru, you'll find your own challenges on this site. In the process of solving puzzles, you can not only exercise your thinking skills, but also deepen your understanding and application of programming knowledge. Come to start this puzzle journey full of wisdom and challenges, with many programmers to compete with each other and show your programming wisdom! Translated with DeepL.com (free version)

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

matteradmin5PV0评论

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());
    })
Post a comment

comment list (0)

  1. No comments so far