Все больше в своих решениях я использую REST запросы и для одной из задач необходимо было создавать элементы в папках.
Для начала нужно проверить есть ли папка или папку нужно ее создать:
Пример :
Хорошо, теперь нужно создать элемент в требуемой папке, но вот не задача, у элемента нет свойства заполнив которое получим требуемое.
Для решения этой проблемы нашел обходной путь.
Для начала создаём элемент в корне списка, а потом переносим в требуемую папку.
перемещение
скрипт целиком
Для начала нужно проверить есть ли папка или папку нужно ее создать:
Пример :
checkingExistenceFolder("Билеты", "Folder 10")
function checkingExistenceFolder(listTitle, folderTitle) { filter = "ContentTypeId eq '0x0120001EE026E991F8644A85A5F2888FADB06D' and Title eq '" + folderTitle +"'"; query = getRest(listTitle,"",filter,"","") query.done(function (data, status, xhr) { if(data.d.results.length > 0) { console.log(data.d.results.length); console.log("папка '" + folderTitle + "' найдена ") } else{ console.log("папка '" + folderTitle + "' не найдена"); createFolder(listTitle,folderTitle) } }); query.fail(function (){ console.log("папка '" + folderTitle + "' не найдена"); }); } function createFolder(listTitle,folderName) { var webUrl = _spPageContextInfo.webAbsoluteUrl; var uri = webUrl + "/_api/web/lists/GetByTitle('"+listTitle+"')/Items/"; console.log(uri); var getlistType = getListEntityTypeName(listTitle); getlistType.done(function (data, status, xhr) { console.log(data.d.EntityTypeName) var listType = data.d.EntityTypeName var body = "{ '__metadata': { 'type': 'SP.Data." + listType + "Item' }, 'Title': '" + folderName + "', 'FileLeafRef': '" + folderName + "', 'ContentTypeId': '0x0120001EE026E991F8644A85A5F2888FADB06D'}" var newItem = addListItem(listTitle, body); newItem.done (function (data, status, xhr) { console.log(data) var newItemId = data.d.Id; var body = "{ '__metadata': { 'type': 'SP.Data." + listType + "Item' }, 'FileLeafRef': '" + folderName + "' }"; updateListItem(listTitle, newItemId, body); }); }); } function addListItem(listTitle,body) { var webUrl = _spPageContextInfo.webAbsoluteUrl; var uri = webUrl + "/_api/web/lists/GetByTitle('"+listTitle+"')/Items/"; var query = jQuery.ajax({ url: uri, type: "POST", data: body, contentLength: body.length, headers: { "accept": "application/json; odata=verbose", "content-type" : "application/json; odata=verbose", "X-RequestDigest" : jQuery("#__REQUESTDIGEST").val() } }); query.done(function (data){ console.log('элемент создан'); console.log(data) }); query.fail(function (error){console.log('Ошибка при создании элемента'); console.log(error)}); return query; }
Хорошо, теперь нужно создать элемент в требуемой папке, но вот не задача, у элемента нет свойства заполнив которое получим требуемое.
Для решения этой проблемы нашел обходной путь.
Для начала создаём элемент в корне списка, а потом переносим в требуемую папку.
перемещение
moveListItem( "Билеты", "Folder 10", 26)
function moveListItem( listTitle, folderTitle, itemId) { var getlistType = getListEntityTypeName(listTitle); getlistType.done(function (data, status, xhr) { console.log(data.d.EntityTypeName) var listType = data.d.EntityTypeName; var listInternalName = listType.substring(0, listType.length - 4 ) console.log(listInternalName) var webUrl = _spPageContextInfo.webAbsoluteUrl; var uri = webUrl+ "/_api/web/getfilebyserverrelativeurl('/Lists/"+ listInternalName + "/" + itemId+ "_.000')/moveto(newurl='/Lists/"+ listInternalName + "/" + folderTitle + "/" + itemId+ "_.000',flags=1)"; var query = jQuery.ajax({ url: uri, type: "POST", headers: { "accept": "application/json; odata=verbose", "content-type" : "application/json; odata=verbose", "X-RequestDigest" : jQuery("#__REQUESTDIGEST").val()} }); query.done(function (data){ console.log('элемент создан'); console.log(data) }); query.fail(function (error){console.log('Ошибка при создании элемента'); console.log(error)}); }); }
function getListEntityTypeName(listTitle) { var webUrl = _spPageContextInfo.webAbsoluteUrl; var uri = webUrl + "/_api/web/lists/GetByTitle('"+listTitle+"')/EntityTypeName"; var queryAjax = jQuery.ajax({ url: uri, type: "GET", headers: { "accept": "application/json; odata=verbose", "content-type" : "application/json; odata=verbose", "X-RequestDigest" : jQuery("#__REQUESTDIGEST").val() } }); queryAjax.done(function (data){ console.log('EntityTypeName полученны'); console.log(data)}); queryAjax.fail(function (){console.log('Ошибка при вылнении запроса EntityTypeName')}); return queryAjax; }Если заметили, то мне пришлось еще использовать доп функцию которая возвращает EntityTypeName. в первом случае я его использую для создания папки, а второй раз при перемещении элемента, т.к. нужно указывать путь (Url)
Еще пришлось обновлять элемент при создании папки, т.к. при ее создании путь и Title верный, но вот Name имеет вид "12_.000"
По этому у созданной папки указываем 'FileLeafRef', т.к. при создании заполнить его не получается.
function checkingExistenceFolder(listTitle, folderTitle) { filter = "ContentTypeId eq '0x0120001EE026E991F8644A85A5F2888FADB06D' and Title eq '" + folderTitle +"'"; query = getRest(listTitle,"",filter,"","") query.done(function (data, status, xhr) { if(data.d.results.length > 0) { console.log(data.d.results.length); console.log("папка '" + folderTitle + "' найдена ") } else{ console.log("папка '" + folderTitle + "' не найдена"); createFolder(listTitle,folderTitle) } }); query.fail(function (){ console.log("папка '" + folderTitle + "' не найдена"); }); } function createFolder(listTitle,folderName) { var webUrl = _spPageContextInfo.webAbsoluteUrl; var uri = webUrl + "/_api/web/lists/GetByTitle('"+listTitle+"')/Items/"; console.log(uri); var getlistType = getListEntityTypeName(listTitle); getlistType.done(function (data, status, xhr) { console.log(data.d.EntityTypeName) var listType = data.d.EntityTypeName var body = "{ '__metadata': { 'type': 'SP.Data." + listType + "Item' }, 'Title': '" + folderName + "', 'FileLeafRef': '" + folderName + "', 'ContentTypeId': '0x0120001EE026E991F8644A85A5F2888FADB06D'}" var newItem = addListItem(listTitle, body); newItem.done (function (data, status, xhr) { console.log(data) var newItemId = data.d.Id; var body = "{ '__metadata': { 'type': 'SP.Data." + listType + "Item' }, 'FileLeafRef': '" + folderName + "' }"; updateListItem(listTitle, newItemId, body); }); }); } function addListItem(listTitle,body) { var webUrl = _spPageContextInfo.webAbsoluteUrl; var uri = webUrl + "/_api/web/lists/GetByTitle('"+listTitle+"')/Items/"; var query = jQuery.ajax({ url: uri, type: "POST", data: body, contentLength: body.length, headers: { "accept": "application/json; odata=verbose", "content-type" : "application/json; odata=verbose", "X-RequestDigest" : jQuery("#__REQUESTDIGEST").val() } }); query.done(function (data){ console.log('элемент создан'); console.log(data) }); query.fail(function (error){console.log('Ошибка при создании элемента'); console.log(error)}); return query; } function moveListItem( listTitle, folderTitle, itemId) { var getlistType = getListEntityTypeName(listTitle); getlistType.done(function (data, status, xhr) { console.log(data.d.EntityTypeName) var listType = data.d.EntityTypeName; var listInternalName = listType.substring(0, listType.length - 4 ) console.log(listInternalName) var webUrl = _spPageContextInfo.webAbsoluteUrl; var uri = webUrl+ "/_api/web/getfilebyserverrelativeurl('/Lists/"+ listInternalName + "/" + itemId+ "_.000')/moveto(newurl='/Lists/"+ listInternalName + "/" + folderTitle + "/" + itemId+ "_.000',flags=1)"; var query = jQuery.ajax({ url: uri, type: "POST", headers: { "accept": "application/json; odata=verbose", "content-type" : "application/json; odata=verbose", "X-RequestDigest" : jQuery("#__REQUESTDIGEST").val()} }); query.done(function (data){ console.log('элемент создан'); console.log(data) }); query.fail(function (error){console.log('Ошибка при создании элемента'); console.log(error)}); }); } function updateListItem(listTitle, itemId, body) { var webUrl = _spPageContextInfo.webAbsoluteUrl; var uri = webUrl + "/_api/web/lists/GetByTitle('"+listTitle+"')/Items("+ itemId +")"; var query = jQuery.ajax({ url: uri, type: "POST", data: body, contentLength: body.length, headers: { "accept": "application/json; odata=verbose", "content-type" : "application/json; odata=verbose", "X-HTTP-Method":"MERGE", "IF-MATCH": "*", "X-RequestDigest" : jQuery("#__REQUESTDIGEST").val() } }); query.done(function (data){ console.log('элемент обновлен'); console.log(data) }); query.fail(function (error){console.log('Ошибка при обновлении элемента'); console.log(error)}); return query; } function getListEntityTypeName(listTitle) { var webUrl = _spPageContextInfo.webAbsoluteUrl; var uri = webUrl + "/_api/web/lists/GetByTitle('"+listTitle+"')/EntityTypeName"; var queryAjax = jQuery.ajax({ url: uri, type: "GET", headers: { "accept": "application/json; odata=verbose", "content-type" : "application/json; odata=verbose", "X-RequestDigest" : jQuery("#__REQUESTDIGEST").val() } }); queryAjax.done(function (data){ console.log('EntityTypeName полученны'); console.log(data)}); queryAjax.fail(function (){console.log('Ошибка при вылнении запроса EntityTypeName')}); return queryAjax; }