上一主题: 如何基于报告数据对象预填充组合复选框下一主题: 如何在字段中使用 JavaScript 表达式


如何使用用户输入预填充选择框

您可以使用用户在表单的一个或多个字段中提供的输入来决定选择框中的值。 当您想从数据源为用户提供两个带有多个有效选择的选项集,但不想使得该用户能够指定自定义选择时,此技术非常有用。 此选项因而帮助强制执行用户选择的标准化和有效性,一般的,同时仍然向用户提供多个选项以供选择。

该技术的一个常见应用为带有国家/地区和州/省选择框的表单。 使用 reportobjid 和 reportobjvars 属性时,您可以对州/省选择框进行配置,以便只显示该用户所选国家/地区的州/省。

要使用这个基于用户的选择项预填充选择框的技术,请遵循以下步骤。 该过程使用这个国家-州情况作为例子。

  1. 在报告构建器中,创建一个数据对象,在数据源(如 MDB)中查询要在第一个选择框中显示的数据。 该查询必须返回所有可能值的列表,并使用该列表填充该组合框。 该步骤是基于报告数据对象预填充组合框过程的一部分。

    在我们的这个运行示例中,会创建一个报告数据对象,以便从数据库检索国家/地区列表。

    显示表单时,报告数据对象将运行,并使用产生的数据填充组合框。

    记录数据对象的 ID 用于稍后引用。

    考虑以下示例查询用于 MDB 的数据对象。 该示例将返回可用于该表单相连服务或服务选项的国家/地区列表

    SELECT country_id,country_name from my_country_table
    

    此查询将执行以下操作:

  2. 在表单上,添加第一个选择框;它是表单元素之一。
    1. 对于 _id 属性,请指定有含义的值,然后保存表单。 指定 reportobjvars 属性时,记录该值以便稍后参考。
    2. 对于名为 reportobjid 的 HTML 属性的值,请指定数据对象的 id,然后保存表单。

    注意:使用数据对象填充组合框时,不要向选择框添加任何选项,因为用户打开表单时,这些选择将被忽略(不使用)。 选择框的任何选项都被忽略,仅数据对象“有用”。

    1. 对于选择框的多个属性,请指定“False”,以便用户在该组合框中只能选择一个选项。 保存表单。
    2. 对于标题属性(工具提示文本),可以可选地指定说明文本,如“单击箭头并滚动来选择一个国家/地区”。保存表单。
    3. 可自行决定是否将选择组的默认显示文本从“选择”重命名为有含义的名称,方法是通过在“组件树”上选择元素,并在树顶部单击“重命名”图标。

      注意:如果不同区域设置的用户使用该表单,则可选择性地对该工具提示文本或选择框的名称进行本地化

    4. 保留该值属性为空。 使用查询返回的第一个结果填充此值。
  3. 再创建一个报告数据对象,以便基于第一个选择框中的用户选择从数据库检索值列表。 在该报告数据对象的查询中,指定一些使用用户在该表单其他字段中提供的输入进行填充的报告变量。

    在我们这个运行示例中,将创建第二个报告数据对象,以便基于用户选择的国家/地区从数据库检索州/省。 按照步骤 1 中的指南创建第二个报告数据对象。

  4. 在表单上,添加第二个选择框。 该框将基于用户在第一个选择框中的选择进行预填充。 按照步骤 2 中的指南创建第二个选择框,但要考虑以下事项:
  5. 在第二个选择框中,使用下列格式指定 reportobjvars 属性:$({'reportvar':value})。

    有效为下列内容之一:

    在我们这个运行示例中,将创建第二个选择框,以便基于用户选择的国家/地区用数据库中的州/省进行填充。 对于州/省选择框的 reportobjvars 属性,指定名为 ca_fdGetSelectedOptionValues 的预定义 JavaScript 函数,如下所示:

    $({'selected_country':ca_fdGetSelectedOptionValues ('<form _id> ','country' )[0]})
    
    form _id

    指定包含第一个选择框的表单的 _id 属性值。 您要在第 2 步中引用该表单。

    country

    指定第一个选择框的 _id 属性值。 您要在第 2 步创建和记录该值。

  6. 在第一个选择框中,一旦用户在第一个选择框中进行了选择,则会设置 onchange 属性,以便检索第二个选择框的数据。 对于 onchange 属性,请指定名为 ca_fdFetchSelectData 的预定义 JavaScript 函数,格式为:
    ca_fdFetchSelectData('<form _id>','<field _id>'); 
    
    form _id

    指定包含第二个选择框的表单的 _id 属性值。 您要在第 4 步中引用该表单。

    field_id

    指定包含第二个选择框的表单的 _id 属性值。 您要在第 4 步创建和记录该值。

    在我们的运行示例中,会将国家/地区选择框的 onchange 属性设置为以下内容:

    ca_fdFetchSelectData('<form _id>','<state field _id>'); 
    
  7. 测试表单以确认它能够如您所愿的正常工作。

作为一项最佳实践,在生产环境中使用之前,请在测试环境中使用某个服务测试该表单。