SPFx: добавить новый элемент в существующую папку списка (используя pnp)

Кто-нибудь знает, как добавить новый элемент в папку списка в Sharepoint Framework?

Таким образом я могу добавить элемент в список MyList:

let list = pnp.sp.web.lists.getByTitle("MyList");    

list.items.add({
      Title: "itemName"
      }).then(r => { 

      console.log(r);
})

Но мне нужно, чтобы он создавался внутри папки MyList\MyFolder.

Я попытался получить папку таким образом:

var folder= sp.web.lists.getByTitle("MyList").rootFolder.folders.getByName("MyFolder");

но я не могу найти способ добавить элементы внутрь.


person Alessandra Amosso    schedule 19.02.2020    source источник


Ответы (2)


Кажется, что эта операция не реализована с библиотекой sp-pnp-js.

Вы должны быть в состоянии сделать это, используя ручной запрос на выборку, например:

const listTitle = "List Title";
const folderTitle = "Folder Title";
const webUrl = _spPageContextInfo.webAbsoluteUrl;
const url = webUrl + "/_vti_bin/ListData.svc/" + listTitle.replace(/\s/g, "");
fetch(url, {
    method: 'POST',
    headers: {
        "Accept": "application/json",
        "Content-Type": "application/json"
    },
    body: JSON.stringify({
        Title: "Item Name",
        Path: webUrl + "/Lists/" + listTitle + "/" + folderTitle
    }),
}).then(console.log);
person Jackson    schedule 19.02.2020
comment
Спасибо за ваш ответ, я не заставлял это работать таким образом, но то, что вы написали, помогло мне приблизиться к решению, поэтому я голосую :) - person Alessandra Amosso; 20.02.2020

Как писал Джексон, кажется, что невозможно добавить элемент в папку списка с библиотекой sp-pnp-js.

Итак, проведя некоторые поиски, я обнаружил, что для этой цели можно использовать addValidateUpdateItemUsingPath:

const _spPageContextInfo=this.context.pageContext.legacyPageContext;
const webUrl = _spPageContextInfo.webAbsoluteUrl;

const listPath=webUrl+"/Lists/MyListInternalName";
const folderName="MyFolderName";

sp.site.rootWeb.lists.getByTitle("MyList").addValidateUpdateItemUsingPath([
    { FieldName: 'Column1', FieldValue: 'Value1'}, 
    { FieldName: 'Column2', FieldValue: 'Value2'}]    
  ,`${listPath}/${folderName}`).then(console.log);

Затем мне потребовалось немного дополнительного времени, чтобы понять, как установить FieldValue для полей пользователя при использовании addValidateUpdateItemUsingPath (в этом случае использование идентификатора пользователя — как обычно — для получения пользователя не работало).
Но я нашел такой способ:

{FieldName: 'ColumnUser', 
FieldValue: JSON.stringify([{"Key": "i:0#.f|membership|"+"MyUserEmail"}])}
person Alessandra Amosso    schedule 20.02.2020
comment
При использовании addValidateUpdateItemUsingPath — как получить идентификатор только что созданного элемента? - person Leif; 22.07.2021