在脚本中使用全局脚本编写选项,以增强故事

学习目标

  • 使用全局脚本选项增强故事。

全局脚本变量和 URL 参数

LSC_Property Binding

LSC_Property Binding

LSC_Property Binding

LSC_Property Binding

LSC_Property Binding

全局脚本变量

在之前的课程中,我们使用本地脚本变量。它们是在单个脚本块中使用 var 函数定义的。该值只能在该特定块内访问,无法从外部访问。

全局脚本变量定义为"故事级别的自有固定对象"。这意味着可以从故事中的所有脚本块访问它们。

在下面的示例中,你可以看到 SAP Analytics Cloud 故事*"大纲*"选项卡和"脚本变量"面板。您可以:

  1. 在故事的" 大纲 "选项卡中创建新脚本变量

  2. 命名脚本变量

  3. 选择脚本变量的数据类型

  4. 使脚本变量可用作 URL 参数。对于 数组 类型变量和非基本类型变量( string 、 boolean 、 integer 和 number 以外的类型),URL 参数函数不适用,默认情况下会禁用此选项。

如上述步骤中所述,使用全局脚本变量的步骤 1-4。

使用全局脚本变量,可以将 URL 中的参数传递到故事中。例如,您可以:

  • 传递一个值,该值用作维的筛选器

  • 传递用于定义特定布局的值。

如果要将全局脚本变量作为 URL 参数传递,则必须使用以下格式在 URL 中以 p_ 作为变量名称的前缀:<yourAppURL>&p_<VariableName>=<VariableValue>

例如,<yourAppURL>&p_viewMode=condensed。此场景用于练习,因此您将在本课的后面看到创建该场景的步骤。

使用作为"URL"参数公开的脚本变量时,这些变量在故事的初始加载时设置。

使用"启用动态 URL"选项,还可以在故事使用期间更新 URL 值。例如,当用户使用 URL 参数 p_Entity=Germany 打开故事并在查看模式下将过滤器更改为法国。然后,URL 参数更新为 p_Entity=France,而无需完全重新启动故事。然后,用户还可以将此 URL 加入书签,并与其他人共享,确定将应用相同的过滤器。

注意

性能:

在可能的情况下,使用本地脚本变量而不是全局脚本变量。

属性绑定

在之前的课程中,你查看了使用直接输入手动定义微件的项目,并使用脚本编写动态定义微件的项目。在本课中,我们将了解如何使用属性绑定****动态定义微件的项目。

属性绑定功能使故事设计人员可以选择将值绑定到以下对象之一:

  • 脚本变量

  • 模型变量

  • 磁贴过滤器和变量

微件值绑定是为属性创建动态值的简单方法,例如"列表框"微件的项目。

在以下示例中,可以看到一个列表框,其中显示表的已定义过滤器值。所选条目将写回到全局脚本变量。

SAP Analytics Cloud 微件值绑定。“生成器”面板“数据源类型”值及其在表中显示的位置(顶部)。“生成器面板”中的“脚本变量”以及在故事的“大纲”(底部)中查看脚本变量。

简单微件的值可以绑定到以下值之一:

  • Primitive-type 脚本变量

  • 应用程序属性

  • 磁贴过滤器和变量

  • 模型变量

注意

支持的类型因微件而异。

支持的绑定类型(按小部件)

值绑定可用于各种不同的微件。以下列表提供了微件和支持的绑定类型的概览:

  1. 列表框 、 下拉列表 、 复选框 组和单选按钮组

  • 可绑定值: 标识 、 显示文本

  • 支持的绑定:脚本变量、微件筛选器和变量以及模型变量

  1. 输入字段 、 文本区域

  • 可绑定值: IDText

  • 支持的绑定:脚本变量、微件筛选器和变量、模型变量和故事属性(包括当前用户/时间/日期、上次修改日期、上次修改日期/时间、上次修改者、创建者)

  1. 滑块

  • 可绑定值: 当前值

  • 支持的绑定:脚本变量、微件筛选器和变量、模型变量

  1. 范围滑块

  • 可绑定值: 起始 值和 结束值

  • 支持的绑定:脚本变量、微件筛选器和变量、模型变量

  1. 图像

  • 可绑定值: 图像 URL

  • 支持的绑定:脚本变量

您还可以利用在运行时回写功能的选项。这样,你就可以自动将用户选择的值分配给全局脚本变量,全局脚本变量可能在其他脚本或微件中使用。

全局脚本对象和函数

全局脚本对象充当容器或库。它是故事中不可见的一部分。

全局脚本对象(顶部、橙色)和全局脚本函数(底部,蓝色)。

可以使用以下语法调用脚本函数: <ScriptObjectName>.<ScriptFunctionName>();

作为故事设计人员,你可以使用 函数来封装某些可在其他脚本函数(如事件处理程序)中使用的脚本逻辑。这样可以防止代码重复,并使故事维护更容易。添加脚本对象后,可以在此对象上创建函数。每个脚本函数都具有:

  1. 可配置 名称 (必填)

  2. 返回类型 (可选)

  3. 参数 (可选)

从上到下列出编号为 1 到 3 的脚本函数生成器面板。1.可配置名称(必填)、2 返回类型(可选)和 3 个参数(可选)。

可以在脚本中像访问其他微件一样使用其名称访问脚本对象。在脚本对象的函数中,你可以访问故事中的所有对象,例如微件、全局变量或弹出窗口。

使用输入参数和返回类型

在以下示例的左侧,可以看到脚本对象 Utils 和名为 deviceSize 的脚本函数。

它使用宽度和高度作为输入参数,并返回包含大小和方向的数组。

在右侧,您可以看到以下内容:

  1. 脚本函数中的脚本

  2. 脚本函数的用法

  3. 控制台中显示的结果

