# 创建 On-demand 模板应用程序

On-demand 模板应用程序是一个常规 Qlik Sense 应用程序，它有一个重要的差别：其加载脚本包含数据绑定表达式，用于构造在数据源上进行的查询。在生成 On-demand 应用程序时，会使用这些数据绑定表达式，从选择应用程序的选择状态读取值，并将这些值绑定到模板应用程序脚本，以便所生成的应用程序将使用一个数据子集来加载，该子集可以由用户进行控制。

模板应用程序通常作为选择应用程序连接到同一个数据源。选择应用程序的加载脚本通常会加载聚合数据以减少数据量，同时仍提供重要维度和度量的交互式可视化。模板应用程序的加载脚本使用查询来加载更精细的受控数据子集。

模板应用程序必须公开其工作表，以便其他用户生成 On-Demand 应用程序。有关更多信息，请参阅[授予工作表、工作表组、书签和故事的访问权限](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/Share/make-public-or-private.htm)。

信息注释On-Demand 模板应用程序不直接加载数据。模板应用程序连接必须有效，但是要测试连接是否正常工作，您必须生成一个 On-Demand 应用程序。生成 On-Demand 应用程序后，加载脚本将由 On-demand 应用程序服务修改，以加载 On-demand 选择应用程序的选择项状态。如果 On-Demand 应用程序没有错误地生成，则可以确定模板应用程序中的连接可正常作用。

信息注释在开发按需模板应用程序时，请考虑应用程序的大小。根据您的部署，可能存在存储限制，或者使用大量存储可能会导致您的云部署进行扩展。有关详细信息，请与系统管理员联系。

## 模板应用程序的结构

模板应用程序使用 On-Demand 应用程序导航链接来链接到选择应用程序。应用程序导航链接包括用来控制在使用数据加载 On-Demand 应用程序时所查询的记录数的属性。模板应用程序的加载脚本包含数据绑定表达式，这些表达式指定使用选择应用程序中的哪些字段数据来构造将数据加载到 On-Demand 应用程序中时所发出的查询。

信息注释

在 June 2020 中引入了数据绑定表达式的新语法。之前的语法和前缀 od\_、ods\_、odo\_、odso\_ 和 odb\_ 的表现和之前一样，包括数量限制、\_n 后缀以及格式规范。如果您的应用程序应在 June 2020 之前的 Qlik Sense 版本上运行，请使用旧语法。对于旧语法，请参阅[创建 On-demand 模板应用程序（旧版）](https://help.qlik.com/zh-CN/sense/April2020/Subsystems/Hub/Content/Sense_Hub/LoadData/creating-OnDemand-template-app.htm)。

当使用新前缀时，\_n 后缀不受支持。

基本数据绑定表达式的形式如下：

$(odag\_FIELDNAME)

odag\_ 前缀用于将选择应用程序的选择项状态绑定到 On-demand 应用程序的加载脚本（通过复制模板应用程序创建）。数据绑定表达式中位于 odag 前缀后面的部分必须是与选择应用程序中的字段相匹配的名称。生成 On-demand 应用程序时，选择应用程序的当前选择项状态用于获取要针对每个字段绑定的所需值。在新创建的按需应用程序的加载脚本中，$(odag\_FIELDNAME) 表达式的每个实例都将替换为针对选择应用程序的选择项状态中的相应字段选择的值列表。

还提供了用于更专门化数据绑定的其他前缀。要了解有关特殊情况的裁剪和优化加载语句的更多信息，请参见[On-Demand 模板应用程序中的绑定表达式](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/LoadData/bind-expressions-OnDemand-template-app.htm)。

On-demand 绑定可以直接插入加载脚本中的 SELECT 和 WHERE 语句中。当您将绑定直接添加到 WHERE 语句中时，很容易将它们与语句中的其他条件结合起来。

在创建加载脚本时，可以添加占位符变量 $(odagActive)。这使您能够将样本数据加载到模板应用程序中，以便可以在不加载所有数据的情况下创建动态视图的主图表。

信息注释

如果更改模板应用程序的脚本并插入新的绑定变量，则必须创建新的按需应用程序导航链接以替换任何现有的应用程序导航链接。如果不这样做，对于使用该模板应用程序的现有按需应用程序，将不会发送相应字段的选择。

下面的示例演示了 On-demand 模板加载脚本示例。

示例： 添加一些样本数据

此示例添加示例值，以便即使绑定未完成也可以加载应用程序。

```

IF '$(odagActive)'='' THEN
trace ODAG variables not inserted! Loading sample data.;
SET 'odag_Origin Code' = '''LAX''';
SET 'odag_Destination Code' = '''JFK''';
SET odagn_Year = 2015;
SET odag_Quarter = '''1''';
SET 'odag_Ticket Carrier Code' = '''CA''';
SET 'odag_Fare Class' = '''X''';
END IF;
```

示例： 在模板应用程序中加载数据

下面是一个示例加载脚本，用于加载示例数据并使用生成的 odag\_FIELDNAME 绑定对其进行筛选。odagn\_&lt;Field Name&gt; 绑定选择双重值中的数字，默认情况下不没有引号。

```

SQL SELECT *
FROM FlightDB.Flights
WHERE "Origin Code" IN ($(odag_Origin Code))
AND "Destination Code" IN ($(odag_Destination Code))
AND "Year" IN ($(odagn_Year))
AND "Quarter" IN ($(odag_Quarter))
AND "Ticket Carrier Code" IN ($(odag_Ticket Carrier Code))
AND "Fare Class" IN ($(odag_Fare Class));
```

## 单点登录 (SSO)

按需应用程序可将 单点登录 (SSO) 用于支持 SSO 的数据源。必须配置引擎和数据源以允许 SSO。

一旦为 SSO 配置了引擎和数据源，则必须通过将以下语法添加至模板应用程序脚本来启用 SSO。

`///!ODAG_SSO`

在生成 On-Demand 应用程序并每次重新载入时，On-demand 应用程序服务 解析脚本。

当通过 SSO 加载 On-Demand 应用程序时，会将最终用户的身份发送至数据源。最终用户必须具有在模板应用程序的数据连接中使用的源的访问权限。仅会载入这些源中用户有访问权限的数据，即使选择了更大的数据集。