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”,则其他字段中某处存在错误,导致无法创建项目。
有谁知道如何在 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”,则其他字段中某处存在错误,导致无法创建项目。