如何在D365 Business Central的AL语言中获取目录文件列表?
获取Dynamics 365 Business Central指定目录下的所有文件路径并批量导入
既然不能用DotNet变量,其实Codeunit 419("File Management")里就有现成的方法帮你搞定批量文件遍历,不用额外依赖Azure函数。你之前的代码只处理了单个文件,我们可以用这个Codeunit的GetFilesInFolder方法来获取指定文件夹下的所有文件路径,然后循环处理每一个文件。
先看修改后的完整代码,我帮你调整成批量处理的逻辑:
action("Import Files") { ApplicationArea = All; Image = Import; trigger OnAction(); var FileMgt: Codeunit "File Management"; FolderPath: Text; FilePaths: array[1000] of Text; // 根据实际需求调整数组大小 FileCount: Integer; i: Integer; FromFile: Text; begin Init(); FolderPath := 'E:\Dynamically\'; // 检查文件夹是否存在 if not FileMgt.FolderExists(FolderPath) then begin MESSAGE('指定的文件夹不存在,请检查路径!'); exit; end; // 获取文件夹下的所有文件路径 FileCount := FileMgt.GetFilesInFolder(FolderPath, FilePaths); if FileCount = 0 then begin MESSAGE('文件夹中没有可导入的文件!'); exit; end; // 循环处理每个文件 for i := 1 to FileCount do begin FromFile := FilePaths[i]; "Attached File".Import(FromFile); "Attched File Name" := FileMgt.GetFileName(FromFile); // 直接用FileMgt的方法获取文件名更可靠 "Attached file Extension" := FileMgt.GetExtension(FromFile); Insert(true); end; MESSAGE('成功导入 %1 个文件!', FileCount); end; }
代码关键点说明:
GetFilesInFolder方法:这是Codeunit 419的核心方法,第一个参数是目标文件夹路径,第二个参数是用来存储所有文件完整路径的数组,返回值是文件的数量。注意数组大小要根据你可能的文件数量调整,避免溢出。- 文件夹存在检查:先判断目标文件夹是否存在,避免后续操作报错。
- 批量循环处理:通过遍历
FilePaths数组,对每个文件执行和你之前单文件一样的导入逻辑,确保所有文件都能被处理。 - 文件名和扩展名获取:直接用
FileMgt.GetFileName(FromFile)和FileMgt.GetExtension(FromFile)来处理完整路径,比手动拼接更稳妥,避免路径格式异常导致的错误。
如果需要过滤特定扩展名的文件,还可以用GetFilesInFolderWithFilter方法,比如只导入txt文件:
FileCount := FileMgt.GetFilesInFolderWithFilter(FolderPath, '*.txt', FilePaths);
这样就能轻松实现批量获取文件路径并导入的需求了,完全不用依赖DotNet或者外部服务。
内容的提问来源于stack exchange,提问作者Nav Dev
相关产品推荐
相关产品推荐

