SharePoint 2013:如何使用 JavaScript CSOM 更新多值查找字段
SharePoint 2013: How to update multi-value lookup field using JavaScript CSOM
我有一个联系人列表,其中有一个名为 ContactType 的多值查找字段。 CAML 查询的结果将显示列表项之一的 ContactType 的以下值:
1;#Applicant;#2;#Employee
在对多值查找字段执行 CSOM 查询后,我查看了 Fiddler,发现 SP.FieldLookupValue 对象具有两个具有值的属性:
E_1 : 1
e_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);
有什么想法吗?
不要构建 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());
})
我有一个联系人列表,其中有一个名为 ContactType 的多值查找字段。 CAML 查询的结果将显示列表项之一的 ContactType 的以下值:
1;#Applicant;#2;#Employee
在对多值查找字段执行 CSOM 查询后,我查看了 Fiddler,发现 SP.FieldLookupValue 对象具有两个具有值的属性:
E_1 : 1
e_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);
有什么想法吗?
不要构建 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());
})