如何从 SPFx 中选定的文档中获取文档 ID?

问题描述 投票:0回答:1

我有一个包含文档和 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 的文档,但我不清楚如何实现它。

typescript spfx pnp-js
1个回答
0
投票

如果您希望获取

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

© www.soinside.com 2019 - 2024. All rights reserved.