SPFx:将新项目添加到现有列表文件夹(使用 pnp)

SPFx: Add a new item to existing List Folder (using 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");

但是我找不到在里面添加项目的方法。

这个操作好像不是用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);

正如 Jackson 所写,似乎无法使用 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);

然后,我花了一些额外的时间来了解如何在使用 addValidateUpdateItemUsingPath 时为用户字段设置 FieldValue(在这种情况下,像往常一样使用用户 ID 来检索用户是不工作)。
但我是这样找到的:

{FieldName: 'ColumnUser', 
FieldValue: JSON.stringify([{"Key": "i:0#.f|membership|"+"MyUserEmail"}])}

为了响应 Leif 关于从 AddValidateUpdateItemUsingPath 方法获取新项目的 ID(我还没有足够的信誉),在响应中返回了新创建的 itemId。您将获得一组值,如下所示:

{
"value": [
    {
        "ErrorCode": 0,
        "ErrorMessage": null,
        "FieldName": "Title",
        "FieldValue": "sample item title",
        "HasException": false,
        "ItemId": 0
    },
    {
        "ErrorCode": 0,
        "ErrorMessage": null,
        "FieldName": "EventDate",
        "FieldValue": "4/22/2022 7:00 AM",
        "HasException": false,
        "ItemId": 0
    },
    {
        "ErrorCode": 0,
        "ErrorMessage": null,
        "FieldName": "EndDate",
        "FieldValue": "4/22/2022 9:00 AM",
        "HasException": false,
        "ItemId": 0
    },
    {
        "ErrorCode": 0,
        "ErrorMessage": null,
        "FieldName": "Description",
        "FieldValue": "sample description text",
        "HasException": false,
        "ItemId": 0
    },
    {
        "ErrorCode": 0,
        "ErrorMessage": null,
        "FieldName": "Id",
        "FieldValue": "4130",
        "HasException": false,
        "ItemId": 0
    }
]

}

您需要筛选“FieldName”等于“Id”的结果,然后“FieldValue”是新项目的 ID。

如果项目创建成功,您只会获得正值的“Id”。如果“Id”字段值等于“0”,则其他字段中某处存在错误,导致无法创建项目。