要求是将 PDF 文件从这些文件夹和子文件夹复制到 Blob 容器。文件应该放置在 blob 容器中,而不保留文件夹结构,只保留文件本身......我有以下管道,如下所示:
此管道仅成功提取 SharePoint 文件夹位置中的一个文件。 “获取元数据”活动的 URL 如下所示:
https://cactuscompany.sharepoint.com/sites/cactuscompany/_api/web/GetFolderByServerRelativeUrl('/sites/mydatateam/Shared 文档/常规/全局/the_data_I_need/')/文件
数据集如下所示:
这也是我复制活动中数据集属性的一部分:
@concat(replace(activity('get metadata').output.value[0]['odata.id'],'https://cactuscompany.sharepoint.com/',''),'/$value')
我错过了什么?我该怎么做才能让我的管道获取此 SharePoint 位置中的其余文件,并获取子文件夹中的这些文件?
要从子文件夹复制文件,请结合使用逻辑应用和 ADF 管道。
使用逻辑应用中的 Sharepoint 连接器 - 获取项目 操作来获取子文件夹中的所有文件路径列表。在其中添加参数包括嵌套项目。
这将给出所有文件列表,但它也包括文件夹的元数据属性。要过滤掉这些内容,请在逻辑应用程序中使用 Filter array 并检查
{IsFolder}
值 False
,如下所示。
值 -
@body('Get_items')?['value']
和 @item()?['{IsFolder}']
等于 @False
。
然后,结果数组将仅包含文件属性。
现在,从此逻辑应用调用 ADF 并将此数组作为参数传递。
首先在ADF pipeline中创建一个数组参数,并且不给出任何默认值。
发布管道,它将反映在逻辑应用程序中,如下所示。现在,像这样传递数组。
{
"arr":@{body('Filter_array')}
}
例如,我已将管道值存储在管道中的数组变量中,当从逻辑应用程序触发时,它将给出这样的数组。
将此数组按顺序传递到管道中的 For-Each 并使用复制活动将每个文件复制到其目标。 您需要对源使用参数化链接服务,并在相对 URL 中传递 @item()['{FullPath}']
。使用 Bearer 令牌,文件将在 for 循环后复制。