Я прошел через несколько итераций о том, как это сделать, и я не уверен, что именно происходит. В настоящее время я работаю над инструментом администрирования, который позволит легко дублировать наши сайты SharePoint. Передо мной стояла задача добавить столбцы сайта в типы контента, и благодаря моим исследованиям я знаю, как это сделать, через API JSOM. Я могу добавить несколько колонок сайта (макс. 7 - 8). Однако независимо от того, что я делаю, я получаю 1 из 2 ошибок при попытке выполнить полный объем столбцов сайта (17 или 22) в зависимости от типа контента.
Не удалось получить столбцы и содержимое Тип. Ошибка: неверное имя поля. {b0af08d3-136 c -43c6-8c0 c -df48df70c2c3} - это основано на начальном вызове функции SPPostCTFIeldLinksData. Это не идентификатор поля, почему он заполняется?
Неизвестная ошибка. - Это странная проблема для меня. Я не совсем уверен, откуда это вытекает, но кажется, что запрос выполняется, он просто возвращает ошибку без заметных сообщений.
В конечном счете, я хочу быть в состоянии дать этому коду список столбцов сайта для добавления к заданным типам контента (особенно в массиве объектов), и иметь их для добавления. Будем весьма благодарны за любые предложения о том, как мне следует go исправить это.
Код ниже:
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());
}