SharePoint 2013: как обновить поле поиска с несколькими значениями с помощью JavaScript CSOM

У меня есть список контактов, в котором есть поле поиска с несколькими значениями, называемое ContactType. Результат запроса CAML покажет следующее значение ContactType для одного из элементов списка:

1;#Applicant;#2;#Employee

Я взглянул на Fiddler после выполнения запроса CSOM к полю поиска с несколькими значениями и заметил, что объект SP.FieldLookupValue имеет два свойства со значениями:

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

Однако, когда вы сохраняете значение, вы можете установить только lookupId, который в данном случае равен 1. Нет способа установить значение, как в lookup.set_lookupValue().

Я пытаюсь скопировать содержимое ContactType в новый элемент списка контактов. К сожалению, мне не удалось обновить поле ContactType. Это то, что я пробовал до сих пор:

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();

Сообщение об ошибке:

Invalid lookup value. A lookup field contains invalid data.

Я также безуспешно экспериментировал со следующим кодом:

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

В этом случае сообщение об ошибке:

The input string is not in the correct format.

Если я обновляю один поиск, у меня нет проблем, но проблема заключается в сохранении массива поисков. Например, следующий код работает нормально:

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

но он не играет в мяч при попытке сохранить массив поисковых запросов, как в

oListItem.set_item('ContactType', contactTypes);

Любые идеи?


person user1309226    schedule 17.09.2015    source источник


Ответы (1)


Не создавайте массив SP.FieldLookupValue, вместо этого сохраните несколько типов контактов в строку.

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());
    })
person user1309226    schedule 21.09.2015