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

SAP Fiori 1.60.38路由异常:跳转Finalizados却进入Detail视图

问题排查:调用navTo("finalizados")跳转到Detail视图的原因及修复

本人使用SAP Fiori 1.60.38版本,Worklist与Detail视图可正常双向跳转。新增Finalizados视图后,需在满足特定条件时从Worklist跳转至该视图,但调用navTo("finalizados")后,却进入了Detail.controller,且"finalizados"被当作参数传入。期望参数能正确传入Finalizados.controller,相关代码如下:

现有manifest.json路由配置

"routing": {
    "config": {
        "routerClass": "sap.m.routing.Router",
        "viewType": "XML",
        "viewPath": "com.ui5.apps.fg_recepciones.view",
        "controlId": "app",
        "controlAggregation": "pages",
        "bypassed": {
            "target": [
                "notFound"
            ]
        },
        "async": true
    },
    "routes": [
        {
            "pattern": "",
            "name": "worklist",
            "target": [
                "worklist"
            ]
        },
        {
            "pattern": "detail/{objectId}|{idExterno}|{tipo}|{Entrega}",
            "name": "detail",
            "target": [
                "detail"
            ]
        },
        {
            "pattern": "finalizados/{objectId}|{idExterno}|{tipo}|{Entrega}",
            "name": "finalizados",
            "target": [
                "finalizados"
            ]
        }
    ],
    "targets": {
        "worklist": {
            "viewName": "Worklist",
            "viewId": "worklist",
            "title": "{i18n>worklistViewTitle}",
            "viewLevel": 1
        },
        "detail": {
            "viewName": "Detail",
            "viewId": "detail",
            "title": "{i18n>objectViewTitle}",
            "viewLevel": 2
        },
        "finalizados": {
            "viewName": "Finalizados",
            "viewId": "finalizados",
            "title": "Finalizados",
            "viewLevel": 2
        },
        "objectNotFound": {
            "viewName": "ObjectNotFound",
            "viewId": "objectNotFound"
        },
        "notFound": {
            "viewName": "NotFound",
            "viewId": "notFound"
        }
    }
},

Worklist.controller.js跳转逻辑

if (clase === "Recepcionados") {
    var destiny = "finalizados";
} else {
    destiny = "detail";

}

tipo = tipo + clase;
this.getRouter().navTo(destiny, {
    objectId: item.Pedido,
    tipo: tipo,
    idExterno: idExterno,
    Entrega: entrega
});

问题原因

  1. 路由pattern语法错误:你在pattern中使用|分隔参数,这是错误写法。UI5路由的pattern里,|是正则表达式的"或"运算符,导致detail/{objectId}|{idExterno}会被解析为匹配detail/xxx或者直接匹配xxx。当跳转finalizados/xxx时,finalizados会被detail路由的{idExterno}参数捕获,从而触发Detail视图。
  2. 路由匹配顺序:UI5路由按数组从上到下匹配,detail路由在finalizados前面,错误的pattern导致优先匹配到detail路由。

修复方案

修正路由pattern的参数分隔符为/(UI5路由标准的参数分隔方式),同时建议将finalizados路由放在detail路由前面(避免后续潜在的匹配冲突):

"routes": [
    {
        "pattern": "",
        "name": "worklist",
        "target": [
            "worklist"
        ]
    },
    {
        "pattern": "finalizados/{objectId}/{idExterno}/{tipo}/{Entrega}",
        "name": "finalizados",
        "target": [
            "finalizados"
        ]
    },
    {
        "pattern": "detail/{objectId}/{idExterno}/{tipo}/{Entrega}",
        "name": "detail",
        "target": [
            "detail"
        ]
    }
],

修改后,调用navTo("finalizados", {...参数})时,路由会正确匹配到Finalizados视图,参数也会正常传入Finalizados.controller的patternMatched事件中。

内容的提问来源于stack exchange,提问作者Cristian López González

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 21:30:48