我已经对如何做到这一点进行了几次迭代,但我不确定到底发生了什么。我目前正在开发一种可以轻松复制我们的 SharePoint 网站的管理工具。我一直面临着将站点列添加到内容类型的任务,并且通过我的研究,我知道如何做到这一点的唯一方法是通过 JSOM API。我可以添加一些站点列(最多 7 - 8 个)。但是,无论我做什么,在尝试取决于内容类型的全部站点列(17 或 22)时,我都会遇到 2 个错误中的 1 个。
无法获取列和内容类型。错误:无效的字段名称。{b0af08d3-136c-43c6-8c0c-df48df70c2c3} - 这是基于 SPPostCTFIeldLinksData 的初始函数调用。这不是字段 ID,为什么要填充它?
未知错误。- 这对我来说是一个奇怪的问题。我不确定这是从哪里来的,但似乎查询正在执行,它只是返回一个错误,没有可识别的消息。
最终,我希望能够为该代码提供一个站点列列表以添加到给定的内容类型(特别是在对象数组中),并添加它们。任何关于我应该如何解决这个问题的建议将不胜感激。
下面的代码:
var ctx = new SP.ClientContext.get_current();
var web = ctx.get_web();
var columns = new Array();
function SPPostCTFieldLinksData(configData) {
document.getElementById('text').value += 'Posting Site Columns to Content Types...\n';
$.get({
url: siteURL,
method: 'GET',
headers: {
"Accept": "application/json;odata=verbose"
},
async: false
}, function (data) {
for (var i = 0; i < data.d.results.length; i++) {
IDs.push({ id: data.d.results[i].Id.StringValue, name: data.d.results[i].Name });
}
});
for (var iFieldsCounter = 0; iFieldsCounter < configData[IDs[0].name]["FieldLinksTitle"].length; iFieldsCounter++) {
columns[iFieldsCounter] = web.get_fields().getByInternalNameOrTitle(configData[IDs[0].name]["FieldLinksTitle"][iFieldsCounter]);
ctx.load(columns[iFieldsCounter]);
}
cttypes = web.get_contentTypes();
ctx.load(cttypes);
ctx.executeQueryAsync(
function () {
addColumns(IDs[0].name, configData[IDs[0].name]["FieldLinksTitle"], columns);
},
function onItemsRefetchedFail(sender, args) {
console.log('Failed to fetch columns and Content Type. Error:' + args.get_message() + '\n' + args.get_stackTrace());
});
}
function addColumns(ctypeName, fieldsInternalName, createdFields) {
var createdContentType;
var contentTypeEnumerator = cttypes.getEnumerator();
while (contentTypeEnumerator.moveNext()) {
var contentType = contentTypeEnumerator.get_current();
if (contentType.get_name() === ctypeName) {
createdContentType = contentType;
var fieldRef = new Array();
for (var iAddFieldsCounter = 0; iAddFieldsCounter < 11; iAddFieldsCounter++) {
fieldRef[iAddFieldsCounter] = new SP.FieldLinkCreationInformation();
fieldRef[iAddFieldsCounter].set_field(createdFields[iAddFieldsCounter]);
createdContentType.get_fieldLinks().add(fieldRef[iAddFieldsCounter]);
createdContentType.update(true);
}
ctx.load(createdContentType);
ctx.executeQueryAsync(onAddFieldToContentTypeSuccess, onAddFieldToContentTypeFail);
}
}
}
function onAddFieldToContentTypeSuccess() {
alert('Site Columns added to Content Type.');
}
function onAddFieldToContentTypeFail(sender, args) {
alert('Failed to add Site Columns to Content Type. Error:' + args.get_message() + '\n' + args.get_stackTrace());
}