求助:FM16标签页签名捕获窗口的信息传递与返回实现
实现签名捕获到对应标签页门户的方案
嘿,我来帮你一步步搞定这个需求——GetLayoutObjectAttribute确实是核心工具,咱们从基础到脚本落地来梳理:
1. 先给标签面板起个可识别的名字
首先在布局模式下,选中你的标签面板,在检查器的「对象名称」栏给它起个明确的名字,比如 SignatureTabPanel。这一步是为了让脚本能精准定位到这个标签面板的状态。
2. 编写按钮的触发脚本
这个按钮的核心逻辑是:先判断当前激活的是不是Sig1/Sig2标签,记录下标签名,再打开捕获窗口。脚本代码如下(直接在FileMaker脚本编辑器里复制就行):
# 按钮触发脚本:打开签名捕获窗口 Set Variable [$$ActiveSignatureTab; Value:GetLayoutObjectAttribute("SignatureTabPanel"; "CurrentTabName")] # 过滤非目标标签的情况,避免无效操作 If [$$ActiveSignatureTab = "Sig1" or $$ActiveSignatureTab = "Sig2"] # 打开你的签名捕获窗口,这里替换成你实际的窗口名称和参数 Open Window [Name: "签名捕获窗口"; Style: Document; Size: 450, 350; Top: Get(WindowTop) + 50; Left: Get(WindowLeft) + 50] Else Show Custom Dialog ["提示"; "请先切换到Sig1或Sig2标签页再进行签名捕获哦"] End If
这里用$$ActiveSignatureTab这个全局变量是为了让签名捕获窗口能读取到当前激活的标签信息——全局变量的作用域覆盖整个文件,跨窗口也能访问。
3. 签名捕获完成后的回写逻辑
当用户在捕获窗口完成签名后,需要把签名数据写入对应标签页的门户字段里。假设你已经有了捕获签名的逻辑(比如用FileMaker自带的签名控件,或者第三方插件获取到了签名数据),在完成捕获的脚本里加上以下逻辑:
# 签名捕获完成后的回写脚本 If [$$ActiveSignatureTab = "Sig1"] # 替换成Sig1门户对应的签名字段,比如 Sig1_Portal::Signature_Field Set Field [Sig1_Portal::Signature_Field; 你的签名捕获数据] Else If [$$ActiveSignatureTab = "Sig2"] # 替换成Sig2门户对应的签名字段,比如 Sig2_Portal::Signature_Field Set Field [Sig2_Portal::Signature_Field; 你的签名捕获数据] End If # 关闭捕获窗口并刷新原窗口,确保签名立即显示 Close Window [Current Window] Refresh Window [Original Window] # 可选:用完全局变量后清空,避免残留影响后续操作 Set Variable [$$ActiveSignatureTab; Value:""]
几个关键注意点
- 标签页的名称要完全匹配:脚本里判断的"Sig1"/"Sig2"必须和你标签面板里设置的标签名一模一样,大小写也要一致。
- 门户字段的上下文要正确:确保
Set Field操作时,当前记录是门户里对应的记录(如果是新增记录,可能需要先在门户里创建空记录再写入)。 - 全局变量的清理:用完后清空
$$ActiveSignatureTab,防止下次误读之前的残留值。
这样操作下来,点击按钮时就会自动识别当前激活的Sig标签,捕获完成后签名也会精准回到对应的门户里啦~
内容的提问来源于stack exchange,提问作者Jammocash
相关产品推荐
相关产品推荐

