Все больше в своих решениях я использую REST запросы и для одной из задач необходимо было создавать элементы в папках.
Для начала нужно проверить есть ли папка или папку нужно ее создать:
Пример :
Хорошо, теперь нужно создать элемент в требуемой папке, но вот не задача, у элемента нет свойства заполнив которое получим требуемое.
Для решения этой проблемы нашел обходной путь.
Для начала создаём элемент в корне списка, а потом переносим в требуемую папку.
перемещение
Если заметили, то мне пришлось еще использовать доп функцию которая возвращает EntityTypeName. в первом случае я его использую для создания папки, а второй раз при перемещении элемента, т.к. нужно указывать путь (Url)
скрипт целиком
Для начала нужно проверить есть ли папка или папку нужно ее создать:
Пример :
1 | checkingExistenceFolder( "Билеты" , "Folder 10" ) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | 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; } |
Хорошо, теперь нужно создать элемент в требуемой папке, но вот не задача, у элемента нет свойства заполнив которое получим требуемое.
Для решения этой проблемы нашел обходной путь.
Для начала создаём элемент в корне списка, а потом переносим в требуемую папку.
перемещение
1 | moveListItem( "Билеты" , "Folder 10" , 26) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 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)}); }); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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; } |
Еще пришлось обновлять элемент при создании папки, т.к. при ее создании путь и Title верный, но вот Name имеет вид "12_.000"
По этому у созданной папки указываем 'FileLeafRef', т.к. при создании заполнить его не получается.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 | 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; } |