我有一个FileMaker脚本来计算一个值。我有来自表A
的 1 记录,其关系指向表B
的 n 记录。为这些 n 相关记录设置B::Field
到此值的最佳方法是什么?
执行Set 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]
有没有更好的方法来实现这一目标?我不喜欢这样一个事实:为了以编程方式设置一些值(模型)(控制器),我必须创建一个布局(视图)并切换到它,即使用户不应该注意到任何变化的视图
答案 0 :(得分:3)
FileMaker始终主要是最终用户工具,因此其所有脚本更像是重复用户操作的宏。它远不如面向程序员的环境那样灵活。实际上,转到另一个布局是操纵相关值的标准方法。如果您想要复制相关记录或打印报告,则无论如何都必须这样做。
所以:
您的脚本非常好,但您可以使用“替换字段内容”脚本步骤。还要在开头添加Freeze Window脚本步骤;它会阻止屏幕更新。
如果您有相关表的门户,则可以遍历门户网站行。
FileMaker插件API可以执行SQL,并且有一些插件可以公开此功能。因此,如果你真的想要,这也是一个选择。
我自己更喜欢第一种变体。
答案 1 :(得分:2)
循环浏览相关记录门户
通过具有相关记录和设置字段的门户循环比取代或转到记录,设置字段循环有几个优点。
您不必离开布局。如果门户网站上已经没有门户网站,则可以隐藏或关闭门户网站。
您可以以交易方式执行此操作。 IE可以确保所有记录都被编辑,或者都没有。这很重要,因为在多用户网络解决方案中,记录可能并不总是可编辑的。在没有门户的情况下替换或循环记录都不是事务安全。
以下是FileMaker transactions的一些信息。
您可以使用Go To Portal Row循环访问门户。像这样:
Go To Portal Row [First]
Loop
Set Field [B::Field; $Value]
Go To Portal Row [Next; Exit after last]
End Loop
答案 2 :(得分:0)
这取决于您使用的值。如果你需要硬连接某个字段,那么听起来你没有一个非常规范化的数据结构。最简单的方法是在TableB中计算而不是存储的字段,或者如果这是存储的内容,它是否可以是创建记录时设置的查找字段?
TableB中使用的字段是什么以及如何使用?