FMP 14 - 根据计算自动填充字段
FMP 14 - Auto Populate a Field based on a calculation
我正在使用 FMP 14,并希望根据以下计算自动填充字段 A
:
If ( Get ( ActiveLayoutObjectName ) = "tab_Visits_v1" ; "1st" ) or
If ( Get ( ActiveLayoutObjectName ) = "tab_Visits_v2" ; "2nd" ) or
If ( Get ( ActiveLayoutObjectName ) = "tab_Visits_v3" ; "3rd" ) or
If ( Get ( ActiveLayoutObjectName ) = "tab_Visits_v4" ; "4th" ) or
If ( Get ( ActiveLayoutObjectName ) = "tab_Visits_v5" ; "5th" ) or
If ( Get ( ActiveLayoutObjectName ) = "tab_Visits_v6" ; "6th" )
以上代码应该根据对象的名称在字段 A
中自动填充值 1st
、2nd
、3rd
... Get (ActiveLayoutObjectName)
函数 returns。我已经为每个选项卡命名,但计算只返回 0。
如有任何帮助,我们将不胜感激。
谢谢。
您的计算方式毫无意义。每个 If() 语句 return 都是“1st”、“2nd”等的结果,或者什么都没有(空字符串)。然后您将 or
应用于所有这些结果。因为只有它们可能是真的,你的计算基本上是在做这样的事情:
"" or "2nd" or "" or "" or "" or ""
恰好 return 1(真),但没有任何用处。
您应该在此处使用 Case() 函数:
Case (
Get ( ActiveLayoutObjectName ) = "tab_Visits_v1" ; "1st" ;
Get ( ActiveLayoutObjectName ) = "tab_Visits_v2" ; "2nd" ;
Get ( ActiveLayoutObjectName ) = "tab_Visits_v3" ; "3rd" ;
Get ( ActiveLayoutObjectName ) = "tab_Visits_v4" ; "4th" ;
Get ( ActiveLayoutObjectName ) = "tab_Visits_v5" ; "5th" ;
Get ( ActiveLayoutObjectName ) = "tab_Visits_v6" ; "6th"
)
另请注意,由于用户切换选项卡,计算字段可能并不总是自行刷新。这里指的是一个unstored计算字段;如果您尝试将其用作自动输入“常规”(例如文本)字段的公式,它将 永远不会 更新。
已添加:
Here is our situation. We see a patient a maximum of 6 times. We have
a tab for each one of those 6 visits.
我建议您使用 portal 访问 related table 而不是选项卡控件。选项卡控件旨在显示用户界面的 固定 组件 - 而不是动态 数据 。当然不是将数据拆分成单独的记录。您应该为每位患者只有一个唯一的记录 - 并且根据需要为每位患者的就诊记录尽可能多(可能无限制)。
如果愿意,您可以将门户行用作 select 特定访问的按钮以查看更多详细信息(类似于选项卡控件,只是门户将 "tabs" 显示为垂直行)。我相信,由用户 selection 过滤的相同访问 table 的单行门户将非常适合此目的。
有了 1. .... 会很简单:
Right (Get ( ActiveLayoutObjectName ) ; 1) & "."
感谢您指出,我的第一个版本不起作用。
我正在使用 FMP 14,并希望根据以下计算自动填充字段 A
:
If ( Get ( ActiveLayoutObjectName ) = "tab_Visits_v1" ; "1st" ) or
If ( Get ( ActiveLayoutObjectName ) = "tab_Visits_v2" ; "2nd" ) or
If ( Get ( ActiveLayoutObjectName ) = "tab_Visits_v3" ; "3rd" ) or
If ( Get ( ActiveLayoutObjectName ) = "tab_Visits_v4" ; "4th" ) or
If ( Get ( ActiveLayoutObjectName ) = "tab_Visits_v5" ; "5th" ) or
If ( Get ( ActiveLayoutObjectName ) = "tab_Visits_v6" ; "6th" )
以上代码应该根据对象的名称在字段 A
中自动填充值 1st
、2nd
、3rd
... Get (ActiveLayoutObjectName)
函数 returns。我已经为每个选项卡命名,但计算只返回 0。
如有任何帮助,我们将不胜感激。
谢谢。
您的计算方式毫无意义。每个 If() 语句 return 都是“1st”、“2nd”等的结果,或者什么都没有(空字符串)。然后您将 or
应用于所有这些结果。因为只有它们可能是真的,你的计算基本上是在做这样的事情:
"" or "2nd" or "" or "" or "" or ""
恰好 return 1(真),但没有任何用处。
您应该在此处使用 Case() 函数:
Case (
Get ( ActiveLayoutObjectName ) = "tab_Visits_v1" ; "1st" ;
Get ( ActiveLayoutObjectName ) = "tab_Visits_v2" ; "2nd" ;
Get ( ActiveLayoutObjectName ) = "tab_Visits_v3" ; "3rd" ;
Get ( ActiveLayoutObjectName ) = "tab_Visits_v4" ; "4th" ;
Get ( ActiveLayoutObjectName ) = "tab_Visits_v5" ; "5th" ;
Get ( ActiveLayoutObjectName ) = "tab_Visits_v6" ; "6th"
)
另请注意,由于用户切换选项卡,计算字段可能并不总是自行刷新。这里指的是一个unstored计算字段;如果您尝试将其用作自动输入“常规”(例如文本)字段的公式,它将 永远不会 更新。
已添加:
Here is our situation. We see a patient a maximum of 6 times. We have a tab for each one of those 6 visits.
我建议您使用 portal 访问 related table 而不是选项卡控件。选项卡控件旨在显示用户界面的 固定 组件 - 而不是动态 数据 。当然不是将数据拆分成单独的记录。您应该为每位患者只有一个唯一的记录 - 并且根据需要为每位患者的就诊记录尽可能多(可能无限制)。
如果愿意,您可以将门户行用作 select 特定访问的按钮以查看更多详细信息(类似于选项卡控件,只是门户将 "tabs" 显示为垂直行)。我相信,由用户 selection 过滤的相同访问 table 的单行门户将非常适合此目的。
有了 1. .... 会很简单:
Right (Get ( ActiveLayoutObjectName ) ; 1) & "."
感谢您指出,我的第一个版本不起作用。