【问题标题】:Disabling F5 key on ListPage AX 2012在 ListPage AX 2012 上禁用 F5 键
【发布时间】:2013-09-10 16:52:37
【问题描述】:

我想禁用特定列表页面上的 F5 刷新,我禁用了刷新操作键,但 F5 仍然有效。我不能覆盖 SysSetupFormRun 上的 Task 方法,因为它是一个列表页。有什么办法吗?

我想这样做的原因是因为在拥有多个数据源时会出现一些刷新问题,我想为客户禁用它,直到微软提供解决方案(问题已记录)。

编辑: 作为修复,我截获了 SysSetupFormRun 类上的任务方法,但此方法仅在您在列表页面中选择记录时触发。当您第一次打开列表页面并立即按 F5 时,它会刷新并且不会进入任务方法。

【问题讨论】:

    标签: axapta x++ dynamics-ax-2012


    【解决方案1】:

    我知道你提到你没有成功覆盖taskSysSetupFormRun,但下面的代码在我们的测试系统中对我有用。

    我将此代码插入到 SysSetupFormRun 类的方法 task 中,以禁用 SalesTableListPage 的 F5:

    public int task(int _p1)
    {
        #task
        FormDataSource formDataSource;
    
        int ret;
    
        if (_p1 == #taskFilter)
        {
            formDataSource = this.objectSet();
            if (formDataSource &&
                formDataSource.queryRun() &&
                formDataSource.queryRun().args() &&
                !formDataSource.queryRun().args().caller())
            {
                formDataSource.queryRun().args().caller(this);
            }
        }
    
        // -- Here is the interesting stuff
        if ((_p1 == #taskF5 || _p1 == #taskRefresh) && 
            (this.name() == formStr(SalesTableListPage)))
        {
            return ret;
        }
        return super(_p1);
    }
    

    如果方法与您已经尝试过的方法相同,那么您可以忽略此答案 - 否则请随意尝试 ;)

    【讨论】:

    • 谢谢这是解决方案,实际上我在阅读了一些博文后也在想同样的事情,但我在课堂上放了一个断点,但它没有触发(现在它触发了,可能做错了什么:S )。所以我认为这不是一个解决方案,实际上很愚蠢。
    • code if((_p1 == #taskF5) && (this.name() == formStr(smmActivitiesListPage))) { return ret; } ret = super(_p1);返回 ret; } code
    • 经过测试我注意到当你在列表页打开并且没有选择一条记录时立即按F5时,Task方法将不会触发并且会发生刷新。这可能是为什么我的调试器在我第一次测试它是否可以成为解决方案时没有进入任务方法的原因。
    • 我编辑了答案:我可以重现在表单启动时按 F5 时的行为。在我的 AX 环境中,还可以在检查 #taskRefresh 时防止这种情况;当没有选择记录时,方法'task'似乎用#taskRefresh调用,否则用#taskF5调用。
    • 这对我有用,谢谢。现在希望微软修复原来的问题:)
    猜你喜欢
    • 2017-01-24
    • 2010-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多