Все больше в своих решениях я использую 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;
}


Комментариев нет:
Отправить комментарий