Filemaker:在每个相关记录中设置特定字段的最佳方法

Filemaker:在每个相关记录中设置特定字段的最佳方法,filemaker,Filemaker,我有一个计算值的FileMaker脚本。我有一条表A中的记录,其中一条关系指向表B中的n条记录。对于这n条相关记录中的每一条,将B::Field设置为该值的最佳方法是什么 设置字段[B::Field;$Value]只会设置n个相关记录中的第一个记录的值。然而,有效的方法如下: Go to Related Record [Show only related records; From table: "B"; Using layout: "B_layout" (B)] Loop Set Fi

我有一个计算值的FileMaker脚本。我有一条表A中的记录,其中一条关系指向表B中的n条记录。对于这n条相关记录中的每一条,将B::Field设置为该值的最佳方法是什么

设置字段[B::Field;$Value]只会设置n个相关记录中的第一个记录的值。然而,有效的方法如下:

Go to Related Record [Show only related records; From table: "B"; Using layout: "B_layout" (B)]
Loop
    Set Field [B::Field; $Value]
    Go To Record/Request/Page [Next; Exit after last]
End Loop
Go to Layout [original layout]

有没有更好的方法来实现这一点?我不喜欢这样一个事实,即为了以编程方式设置某个值模型控制器,我必须创建一个布局视图并切换到它,即使用户不应该注意任何类似于视图更改的内容。

FileMaker始终主要是一个最终用户工具,因此它的所有脚本更像是重复用户操作的宏。它远没有面向程序员的环境那么灵活。实际上,转到另一个布局是处理相关值的标准方法。如果您想复制相关记录或打印报告,您无论如何都必须这样做

因此:

您的脚本非常好,只是可以使用替换字段内容脚本步骤。在开头还添加了冻结窗口脚本步骤;它将阻止屏幕更新

如果有相关表的入口,则可以循环访问入口行

FileMaker插件API可以执行SQL,并且有一些插件公开了此功能。所以如果你真的想,这也是一个选择


我自己更喜欢第一个变体。

FileMaker一直主要是一个最终用户工具,所以它的所有脚本更像是重复用户操作的宏。它远没有面向程序员的环境那么灵活。实际上,转到另一个布局是处理相关值的标准方法。如果您想复制相关记录或打印报告,您无论如何都必须这样做

因此:

您的脚本非常好,只是可以使用替换字段内容脚本步骤。在开头还添加了冻结窗口脚本步骤;它将阻止屏幕更新

如果有相关表的入口,则可以循环访问入口行

FileMaker插件API可以执行SQL,并且有一些插件公开了此功能。所以如果你真的想,这也是一个选择


我自己更喜欢第一个变量。

这取决于您使用值的目的。如果您需要硬连接某个字段,那么听起来您并没有一个非常规范化的数据结构。最简单的方法是在TableB中进行计算,而不是存储字段,或者如果这是存储的内容,是否可以在创建记录时设置查找字段


表B中的字段用于什么以及如何使用?

这取决于您使用该值的目的。如果您需要硬连接某个字段,那么听起来您并没有一个非常规范化的数据结构。最简单的方法是在TableB中进行计算,而不是存储字段,或者如果这是存储的内容,是否可以在创建记录时设置查找字段

表B中的字段用于什么以及如何使用?

循环浏览相关记录的门户

通过具有相关记录的门户循环并设置字段比替换或转到记录、设置字段循环有两个优点

你不必离开布局。如果门户尚未在布局中,则可以将其隐藏或放置在屏幕外

你可以做交易。你可以确保所有的记录都被编辑,或者没有一个被编辑。这一点很重要,因为在多用户联网解决方案中,记录可能并不总是可编辑的。在没有门户的情况下替换或循环记录都不是事务安全的

这里有一些关于你的信息

可以使用“转到门户行”在门户中循环。像这样:

Go To Portal Row [First]
Loop
    Set Field [B::Field; $Value]
    Go To Portal Row [Next; Exit after last]
End Loop
循环浏览相关记录的入口

通过具有相关记录的门户循环并设置字段比替换或转到记录、设置字段循环有两个优点

你不必离开布局。如果门户尚未在布局中,则可以将其隐藏或放置在屏幕外

你可以做交易。你可以确保所有的记录都被编辑,或者没有一个被编辑。这一点很重要,因为在多用户联网解决方案中,记录可能并不总是可编辑的。在没有门户的情况下替换或循环记录都不是事务安全的

这里有一些关于你的信息

可以使用“转到门户行”在门户中循环。像这样:

Go To Portal Row [First]
Loop
    Set Field [B::Field; $Value]
    Go To Portal Row [Next; Exit after last]
End Loop

替换字段内容脚本步骤有什么不同?我从来没用过。快一点吗?是的,快一点。不过,它只能设置一个字段,因此对于更复杂的更改或条件更改,使用循环会更简单
整个循环…太棒了!另外:关于冻结窗口:我是否必须在最后显式调用刷新窗口,还是在脚本执行后自动调用刷新窗口?不,您不必使用刷新窗口;在脚本结束时,它将自动执行该操作。当脚本在暂停/恢复脚本步骤中暂停时,它还将刷新窗口。但它冻结了几乎所有其他内容,因此,例如,您可以编写脚本转到另一个布局,进入查找模式并显示自定义对话框以请求搜索条件,而用户不会注意到这些。替换字段内容脚本步骤有什么不同?我从来没用过。快一点吗?是的,快一点。但它只能设置一个字段,因此对于更复杂的更改或条件更改,使用循环会更简单。啊,我明白了:我可以使用替换字段内容而不是整个循环…太棒了!另外:关于冻结窗口:我是否必须在最后显式调用刷新窗口,还是在脚本执行后自动调用刷新窗口?不,您不必使用刷新窗口;在脚本结束时,它将自动执行该操作。当脚本在暂停/恢复脚本步骤中暂停时,它还将刷新窗口。但它冻结了几乎所有其他内容,因此,例如,您可以编写脚本转到另一个布局,进入查找模式并显示自定义对话框以请求搜索条件,而用户不会注意到这些。它是一个报价、商品和发票的模型。所涉及的字段是货物。已开具发票。还有一个用于货物和发票之间多对多关系的中间表。任何报价都可以包含许多货物,当根据报价创建新发票时,所有尚未开具发票的货物都会复制到中间表。该脚本在打印发票时运行,并将发票中出现的所有商品的发票设置为true。它是报价、商品和发票的模型。所涉及的字段是货物。已开具发票。还有一个用于货物和发票之间多对多关系的中间表。任何报价都可以包含许多货物,当根据报价创建新发票时,所有尚未开具发票的货物都会复制到中间表。该脚本在打印发票时运行,并将发票中显示的所有商品的发票设置为true。感谢提供有关交易的信息。我想我从来没有在一个FileMaker数据库上工作过,这个数据库一次被多个用户使用过。也许有一天我会这么做。谢谢你提供的交易信息。我想我从来没有在一个FileMaker数据库上工作过,这个数据库一次被多个用户使用过,也许有一天我会这么做。