调查表中的 JavaScript 函数

可使用 pulldata("@javascript") 函数来调用 JavaScript 函数,由此即可使用 XLSForm 无法提供的高级技术和逻辑。

可以在 Survey123 Connect脚本选项卡上管理和编辑 JavaScript 函数。 在此选项卡上,您可以创建一个 JavaScript 文件、查看代码并测试函数。 该选项卡不能完全替代集成发展环境 (IDE),该集成发展环境可以提供代码验证和最佳实践分析以帮助开发 JavaScript 函数,但该选项卡旨在帮助将这些函数集成到 Survey123 中。

Survey123 Connect 中的脚本工具

以下工具在 Survey123 Connect脚本选项卡的菜单上可用:

  • 脚本文件 - 显示位于调查的 Scripts 文件夹中的所有 JavaScript 文件。 选择要查看和编辑的文件。
  • 打开脚本文件夹 - 在调查的 Scripts 文件夹的位置启动文件浏览器。
  • 新建脚本文件 -在调查的 Scripts 文件夹中创建脚本文件。 输入文件名,然后单击创建
  • 选择函数 - 在打开的文件中突出显示第一个函数,并显示要测试的参数。
  • 保存 - 保存对已打开的文件的更改。
  • 启动外部编辑器 - 使用打开的文件启动系统默认 JavaScript IDE。

单击选择函数工具,通过为输入每个参数值并查看输出来测试文件中第一个函数的行为。 完成该函数后,您可以复制此处显示的 pulldata 语句并将其粘贴到 XLSForm 中。 如果您登录到组织,请右键单击任意参数,然后根据需要单击粘贴令牌

注:
基本语法错误将显示在脚本选项卡上,并且在行号旁边带有错误指示符。 错误处理必须在 JavaScript 函数内实施。 控制台输出将显示在脚本选项卡上,这样一来,通过在函数中包含控制台消息,便可看到与输出一起显示的错误、警告和信息消息。

基本语法

可以调用自定义 JavaScript 函数以返回值。 使用以下语法通过 pulldata("@javascript") 函数调用自定义 JavaScript 函数:

pulldata("@javascript", "yourJSFile.js", "yourFunction", "parameter1", "parameter2")

必须将您的自定义 JavaScript 文件存储在调查目录中名为 scripts 的文件夹中。 在以上示例中,JavaScript 函数需要两个参数,但是可以添加任意数量的函数参数。

可以使用 pulldata("@json") 函数从 JavaScript 函数生成的 JSON 对象中提取特定值。 有关详细信息,请参阅从 JSON 中检索值

有时,尤其是在使用 JavaScript 访问 web 服务和安全 ArcGIS 服务时,您可能需要设备和用户属性的访问权限。 可以使用 pulldata("@property") 函数提取有关提交调查响应的设备以及提交这些响应的登录用户的信息。 有关详细信息,请参阅设备和用户属性

提示:

要在 ArcGIS 要素图层上进行空间和属性查询,请考虑使用 pulldata("@layer") 函数而不是 pulldata("@javascript")pulldata("@layer") 语法专门用于要素图层查询,并且适用于公共调查。 有关详细信息,请参阅查询要素图层

重复

可以将重复中的所有值传递到 JavaScript 函数。 pulldata("@javascript") 函数支持两种从重复中检索值的实现方式。 使用哪种实现方式取决于您是否需要 JavaScript 函数与重复中的一个或多个字段进行交互。

如果将重复中的问题作为函数参数传入,则 JavaScript 函数将从指定问题中接收值的数组,如下所示:

pulldata("@javascript", "yourJSFile.js", "yourFunction", ${question1})

如果将重复名称作为函数参数传入,则 JavaScript 函数将接收参数作为重复中所有值的行数组,如下所示:

pulldata("@javascript", "yourJSFile.js", "yourFunction", ${repeat1}, "question1")

每个行都会生成一个 JSON 对象,其中单个问题将作为该对象中的属性。

注:

Survey123 Web 应用程序中不支持使用 pulldata("@javascript") 访问重复中的值。您可以在 Web 应用程序中使用 join() 来为重复中的单个问题采集值,以将值列表转换为字符已分隔的字符串,然后在 JavaScript 函数中分解值。

Survey123 3.14 版本开始,通过 JavaScript 函数传递的空值现在可以返回 undefinednull。 因此,您必须编写 JavaScript 函数来考虑 undefined 值的可能性。

已知局限性

以下是在调查表中使用 JavaScript 函数的已知局限性:

  • 不支持文档对象模型 (DOM)。
  • 不支持诸如 JQuery、Ember 和 Angular 等框架。
  • 无法访问本地文件。
  • 不支持异步调用。
  • JavaScript 函数仅在相应用户完成的表单中才受支持,这些用户与表单作者具有相同组织。
  • 公共调查不支持 JavaScript 函数。
  • 无法在 Survey123 web 应用程序上的 pulldata("@json") 函数内调用 pulldata("@javascript") 函数。