如何编写适用于任何 table 的通用 Filemaker search/script?

how to write a generic Filemaker search/script that applies to any table?

我正在尝试在 Filemaker 19 中创建一个脚本,它可以重复用于许多 tables,并且发现所有搜索功能总是需要我指定 table,而且我不能使用经过计算的 table 名称。

我想要一个简单的“只显示新记录”功能。我所有的 table 都有一个相同的“创建于”字段。我不想写很多其他方面相同的脚本。

有没有办法说“将此搜索应用于当前 table”或“应用于名为 $table 的 table”或类似的东西?

如果字段的名称在所有表中都相同(例如 TableName::dateField 那么这样的脚本就可以工作:

Enter Find Mode [ Pause: OFF ]
Set Field By Name [ Get ( LayoutTableName ) & "::dateField" ; Value: ">=" & Get ( CurrentDate ) ]
Perform Find

如果字段名称不同,您可能需要添加一些额外的分支逻辑。例如。像这样:

If [ Get ( LayoutTableName ) = GetValue ( Substitute ( GetFieldName ( Contacts::creationDate ) ; "::" ; ¶ ) ; 1 ) ]
    Set Variable [ $fieldName ; GetFieldName ( Contacts::creationDate ) ]
Else If [ Get ( LayoutTableName ) = GetValue ( Substitute ( GetFieldName ( Invoices::invDate ) ; "::" ; ¶ ) ; 1 ) ]
    Set Variable [ $fieldName ; GetFieldName ( Invoices::creationDate ) ]
# Add more Else If blocks as needed...
Else
    Set Variable [ $fieldName ; Get ( LayoutTableName ) & "::defaultDateField" ]
End If
Enter Find Mode [ Pause: OFF ]
Set Field By Name [ $fieldName ; Value: ">=" & Get ( CurrentDate ) ]
Perform Find

上面的 GetValue ( Substitute ( GetFieldName ( Invoices::invDate ) ; "::" ; ¶ ) ; 1 ) 部分是避免在脚本中硬编码 table/field 名称的好方法,这将保护您的脚本免受 table/field 名称更改。但是默认字段名称 硬编码的,因此如果您使用这种通用查找方法,请注意在“管理”>“数据库”中更改它。