我有一个包含文档和 SP listView 扩展的文件夹。我希望能够在选择文件夹中的文档后检索文档 ID,以便稍后使用它们执行 Graph API 请求。我怎么做?目前我有这个:
private async handleCommand(selectedItems: any[]): Promise<void> {
try {
if (selectedItems && selectedItems.length > 0) {
const results: string[] = [];
for (const selectedItem of selectedItems) {
const fileName = selectedItem.getValueByName('FileLeafRef');
const folderPath = '<path>';
try {
const item = await sp.web.getFolderByServerRelativeUrl(folderPath + fileName).getItem<{
Id: number,
Title: string
}>('Id', 'Title');
console.log(`Id: ${item.Id} -- ${item.Title}`);
await item.getCurrentUserEffectivePermissions().then(perms => {
console.log(perms);
});
} catch (error) {
console.error(`Error getting item for ${fileName}:`, error);
results.push(`Error getting item for ${fileName}: ${error.message}`);
}
}
// Display the combined results in a single alert
await Dialog.alert(`Selected documents:\n${results.join('\n')}`);
} else {
// No items selected, handle accordingly
await Dialog.alert('No items selected.');
}
} catch (error) {
console.error('Error handling command:', error);
await Dialog.alert(`Error handling command: ${error.message}`);
}
}
我尝试了这段代码,但它给了我一个 403 错误。这是这样做的正确方法吗?我使用了 https://github.com/SharePoint/PnP-JS-Core/wiki/Working-With:-Files 的文档,但我不清楚如何实现它。
如果您希望获取
Id
的内部 List Item
,则无需执行 SharePoint 请求。
您可以从
Id
列表中获取 ReadonlyArray<RowAccessor>
列。
可以从事件中定位:
IListViewCommandSetExecuteEventParameters
对象。
在以下
onExecute
函数的代码中:
public onExecute(event: IListViewCommandSetExecuteEventParameters): void {
switch (event.itemId) {
case 'COMMAND_1':
console.log(event.selectedRows.map(item => item.getValueByName('ID')));
console.log(event.selectedRows);
break;
default:
throw new Error('Unknown command');
}
}
您可以看到我们可以映射
selectedRows
属性,以便它返回所选项目的 IDs
的数组。其屏幕截图如下所示:
列表视图中还带有许多其他属性,其中一些如下:
请记住,如果值中未包含某列,或者
getValueByName
函数返回 null
,则应在所选视图中包含该列。此外,您正在查看的存储库已被弃用并存档。我建议您查看该库的新版本here。