如何在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
相关产品推荐
相关产品推荐

