配置 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

调用脚本的原因。返回:

  • TagRead,如果已读取 NFC 标签

  • CanceledByUser,如果用户点击“取消”按钮

  • CanceledByError,如果发生错误

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