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

在SAP WebIDE适配项目中扩展Fiori标准应用控制器方法遇阻

问题:SAP WebIDE适配项目中无法访问标准Fiori应用的ext/controller路径

我们正通过SAP WebIDE的适配项目扩展标准Fiori应用,尝试重写ext/controller/SourceOfSupplyList.controller.js中的函数,但无法在控制器扩展文件中访问该控制器。代码中可正常访问utils路径及其中文件,却无法访问ext/controller路径。

相关代码

sap.ui.define([
        'sap/ui/core/mvc/ControllerExtension',
        'sap/ui/core/mvc/OverrideExecution',
        'ui/s2p/mm/sspreq/manages1/utils/formatter'
    ],
    function (
        ControllerExtension, OverrideExecution, formatter
    ) {
        "use strict";
        return ControllerExtension.extend("customer.zTest.SourceOfSupplyListExtension", {

            metadata: {
                // extension can declare the public methods
                // in general methods that start with "_" are private
                methods: {
                    publicMethod: {
                        public: true /*default*/ ,
                        final: false /*default*/ ,
                        overrideExecution: OverrideExecution.Instead /*default*/
                    },
                }
            },

            override: {
                onInit: function () {
                    alert("onInitOverride");
                    const originalPrototype = Object.assign({}, formatter);
                    formatter.supplierFieldControl = function (oEvent) {

                        // we could overwrite the function in the formatter just fine
                        console.log("supplierFieldControlExtension");

                        // you can still call the original method too
                        originalPrototype.supplierFieldControl.apply(this, arguments);
                    };
                    console.log(ui/s2p/mm/sspreq/manages1/ext/controller/SourceOfSupplyList); //unable to access ext/controller
                    debugger;
                }

            }
        });
    });

原应用文件夹结构

原应用文件夹结构


解决方法

1. 正确引入目标控制器模块

UI5中访问控制器需要通过模块路径引入,且必须加上.controller后缀。修改sap.ui.define的依赖数组,添加目标控制器的路径:

sap.ui.define([
        'sap/ui/core/mvc/ControllerExtension',
        'sap/ui/core/mvc/OverrideExecution',
        'ui/s2p/mm/sspreq/manages1/utils/formatter',
        'ui/s2p/mm/sspreq/manages1/ext/controller/SourceOfSupplyList.controller' // 添加该依赖
    ],
    function (
        ControllerExtension, OverrideExecution, formatter, SourceOfSupplyListController
    ) {
        "use strict";
        return ControllerExtension.extend("customer.zTest.SourceOfSupplyListExtension", {
            // ... 原有metadata配置
            override: {
                onInit: function () {
                    alert("onInitOverride");
                    // ... 原有formatter重写逻辑
                    console.log(SourceOfSupplyListController); // 现在可正常访问控制器
                    debugger;
                }
            }
        });
    });

2. 使用UI5控制器扩展的标准方式重写方法

不需要直接获取控制器对象,ControllerExtension原生支持重写目标控制器的方法,直接在override对象中声明要覆盖的方法即可:

override: {
    // 示例:重写SourceOfSupplyList.controller中的自定义方法
    yourTargetMethod: function(oParam) {
        // 先调用原方法逻辑
        this.base.yourTargetMethod(oParam);
        // 添加自定义扩展逻辑
        console.log("目标方法已被重写并执行");
    }
}

3. 验证模块路径配置

检查项目manifest.json中的sap.ui5/resources配置,确保没有覆盖标准应用的命名空间ui/s2p/mm/sspreq/manages1,保证模块路径解析正确。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 21:13:12