You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在UI5 1.120.9中通过CrossAppNavigation传递数组?

适配UI5 1.120.9的FLP跨应用传递数组(AppState方案)

问题核心原因

你尝试用AppState传递数组失败,主要是没正确处理createEmptyAppStateAsync和save的异步特性,同时存在模板字符串语法错误、变量引用不一致的问题。

发送端正确实现代码

以下是适配UI5 1.120.9的完整发送端代码,修复异步逻辑及语法问题:

sap.ushell.Container.getServiceAsync("CrossApplicationNavigation").then((oCrossAppNav) => {
  // 1. 异步创建空AppState实例
  oCrossAppNav.createEmptyAppStateAsync(this)
    .then((oAppState) => {
      // 2. 设置需要传递的数组数据
      const arrayData = ["PLANT01", "MAT001", "LOC003"]; // 替换为你的实际数组
      oAppState.setData(arrayData);
      // 3. 异步保存AppState(必须等待保存完成才能获取有效key)
      return oAppState.save();
    })
    .then((oSavedAppState) => {
      // 4. 生成带AppState标识的导航Hash(用反引号实现变量解析)
      const targetHash = `xyz&sap-iapp-state=${oSavedAppState.getKey()}`;
      return oCrossAppNav.getHrefForAppSpecificHash(targetHash);
    })
    .then((hash) => {
      const navigationOption = "newTab"; // 你的导航选项
      if (navigationOption === "newTab") {
        sap.m.URLHelper.redirect(hash, true);
      } else {
        oCrossAppNav.navigate({
          target: { shellHash: hash }
        });
      }
    })
    .catch((err) => {
      console.error("AppState处理失败:", err);
    });
});

发送端关键修正点

  • createEmptyAppStateAsync和save都是异步方法,必须通过then链式调用等待执行完成,不能同步直接使用返回值
  • 模板字符串必须用反引号()包裹,才能正确解析${变量}`格式的内容
  • 统一使用oCrossAppNav变量,避免原代码中oCrossAppNav与oCrossAppNavigator的引用不一致问题
  • 增加错误捕获逻辑,便于快速排查问题

接收端实现代码(必配)

目标应用必须配置接收逻辑,才能获取传递的数组数据:

// 在目标应用的控制器onInit或合适的生命周期方法中添加
sap.ushell.Container.getServiceAsync("CrossApplicationNavigation").then((oCrossAppNav) => {
  // 从组件数据中获取启动参数里的AppState key
  const oComponentData = this.getOwnerComponent().getComponentData();
  const appStateKey = oComponentData?.startupParameters?.["sap-iapp-state"]?.[0];
  
  if (appStateKey) {
    // 通过key获取AppState中存储的数组数据
    oCrossAppNav.getAppState(appStateKey)
      .then((oAppState) => {
        const receivedArray = oAppState.getData();
        console.log("接收的数组数据:", receivedArray);
        // 此处添加你的数组业务逻辑处理
      })
      .catch((err) => {
        console.error("获取AppState失败:", err);
      });
  }
});

接收端注意事项

  • FLP部署的应用启动参数会自动传入componentData.startupParameters,确保目标应用的Component能正常获取该数据
  • AppState的key由FLP管理,默认有有效期,适合临时跨应用传递数据

额外验证项

  1. 确认两个应用部署在同一FLP实例下,且已完成FLP目录注册
  2. UI5 1.120.9版本完全支持CrossApplicationNavigation服务的createEmptyAppStateAsync、save、getAppState方法,无需兼容旧API
  3. 测试时打开浏览器控制台,查看是否有报错信息,快速定位问题

内容的提问来源于stack exchange,提问作者Newbiecodie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 12:37:17