配置 NFC 读取
扫描或停止扫描 NFC(近场通信)标签。
另请参阅
选项
-
“操作”指定是开始(读取)还是停止(取消)扫描 NFC 标签。
以下选项仅用于读取:
-
“脚本”指定在读取标签、发生错误、用户取消操作或使用“取消”选项的另一个“配置 NFC”脚本步骤取消操作时要运行的脚本。
-
“参数”(可选)指定脚本的脚本参数。
-
“超时”(可选)会在指定的秒数后自动取消读取操作。
-
“持续读取”(可选)如果该值不为零,则将脚本步骤设置为读取标签,直到用户点击“取消”按钮、达到超时参数指定的值或者操作系统规定的时间限制为止。如果此选项为零或未指定,则仅读取一个标签。
-
将结果格式化为 JSON(可选)如果该值不为零,这会引起脚本接收 NFC 标签数据作为 JSON 对象。如果此选项为零或未指定,则会接收多行字符串数据。
兼容性
产品 | 是否支持 |
FileMaker Pro | 否 |
FileMaker Go | 是 |
FileMaker WebDirect | 否 |
FileMaker Server | 否 |
FileMaker Cloud | 否 |
FileMaker Data API | 否 |
自定义 Web 发布 | 否 |
原始版本
19.0
说明
使用此脚本步骤扫描或停止扫描使用少量数据编程的 NFC 标签。NFC 标签中数据通常是使用 http、tel、fmp 和 mailto 等协议的 URL。
必须在“脚本”选项指定的脚本中调用 Get (脚本参数)函数,以返回 NFC 标签的数据。根据“将结果格式化为 JSON”的设置,NFC 标签数据将作为 JSON 对象或多行字符串返回。
下表说明 JSON 对象中的每个元素和多行字符串的每一行。有关 NFC 参数的更多信息,请参见 NFC 数据交换格式 (NDEF) 规范。
JSON 元素 |
字符串行号 |
说明 |
---|---|---|
action
|
1 |
调用脚本的原因。返回:
|
error
|
2 |
错误字符串 |
parameter
|
3 |
“指定脚本”对话框中指定的可选脚本参数 |
payloadCount
|
4 |
从标签读取的 NFC 记录数量 |
payloads
|
- |
JSON 中以下行的对象数组,每条 NFC 记录一行。在多行字符串中,行 5 至 8 对每条 NFC 记录重复。 |
identifier
|
5 |
NFC 记录的标识符 |
primary
|
6 |
作为字符串的 NFC 记录的有效负载 |
type
|
7 |
NFC 记录的类型 |
typeNameFormat
|
8 |
NFC 记录的类型名称格式 |
secondary
|
- | 存在的其他有效负载信息(仅限 JSON) |
这是作为 JSON 对象的 NFC 标签数据示例:
{
"action" :"TagRead",
"error" : "",
"parameter" :"Optional script parameter",
"payloadCount" :2,
"payloads" :
[
{
"identifier" : "",
"primary" :"This is the content from the NFC card.",
"secondary" : "en",
"type" :"T",
"typeNameFormat" :1
},
{
"identifier" : "",
"primary" : "https://example.com",
"secondary" : "",
"type" :"U",
"typeNameFormat" :1
}
]
}
下面是作为多行字符串的相同 NFC 标签数据:
TagRead
Optional script parameter
2
This is the content from the NFC card.
T
1
https://example.com
U
1
注释
-
同一时间只能进行一次读取操作。如果在执行取消操作时正在进行读取操作,则取消读取操作。
-
打开 URL 脚本步骤可用于打开 URL,例如从读取 NFC 标签获取的 URL。
示例 1
启动单个 NFC 标签的读取,并在达到 NFC::Timeout 字段中指定的超时值后停止。读取标签后,将在“解析结果”子脚本指定的字段中设置标签中的数据,该结果将从“扫描一次完成”子脚本中调用。
主脚本:扫描一次
转到布局 [ "NFC Tag" ; Animation:None ]
配置 NFC 读取 [ 操作:读取 ; 脚本:"扫描一次完成" ; 参数:"The current date and time is " & Get ( 当前系统时间 ) ; 超时:NFC::Timeout ; 将结果格式化为 JSON:1 ]
子脚本 1:扫描一次完成
设置变量[ $scriptParam ; 值:Get ( 脚本参数 ) ]
执行脚本 [指定:来自列表 ; "解析结果" ; 参数: $scriptParam ]
显示自定义对话框: [ "NFC 搜索完成" ; $scriptParam ]
子脚本 2:解析结果
由于将结果格式化为 JSON 在“扫描一次”脚本的“配置 NFC 读取”脚本步骤中设置为非零值,因此“解析结果”脚本会将标签数据解析为 JSON 对象。
新建记录/请求
设置字段 [ NFC::Text ; Get ( 脚本参数 ) ]
设置字段 [ NFC::Tag ; JSONGetElement ( NFC::Text ; "payloads[0].primary" ) ]
设置字段 [ NFC::PayloadCount ; JSONGetElement ( NFC::Text ; "payloadCount" ) ]
设置字段 [ NFC::Result ; JSONGetElement ( NFC::Text ; "action" ) & JSONGetElement ( NFC::Text ; "error" ) ]
设置字段 [ NFC::ReadTimestamp ; Get ( 当前系统时间 ) ]
设置字段 [ NFC::ID ; JSONGetElement ( NFC::Text ; "payloads[0].identifier" ) ]
设置字段 [ NFC::Type ; JSONGetElement ( NFC::Text ; "payloads[0].type" ) ]
提交记录/请求 [ 包括对话框:关闭 ]
如果您想使用多行字符串,请将将结果格式化为 JSON 选项设置为零。然后将“解析结果”脚本更改为以下内容:
新建记录/请求
设置字段 [ NFC::Text ; Get ( 脚本参数 ) ]
设置字段 [ NFC::Tag ; GetValue ( NFC::Text ; 6 ) ]
设置字段 [ NFC::PayloadCount ; GetValue ( NFC::Text ; 4 ) ]
设置字段 [ NFC::Result ; GetValue ( NFC::Text ; 1) & GetValue ( NFC::Text ; 2 ) ]
设置字段 [ NFC::ReadTimestamp ; Get ( 当前系统时间 ) ]
设置字段 [ NFC::ID ; GetValue ( NFC::Text ; 5) ]
设置字段 [ NFC::Type ; GetValue ( NFC::Text ; 7) ]
提交记录/请求 [ 包括对话框:关闭 ]
示例 2
启动多个 NFC 标签的读取,并在达到 NFC::Timeout 字段中指定的超时值或取消扫描时停止。读取标签时将在“解析结果”子脚本指定的字段中设置标签中的数据(请参阅示例 1)。
主脚本:扫描多次
配置 NFC 读取 [ 操作:读取 ; 脚本:"解析结果" ;参数:"扫描开始于 " & Get ( 当前系统时间 ) ; 超时:NFC::Timeout ; 持续读取:1 ; 将结果格式化为 JSON:1]
转到布局 [ "NFC 扫描列表"; 动画:无 ]
示例 3
如果 NFC 记录为“U”(表示有效负载为 URL),则发起标签读取并尝试打开 URL。在达到 NFC::Timeout 字段中指定的超时值或取消扫描时停止扫描。读取标签后将在“解析结果”子脚本指定的字段中设置标签中的数据(请参阅示例 1),该结果将从“通过扫描打开”子脚本中调用。
主脚本:扫描并打开
配置 NFC 读取 [ 操作:读取 ; 脚本:"通过扫描打开" ; 参数:"扫描开始于 " & Get ( 当前系统时间 ) ; 超时:NFC::Timeout ; 将结果格式化为 JSON:1 ]
转到布局 [ "NFC 扫描列表"; 动画:无 ]
子脚本:通过扫描打开
设置变量[ $scriptParam ; 值:Get ( 脚本参数 ) ]
执行脚本 [指定:来自列表 ; "解析结果" ; 参数: $scriptParam ]
提交记录/请求 [ 包括对话框:关闭 ]
If [ NFC::Type = "U" ]
打开 URL [ 包括对话框:开启 ; NFC::Tag ]
End If