You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在FileMaker运行的Groovy代码循环中返回所有fileslist值?

解决FileMaker中Groovy循环仅返回单个值的问题

嘿,我之前也碰到过一模一样的情况——在FileMaker里用Groovy处理循环时,return语句会直接跳出函数,导致只能拿到第一个迭代的结果。要返回所有文件列表内容,你只需要先把所有结果收集起来,最后统一返回就行,具体做法如下:

核心思路

return语句在函数里一旦执行,就会立刻终止函数运行,所以绝对不能在循环内部用return。我们可以先创建一个集合(比如List)来存储所有文件信息,遍历完所有文件后,再返回这个集合或者把它转换成FileMaker容易处理的字符串格式。

修改后的代码示例

def start(){
    // 初始化一个空列表,用来存储所有文件信息
    def fileResults = []
    def ftpClient = new FTPClient()
    
    ftpClient.connect(server)
    ftpClient.login(user, pass)
    ftpClient.enterLocalPassiveMode()
    FTPFile[] fileslist = ftpClient.listFiles("/")
    
    // 遍历所有FTP文件,把需要的信息添加到列表中
    for(FTPFile file : fileslist){
        // 这里可以根据需求自定义要返回的内容,比如文件名、大小、修改时间等
        def fileInfo = "文件名: ${file.getName()} | 大小: ${file.getSize()}字节 | 类型: ${file.isDirectory() ? '文件夹' : '文件'}"
        fileResults.add(fileInfo)
    }
    
    // 别忘了关闭FTP连接,避免资源泄漏
    ftpClient.logout()
    ftpClient.disconnect()
    
    // 两种返回方式选一种:
    // 1. 返回列表(如果FileMaker支持接收列表类型)
    // return fileResults
    
    // 2. 转成换行分隔的字符串(更适合FileMaker后续拆分处理)
    return fileResults.join("\n")
}

关键说明

  • 我特意加上了FTP连接的关闭逻辑,这是很容易被忽略的细节,不然可能会导致连接资源一直被占用。
  • 如果你只需要文件名,把fileInfo改成file.getName()就行;如果需要更多属性,直接用FTPFile类的其他方法(比如getTimestamp()获取修改时间)拼接进去。
  • 用join("\n")把列表转成字符串后,在FileMaker里可以用GetValue()或者Split()函数来拆分每一条文件信息,方便后续的字段处理或展示。

内容的提问来源于stack exchange,提问作者chanbasha sk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:07:44