实现 CrossApplicationNavigation 服务

学习目标

  • 实现 CrossApplicationNavigation 服务,以在 SAP Fiori 应用之间导航

跨应用导航

使用 CrossApplicationNavigation 服务

在回顾目标映射和磁贴配置之后,我们想看看如何使用类 sap.ushell.services.CrossApplicationNavigation 来实现导航。

CrossApplicationNavigation 服务用于从一个 SAP Fiori 应用导航到另一个。接下来我们将了解如何使用类 sap.ushell.services.CrossApplicationNavigation 实现导航,以及如何在以 SAPUI5-freestyle 应用形式实现的自定义 SAP Fiori 应用中使用 CrossApplicationNavigation 服务。

让我们看看使用 CrossApplicationNavigation 服务触发导航的代码片段。

代码片段的截图,如文中所述。

该代码片段展示如何使用 sap.ushell.services.CrossApplicationNavigation。在 display 的 onInit 实现中,我们将在第一行代码检查应用是否运行在 SAP Fiori Launchpad 中。

请记住 SAPUI5 的黄金法则之一是 Every SAP Fiori app must run as a web app。这意味着应用也应能够在 SAP Fiori Launchpad 之外运行,当然功能会受限,但它可以运行。

如果可以解析对 sap.ushell.Container.getService 的引用,则对 getService 函数的引用会存储在变量 _fnGetService 中。接下来我们可以调用该函数并传入值 CrossApplicationNavigation 作为参数。在实现的第三行,我们调用函数 hrefForExternal,并将语义对象的名称和操作作为参数传入该函数。

参数 _hash 将包含计算出的哈希。在所示示例中,该值为 #UX410NavEnd00-display。这就是在目标映射配置期间自动创建的值。

代码片段中 onPress 函数的实现将直接触发导航。

正如你在实现中所见,也可以将简单的键值对作为导航参数传递给目标。目标应用能够获取这些数据并使用它们。

接下来,我们将看看展示如何使用导航参数的代码片段。

代码片段的截图,如文中所述。

在代码片段中,你可以看到如何处理在基于 intent 的导航期间传递的参数。导航发起方发送的导航参数将存储在目标应用的参数 startupParameters 中。在我们的示例中,第一个应用传递了名称为 helloText、值为 Hello UX410 的参数。请记住,参数 helloText 在目标应用内部按数组处理。

使用 CrossApplicationNavigation 服务在 SAP Fiori 中导航

现在来看一个端到端示例,以说明 CrossApplicationNavigation 服务的实现。

假设用户在 SAP Fiori Launchpad 中有两个应用。这两个应用名为 startnavigation 和 endnavigation。为完成一个业务流程,用户必须在完成该流程的第一个任务后导航到另一个应用,向第二个应用传递参数,并在第二个应用中继续操作。

接下来我们将观看一系列视频,说明如何使用 CrossApplicationNavigation 服务从 startnavigation 应用导航到 endnavigation 应用。

观看第一个视频,了解如何实现链接和按钮控件,以从 startnavigation 应用导航到 endnavigation 应用。

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

以下代码展示如何实现 onInit 函数,以检查应用是否运行在 SAP Fiori Launchpad 中。