左侧突出显示返回类型(蓝色)和参数(橙色)的脚本函数面板。数字 1 到 3 在脚本函数中显示脚本,2.脚本功能的使用,以及 3.结果。1 和 2 都有以蓝色和橙色突出显示的返回类型和参数的示例。

使用基于模式的函数

使用基于模式的函数,您可以通过仅提供输入和输出示例(而不是编写脚本代码)来创建基于字符串的函数。例如,你可以将电子邮件地址(如 john.doe@sap.com)转换为名称(如 John Doe)。

SAP Analytics Cloud 基于模式的函数面板(右侧),显示步骤 1-5,如图所示。

你可以从故事的*"大纲*"中,创建基于模式的函数作为"脚本对象"的子代。

  1. 添加基于模式的函数 选择"添加基于模式的函数",将其添加到故事中。完成此操作后,必须通过输入和输出训练示例创建模式。

  2. 属性 在名称字段中为函数添加名称。还可以向函数添加可选的"说明"。

  3. 创建模式 选择"创建模式"旁边的*"添加* "图标。在*"训练示例*"下,定义输入和输出(例如*,Input:* max.mustermann@sap.com 将变为 Output: Max Mustermann)。 有时,由于潜在的不明确性,一个示例是不够的。在这种情况下,您可以通过为每个训练示例选择添加 图标来使用最多三个训练示例。

  4. 创建/重置 选择"创建",以便机器学习算法开始查找与每个示例匹配的模式。 更改训练示例后,模式将回退到其默认值,仅返回输入。如果要撤销对新训练示例或已修改训练示例的更改,请选择重置。这会将基于模式的函数设置为最后一个工作模式。

  5. 验证模式 如果模式创建成功,则可以通过输入遵循训练示例模式的输入示例来验证模式。如果输入不符合上述模式的示例,则 函数将保留其缺省模式,仅输出输入。要验证模式,请选择验证模式旁的添加 图标。在输入字段和输出字段中输入测试示例,您应该会看到正确的输出。

cast() 函数

简单和多个过滤器值格式的示例。

您已经了解到,通过为其分配值来定义本地脚本变量的数据类型。这适用于所有简单的数据类型,例如 booleanstringinteger

在上面的示例中,您可以看到以黄色突出显示的简单过滤器。简单筛选器的脚本为:

var mySimpleFilter = "201901";
Table_1.getDataSource().setDimensionFilter("0CALMONTH", mySimpleFilter);

但是,如果您尝试分配应表示多个过滤器值格式的 JSON 格式,则该方法将不起作用。

var myComplexFilterfilter = {values:["201901", "201902"], exclude: true};

上述代码将显示错误消息,因为系统不知道如何解释 JSON {values:\["201901", "201902"\], exclude: true}

借助 cast(type, arg) 函数,可以指定数据类型并传递参数。

var myComplexFilterfilter = cast(Type.MultipleFilterValue, {values:["201901", "201902"], exclude: true});

上述代码指示脚本引擎对给定 JSON MultipleFilterValue 使用数据类型 {values:\["201901", "201902"\], exclude: true}

添加全局脚本变量作为 URL 参数

**业务场景:**团队中的某些报表查看者希望在打开故事时仅看到 KPI 磁贴,而其他查看者则希望在打开故事时看到完整故事。

由于将来不想维护故事的两个不同版本,因此你决定引入 URL 参数,以便能够启用压缩或完全启动行为。

添加并配置全局脚本变量,然后使用 onIntialization 操作将以下代码添加到故事中:

if (viewMode === "condensed") {
TS_Content.setVisible(false);
} else {
TS_Content.setVisible(true);
}

为每个组提供不同的 URL:

  • 您将 &p_viewMode=conversed 添加到报表查看者的 URL,这些查看者只希望在打开时查看故事中的 KPI 磁贴。

  • 将 &p_viewMode=full 添加到要在打开时查看详细故事的报表查看者的 URL。

此简短视频将引导你了解所需的最终故事和脚本。

视频:本节含 SAP 官方视频(视频 ID 1_pjl29bdn),需在 learning.sap.com 在线观看。

模拟步骤

以下练习模拟 SAP Analytics Cloud 中的高级模式,并引导您添加创建演示视频中显示的最终故事所需的脚本。

**任务流:**在本练习中,您将:

  • 将全局脚本变量 viewMode 添加到故事

  • 将脚本添加到 onIntialization 操作

  • 测试故事的 URL 参数

练习开始练习(SAP 官方交互式练习)

将变量值传递到其他页面

**业务场景:**以前,你通过脚本编写使用按钮筛选表来增强故事。你团队会请求附加功能,以便能够在单独的故事页面上查看一些更详细的数据。预期是,使用按钮应用于第一页的过滤器也应用于详细信息页面。

你可以向故事中添加全局脚本变量,然后为按钮的 onClick 事件分别添加 year = "2018";year = "2019";year = "all";

创建新页面后,将以下脚本添加到 onActive 事件:

if (year === "all") {
TBL_Details.getDataSource().removeDimensionFilter("0CALYEAR");
} else {
TBL_Details.getDataSource().setDimensionFilter("0CALYEAR", year);
}

此简短视频将引导你了解所需的最终故事和脚本。

视频:本节含 SAP 官方视频(视频 ID 1_j0cq57gi),需在 learning.sap.com 在线观看。

模拟步骤

以下练习模拟 SAP Analytics Cloud 中的高级模式,并引导您添加创建演示视频中显示的最终故事所需的脚本。

**任务流:**在本练习中,您将:

  • 将全局脚本变量 year 添加到故事中

  • 向 onActive 事件添加脚本

  • 测试故事

练习开始练习(SAP 官方交互式练习)