sap.ui.define([
"sap/ui/core/mvc/Controller"
],
/**
* @param {typeof sap.ui.core.mvc.Controller} Controller
*/
function (Controller) {
"use strict";

return Controller.extend(
"student##.sap.training.startnavigation.controller.Main", {

onInit: function () {
this._fnGetService = sap.ushell &&
sap.ushell.Container &&
sap.ushell.Container.getService;
this._oCrossAppNavigation = this._fnGetService &&
this._fnGetService("CrossApplicationNavigation");

this._hash = (this._oCrossAppNavigation&&
this._oCrossAppNavigation.hrefForExternal({

target : {
semanticObject : "UX410NavEnd00",
action: "display"
}

})) || "";

let _oLink = this.byId("idNavLink");
_oLink.setHref(this._hash);
}

以下代码展示如何在项目 startnavigation 的 Main 视图的控制器 Main.controller.js 中实现 onPress 事件处理程序。

onPress : function(oEvent) {
if(this._oCrossAppNavigation) {
var oHref = this._oCrossAppNavigation.toExternal({
target : {
shellHash : this._hash
}
})
}
}

观看下一个视频,了解如何扩展 startnavigation 应用的实现,并向导航目标传递参数。

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

以下代码展示如何向导航目标传递参数。

onInit: function () {
this._fnGetService = sap.ushell &&
sap.ushell.Container &&
sap.ushell.Container.getService;
this._oCrossAppNavigation = this._fnGetService &&
this._fnGetService("CrossApplicationNavigation");

this._hash = (this._oCrossAppNavigation&&
this._oCrossAppNavigation.hrefForExternal({
target : {
semanticObject : "UX410NavEnd00",
action: "display"
}

})) || "";

let _oLink = this.byId("idNavLink");
_oLink.setHref(this._hash);
}

观看该系列的最后一个视频,了解如何扩展 endnavigation 应用的实现,以获取从另一个应用传递的参数。

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

以下代码展示如何扩展 endnavigation 应用,以获取从另一个应用传递的参数。

sap.ui.define([
"sap/ui/core/mvc/Controller"
],

function (Controller) {
"use strict";

return Controller.extend(
"student##.sap.training.endnavigation.controller.Main", {
onInit: function () {
var oComponentData = this.getOwnerComponent().getComponentData();
if(oComponentData && oComponentData.startupParameters &&
oComponentData.startupParameters.helloText) {
var sHelloText = oComponentData.startupParameters.helloText[0];
var oLabel = this.byId("idInfo");
oLabel.setText(sHelloText);
}
}
});
});

如何在 SAP Fiori 中导航

有关本演示的步骤和数据,请参阅练习 在 SAP Fiori 中导航

在 SAP Fiori 中导航

注意

SAP Business Technology Platform 及其工具是云服务。由于云软件的特性,字段和按钮的命名以及步骤可能与练习解决方案不同。

警告

请注意,在某些代码块中,未显示先前实现步骤的代码。在以下步骤中,请不要删除你在先前步骤中添加的任何代码。

注意

在以下练习中,请将 ## 替换为你的用户组。

提示

不要在意代码编辑器显示的关于缺少 id 的错误。如果你希望应用启用 UI 适配(UI Adaptation),则 ID 是必需的。如果不是这种情况,你只需在 manifest.json 文件中将 FlexEnabled 属性设置为 False。

业务示例

在 SAP Fiori Launchpad 中,用户有两个应用。为完成一个业务流程,用户必须在完成该流程的第一个任务后导航到另一个应用,向第二个应用传递参数,并在第二个应用中继续操作。

任务 1:为第一个应用创建 SAPUI5 项目

步骤

  1. 使用 SAP Fiori application 项目生成器创建带部署配置的新项目。

项目属性

参数

Project type

SAP Fiori application

Template Type

SAP Fiori

Template

Basic

Data source

None

View

Main

Module name

startnavigation

Application namespace

student##.sap.training

部署配置

参数

Target

ABAP

目标(Destination)

S4D_100

Name

ZUX410NavStar##

Description

UX410 navigation starter ##

Package

ZTRAIN_##

Transport Request

分配给你用户的传输请求,请参见事务 SE01

  1. 启动 SAP Business Application Studio。

  2. 要在 Welcome 页面上创建新项目,请选择磁贴 Start from template

  3. 从可用模板列表中选择 SAP Fiori application 并选择 Start

  4. 选择 SAP Fiori 作为 Template Type

  5. 选择 Basic 模板并选择 Next

  6. Data source 列表中选择 None 并选择 Next

  7. 输入 Main 作为 view name 并选择 Next

  8. 输入 startnavigation 作为 module name,输入 student##.sap.training 作为 namespace

  9. 在 Add deployment configuration 处选择 Yes 并选择 Next

  10. 选择 ABAP 作为目标,并从可用的目标(Destination)列表中选择目标 S4D_100

  11. 输入 ZUX410NavStar## 作为 ABAP Repository 的名称。

  12. 在描述字段中输入描述 UX410 navigation starter ##

  13. 输入 ZTRAIN_## 作为 package,并输入分配给你用户的传输请求。你可以在 S4D 系统中使用事务 SE01 找到分配给你用户的传输请求。

  14. 选择 Finish

  15. 移除生成的路由模式 :?query:,将其替换为空字符串。

  16. 打开文件 *manifest.json*

  17. 向下滚动到路由配置。

  18. 移除字符串字面量 :?query:,将其替换为空字符串。

  19. 通过向 *Main.view.xml* 的 page 控件添加新的 sap.ui.layout.VerticalLayout 控件,并向 VerticalLayout 控件添加 sap.m.Linksap.m.Button 控件作为 UI 控件,来实现基本的 startnavigation 项目。向新添加的控件添加以下属性。

sap.m.Button 控件的属性

属性

press

onPress

text

Navigate to Fiori-app using event handler

  1. 打开文件 *Main.view.xml*

  2. 添加值为 layoutXML-namespace alias,并赋值 sap.ui.layout

  3. 向生成的 sap.m.Page 控件的 content 聚合添加 sap.ui.layout.VerticalLayout

  4. VerticalLayout 控件添加 sap.m.Link 类型的控件,并分配第一个表格中列出的属性。

  5. 添加 sap.m.Button 类型的控件,并分配第二个表格中列出的按钮属性。

  6. 你的视图实现现在应如下所示:

<
mvc:View controllerName="student##.sap.training.startnavigation.controller.Main"
xmlns:mvc="sap.ui.core.mvc" displayBlock="true"
xmlns="sap.m"
xmlns:layout="sap.ui.layout">
<Page id="page" title="{i18n>title}">
<content>
<layout:VerticalLayout id="_IDGenVerticalLayout1">
<Link id="idNavLink"
text="Navigate to Fiori-app with link"/>
<Button id="_IDGenButton1"
press="onPress"
text="Navigate to Fiori-app using event handler"/>
</layout:VerticalLayout>
</content>
</Page>
</mvc:View>
  1. 使用 npm run deploy 命令构建 startnavigation 项目并将其部署到已连接的 SAP 系统 S4D_100

  2. 选择该项目,然后从上下文菜单中选择 Open in Terminal

  3. 在控制台中输入命令 npm run deploy

  4. 确认以开始部署。

  5. 关闭 Business Application Studio 中的所有标签页。

任务 2:为第二个应用创建 SAPUI5 项目

步骤

  1. 使用 SAP Fiori application 项目生成器创建带部署配置的新项目。

项目属性

属性

Template Type

SAP Fiori Generator

Template

Basic

Data source

None

View

Main

Module name

endnavigation

Application namespace

student##.sap.training

部署配置

属性

Target

ABAP

目标(Destination)

S4D_100

Name

ZUX410NavEnd##

Package

ZTRAIN_##

Transport Request

分配给你用户的传输请求,请参见事务 SE01

Description

UX410 navigation end ##

.env 内容

属性

UI5_USERNAME

TRAIN-##

UI5_PASSWORD

SAP 用户 TRAIN-## 的密码

  1. 如果尚未打开,请启动 SAP Business Application Studio。

  2. 在 SAP Business Application Studio 的 Get Started 页面中选择链接 New Project from template,或转到菜单项 FileNew Project from Template

  3. 选择 SAP Fiori Generator 作为 Template Type

  4. 选择 Basic 模板并选择 Next

  5. Data source 列表中选择 None 并选择 Next

  6. 输入 Main 作为 view name 并选择 Next

  7. 输入 endnavigation 作为 module name,输入 student##.sap.training 作为 namespace

  8. 在 Add deployment configuration 处选择 Yes 并选择 Next

  9. 选择 ABAP 作为目标,并从可用的目标(Destination)列表中选择目标 S4D_100

  10. 输入 ZUX410NavEnd## 作为名称 。

  11. 在描述字段中输入描述 UX410 navigation end ##

  12. 输入 ZTRAIN_## 作为包,并输入分配给你用户的传输请求。你可以在 S4D 系统中使用事务 SE01 找到分配给你用户的传输请求。

  13. 选择 Finish

  14. 移除生成的路由模式 :?query:,将其替换为空字符串。

  15. 打开文件 *manifest.json*

  16. 向下滚动到路由配置。

  17. 移除字符串字面量 :?query:,将其替换为空字符串。

  18. 通过向 *Main.view.xml* 的 page 控件添加新的 sap.ui.layout.VerticalLayoutcontrol,并向 VerticalLayout 插入以下 UI 控件,来实现基本的 endnavigation 项目。

sap.m.Label 控件属性

属性

id

idinfo

text

Hello world

  1. 打开文件 *Main.view.xml*

  2. 添加值为 layout 的 XML-namespace alias,并赋值 sap.ui.layout

  3. 向生成的 sap.m.Page 控件的 content 聚合添加 sap.ui.layout.VerticalLayout 类型的控件。

  4. VerticalLayout 控件添加控件 sap.m.Label,并分配表格中列出的属性。你的实现现在应如下所示:

<mvc:View controllerName="student##.sap.training.endnavigation.controller.Main"
xmlns:mvc="sap.ui.core.mvc" displayBlock="true"
xmlns="sap.m"
xmlns:layout="sap.ui.layout">
<Page id="page" title="{i18n>title}">
<content>
<layout:VerticalLayout>
<Label id="idInfo" text="Hello world"/>
</layout:VerticalLayout>
</content>
</Page>
</mvc:View>
  1. 使用 npm run deploy 命令构建 endnavigation 项目并将其部署到已连接的 SAP 系统 S4D_100

  2. 选择该项目,然后从上下文菜单中选择 Open in Terminal

  3. 在控制台中输入命令 npm run deploy

  4. 确认以开始部署。

  5. 如果系统要求你输入凭据,请输入用户 TRAIN-## 和你的密码

任务 3:在 SAP Fiori Launchpad 中配置两个磁贴

步骤

  1. 使用以下详细信息在 S4D 系统中创建两个语义对象。

语义对象配置

语义对象

语义对象名称

语义对象描述

UX410NavStart##

UX410NavStart##

用于 start app## 的语义对象

UX410NavEnd##

UX410NavEnd##

用于 end app## 的语义对象

  1. 启动 SAP GUI,并使用你的用户 TRAIN-## 登录信息登录 S4D 系统。

  2. SAP FioriConfiguration 的用户菜单中,选择 Define Semantic Object – Customer,或使用事务代码 /UI2/SEMOBJ。 如果你使用事务代码启动事务,请添加前缀 /n 。

  3. 选择 Edit 切换到编辑模式。

  4. 确认跨客户端消息。 如果出现消息告知你该表当前被另一个用户锁定,这意味着另一位课程学员正在为其练习运行该事务。确认该消息,等待另一位学员完成,然后重试。

  5. 在工具栏上选择 New Entries

  6. 使用表格中的数据添加语义对象配置:Semantic Object、Name 和 Description。

  7. 保存你的更改,并将其分配给传输请求。

  8. 确认传输分配对话框并关闭事务。 在完成配置后尽快关闭事务非常重要。如果你不退出,将会锁定该表。

  9. 使用以下表格中的属性,通过 Launchpad Content Manager 应用在 S4D 系统中创建目录:

目录配置

属性

标题

UX410_BC_##

ID

ZUX410_BC_##

  1. 打开 Chrome 浏览器。

  2. 在收藏夹栏中,选择 10 Developments4dhost10 S4D SAP Fiori Launchpad

  3. 输入你的凭据并登录。你可以保存密码以便将来登录。

  4. 如果 Quick Tour 弹出窗口打开,请将其关闭。

  5. 导航到 SAP Fiori Launchpad 空间,并启动 Launchpad Content Manager 应用。

注意

打开可能需要一些时间。 系统截图

  1. 应用启动后选择 Create

  2. 输入目录配置表中的值,并选择 Continue

  3. 选择一个已分配的传输请求并确认对话框。

  4. 使用 SAP Fiori Launchpad Designer 和以下表格中所示的配置属性,为应用 ZUX410NavStar## 创建磁贴映射。

Start 导航应用的目标映射配置

属性

语义对象

UX410NavStart##

操作

display

应用类型

SAPUI5 Fiori App

标题

UX410 start navigation

URL

/sap/bc/ui5_ui5/sap/zux410navstar##

ID

student##.sap.training.startnavigation

提示

如果你在创建目标映射时遇到错误,刷新浏览器标签页应该可以解决该问题。

  1. 如果 Launchpad Content Manager 应用仍处于打开状态,请刷新它,或再次打开它。

  2. Launchpad Content Manager 应用中搜索你新创建的目录。

  3. 选择 Open in Designer

  4. 在新目录内选择 Target Mapping 图标。

  5. 选择 Create Target Mapping

  6. 将表格中的属性输入到表单中。

  7. 选择 Save

  8. 使用以下表格中所示的配置属性,为应用 ZUX410NavEnd## 创建新的磁贴映射:

End 导航应用的目标映射配置

属性

语义对象

UX410NavEnd##

操作

display

应用类型

SAPUI5 Fiori App

标题

UX410 end navigation

URL

/sap/bc/ui5_ui5/sap/zux410navend##

ID

student##.sap.training.endnavigation

  1. 选择 Create Target Mapping

  2. 将表格中的属性输入到表单中。

  3. 选择 Save

  4. 使用以下属性在你的目录中创建两个静态磁贴:

Start 的标题配置

属性

标题

Navigation start

副标题

Group ##

语义对象:

UX410NavStart##

操作

display

End 的标题导航

属性

标题

Navigation end

副标题

Group ##

语义对象:

UX410NavEnd##

操作

display

  1. 选择第一个 Tiles 图标,并选择带 plus 符号的磁贴。

  2. 选择 App Launcher – Static

  3. 输入表格中提供的值。

  4. 保存你的更改。

  5. 重复操作以为第二个目标创建磁贴。

  6. 关闭 SAP Fiori Launchpad Designer 标签页,并退出 Content Manager 应用。

  7. 使用以下属性创建新的 Launchpad 空间,其中包含新的 Launchpad 页面

空间/页面配置的属性

属性

空间 ID

ZSPACE_##

空间描述

Space of group ##

空间标题

Navigation exercise ##

页面 ID

ZPAGE_##

页面描述

Page of group ##

页面标题

Navigation exercise ##

传输

使用分配给你用户的传输请求

  1. SAP Fiori Launchpad 启动 Manage Launchpad Spaces 应用。

  2. Spaces 表格的工具栏中单击 Create 按钮

  3. 选择 Also create a page 选项

  4. 输入上表中的值

  5. 单击 Create

  6. 将 SAP Fiori 目录 UX410_BC_## 分配给页面 ZPAGE_##,使用 Navigation exercise ## 作为节标题,并将目录中的磁贴添加到该页面。

  7. 单击新创建的页面并选择 Edit

  8. Section Title 输入字段中输入值 Navigation exercise ##

  9. 选择页面工具栏右侧的三个点,并单击标签为 Catalogs 的按钮。

  10. 在弹出的对话框中搜索目录 UX410_BC_##

  11. 选择该目录并按 Select

  12. 在每个磁贴上按标签为 Add 的按钮,以将该磁贴添加到页面 系统截图

  13. Save

  14. 将页面可见性设置为 Visible

  15. 返回到你新建空间 ZSPACE_## 的空间配置。 系统截图

  16. Edit 按钮进入编辑模式 系统截图

  17. 通过选择单选按钮将页面标记为已选中 系统截图

  18. Set Visible 按钮。

  19. Save

  20. 返回到 SAP Fiori Launchpad Home 页面。

  21. 创建名为 Z_BR_UX410_## 的新单一角色,并将空间 ZSPACE_## 添加到该角色。将你的用户 TRAIN-## 分配给角色 Z_BR_UX410_##

  22. 打开 SAP GUI 并登录 S4D 系统

  23. 启动事务 PFCG

  24. 在输入字段中输入值 Z_BR_UX410_## 并按 Single Role

  25. 单击 Menu 并确认要保存更改。

  26. Transaction 下拉字段中选择 SAP Fiori LaunchpadLaunchpad Catalog

  27. 搜索你的目录 ZUX410_BC_##,选择该目录并确认对话框。

  28. Launchpad Catalog 下拉字段中选择 SAP Fiori LaunchpadLaunchpad Space

  29. 在弹出的对话框中输入空间 ID ZSPACE_##,或使用 F4 值帮助搜索它,然后按 Continue

  30. 选择 User 标签页,并将你的 TRAIN-## 用户分配给该角色

  31. Save

  32. 测试你的配置。

  33. 打开 SAP Fiori Launchpad,如果它已打开则刷新浏览器页面。

  34. 选择 Navigation exercise ## 空间。

  35. 单击这些磁贴,并验证应用已显示

  36. 关闭 SAP Fiori Launchpad。

任务 4:使用 CrossApplicationNavigation 服务

实现链接和按钮控件,以从 Navigation start 应用导航到 Navigation end 应用。

步骤

  1. 实现 onInit 函数,使其检查应用是否运行在 SAP Fiori Launchpad 中。获取对 CrossApplicationNavigation 服务 ShellContainer 的引用,并将该引用存储在成员变量中。创建指向前一个任务中创建的 intent UX410NavEnd## - display 的导航链接,并将该导航链接分配给前一个任务中创建的 sap.m.Link 控件的 href 属性。

  2. 启动 SAP Business Application Studio 并打开开发空间 UX410

  3. 打开 startnavigation 项目的 *Main.controller.js* 文件。

  4. 如果尚未创建,请创建 onInit 函数的空实现。

  5. 实现 onInit 函数,以检查应用是否运行在 SAP Fiori Launchpad 中。获取对 CrossApplicationNavigation 服务的引用,并将该引用分配给成员变量。

sap.ui.define([
"sap/ui/core/mvc/Controller"
],
function (Controller) {
"use strict";
return Controller.extend(
"student##.sap.training.startnavigation.controller.Main", {
onInit: function () {
this._fnGetService = sap.ushell &&
sap.ushell.Container &&
sap.ushell.Container.getService;
this._oCrossAppNavigation = this._fnGetService &&
this._fnGetService("CrossApplicationNavigation");
});
});
  1. 调用函数 hrefForExternal,并传入值 UX410NavEnd## 作为 semanticObject、值 display 作为 action。

  2. 获取对 *Main.view.xml* 视图中实现的 sap.m.Link 控件的引用,并将返回值分配给局部变量。

  3. sap.m.Link 引用上调用 setHref 函数,并将哈希传入该函数。

  4. 你的代码现在应如下所示:

onInit: function () {
this._fnGetService = sap.ushell &&
sap.ushell.Container &&
sap.ushell.Container.getService;
this._oCrossAppNavigation = this._fnGetService &&
this._fnGetService("CrossApplicationNavigation");
this._hash = (this._oCrossAppNavigation&&
this._oCrossAppNavigation.hrefForExternal({
target : {
semanticObject : "UX410NavEnd00",
action: "display"
}
})) || "";
let _oLink = this.byId("idNavLink");
_oLink.setHref(this._hash);
}
  1. 在项目 startnavigationMain 视图的控制器 *Main.controller.js* 中实现 onPress 事件处理程序。使用在 onInit 函数中获取的对 CrossApplicationNavigation 服务的引用。在该引用上调用 toExternal 函数,并向该函数传入值 UX410NavEnd## 作为 semantic object、值 display 作为 action。

  2. 如果尚未打开,请打开 startnavigation 项目 controller 文件夹中的 *Main.controller.js* 文件。

  3. onInit 实现之后紧接着为事件处理函数 onPress 添加空实现。

  4. 检查对 CrossApplicationNavigation 服务的引用是否可用。如果该引用可用,则在该引用上调用 toExternal 函数,并将带属性 shellHash 的目标配置传入该函数。将从 onInit 函数中获取的成员变量中存储的哈希字符串分配给 shellHash

  5. 保存你的更改。你的实现现在应如下所示:

onPress : function(oEvent) {
if(this._oCrossAppNavigation) {
var oHref = this._oCrossAppNavigation.toExternal({
target : {
shellHash : this._hash
}
})
}
}
  1. startnavigation 项目部署到 S4D 系统。

  2. 选择 startnavigation 应用,并从上下文菜单中选择 Open in Terminal

  3. 输入 npm run deploy 并按照说明操作。

  4. 登录 SAP Fiori launchpad 以测试你的实现。启动你的应用并尝试链接和按钮,以测试导航。

  5. 在 Google Chrome 中选择书签以启动 SAP Fiori launchpad

  6. 输入你的登录凭据。

  7. 启动 startnavigation 应用。

  8. 选择该链接以启动导航。

  9. 使用 SAP Fiori launchpad 的后退按钮导航回 startnavigation 应用。

  10. 选择按钮控件以进行导航。

任务 5:向导航目标传递参数

步骤

  1. 扩展 startnavigation 应用的实现,并在导航期间传递名称为 helloText 的参数。将字符串 Hello UX410 分配给 helloText 参数。

  2. 如果尚未打开,请启动 SAP Business Application Studio 并打开开发空间 UX410

  3. 打开项目 startnavigation*Main.controller.js* 文件。

  4. 通过将配置对象 params 传入 hrefForExternal 函数来增强控制器的 onInit 函数,并为该参数分配值为 Hello UX410 的参数 helloText

onInit: function () {
this._fnGetService = sap.ushell &&
sap.ushell.Container &&
sap.ushell.Container.getService;
this._oCrossAppNavigation = this._fnGetService &&
this._fnGetService("CrossApplicationNavigation");
this._hash = (this._oCrossAppNavigation&&
this._oCrossAppNavigation.hrefForExternal({
target : {
semanticObject : "UX410NavEnd00",
action: "display"
},
params : {
"helloText" : "Hello UX410"
}
})) || "";
let _oLink = this.byId("idNavLink");
_oLink.setHref(this._hash);
}
  1. 部署更新后的 startnavigation 项目。

  2. 选择 startnavigation 项目,并从上下文菜单中选择 Open in Terminal 选项。

  3. 输入 npm run deploy 并按照说明操作。

任务 6:扩展 endnavigation 应用以获取从另一个应用传递的参数

扩展你的 endnavigation 应用,使得当用户从 startnavigation 应用导航到 endnavigation 应用时,从组件中获取传递的参数并在 UI 中显示。

步骤

  1. 实现 endnavigation 项目 *Main.controller.js* 文件的 onInit 函数。读取 startnavigation 应用传递的 helloText 参数,并将该参数值分配给 *Main.view.xml* 实现中标签的 text 属性。

  2. 打开 endnavigation 项目的 *Main.controller.js* 文件。

  3. 在控制器实现中实现空的 onInit 函数。

  4. 获取组件数据,并将该组件数据分配给名为 oComponentData 的局部变量。

sap.ui.define([
"sap/ui/core/mvc/Controller"
],
function (Controller) {
"use strict";
return Controller.extend(
"student##.sap.training.endnavigation.controller.Main", {
onInit: function () {
var oComponentData =
this.getOwnerComponent().getComponentData();
}
}
});
});
  1. 检查组件的 startupParameters 是否包含参数 helloText。如果该参数可用,则获取该参数的值并将其分配给局部变量。

onInit: function () {
var oComponentData = this.getOwnerComponent().getComponentData();
if(oComponentData && oComponentData.startupParameters &&
oComponentData.startupParameters.helloText) {
var sHelloText = oComponentData.startupParameters.helloText[0];
}
}
  1. 获取对 ID 为 idInfosap.m.Label 类型 UI 控件的引用,并将该引用分配给局部变量。在该对象上调用 setText 函数,并将启动参数值传入该 UI 控件的 text 属性。

onInit: function () {
var oComponentData = this.getOwnerComponent().getComponentData();
if(oComponentData && oComponentData.startupParameters &&
oComponentData.startupParameters.helloText) {
var sHelloText = oComponentData.startupParameters.helloText[0];
var oLabel = this.byId("idInfo");
oLabel.setText(sHelloText);
}
}
  1. 部署更新后的 endnavigation 项目。

  2. 选择 endnavigation,并从上下文菜单中选择 Open in Terminal 选项。

  3. 输入 npm run deploy 并按照说明操作。

  4. 登录 SAP Fiori Launchpad 以测试你的实现。打开 startnavigation 应用并测试导航实现。

  5. 使用 Google Chrome 中的书签启动 SAP Fiori launchpad

  6. 输入你的详细信息以登录。

  7. 启动 startapplication 应用。

  8. 选择该链接以启动导航。

  9. 使用 SAP Fiori Launchpad 的后退按钮导航回 startapplication 应用。

  10. 选择按钮控件以进行导航。

本课其余配图

EX_8_start app

本课其余配图

EX_8_start app

本课其余配图

EX_8_start app