从交互式网格中获取所选行的 ID 并将值设置为另一个页面的项目

问题描述 投票:0回答:1

我试图从交互式网格中的选定行获取 ID,将其设置为隐藏页面项目,然后单击重定向到另一个页面的按钮时,将上一页的隐藏项目的值设置为目标页面的项目。

简化的用例是:有一个主页面/子主页面/详细信息页面。当点击主记录时,子主记录刷新并显示与主报告相关的数据。单击子主时,明细报表会刷新并显示相关数据。当用户单击 submaster 时,我想将行的 ID 存储在隐藏项中。当用户想要创建新记录时,我希望按钮将隐藏项目的值传递给目标页面上的项目(Popup-LOV)。

这就是我所做的:

隐藏物品

Hidden item

动态操作代码来存储Item的值

  • 选择变更

Event

const model = this.data.model,
    records = this.data.selectedRecords;
let values = records.map( r => model.getValue( r, "PK_CONCE" ) ); 

apex.item( "P16_PK_CONCE" ).setValue( values[0] );
console.log(apex.item("P16_PK_CONCE").getValue());

该值被传递给隐藏的项目,我可以使用

console.log
来跟踪它:

console_log debug

按钮配置

button config

但是,当使用按钮进入目标页面时,该值没有被传递

button_config

仍然可以使用

$v(ITEM)
命令访问隐藏项目值,但目标项目为空 debug_target_page


我不明白这里的问题是什么,在 JavaScript 中动态设置时,该值是否不会通过页面持久化?还有其他方法吗?

提前致谢

javascript oracle-apex
1个回答
0
投票

渲染页面时,按钮的链接已经生成。 因此,在您的情况下,当显示页面时,将使用空项目值创建指向按钮的链接。 克服这个问题的最简单和最合适的方法是将按钮行为更改为:由动态操作定义。然后使用“执行 Javascript 代码”操作创建一个动态操作,代码如下:

apex.server.process('PREPARE_URL', {
        x01: $v('P16_PK_CONCE')
}, { success: function (pData) {           
            var funcBody = pData.url.replace(/^"javascript:/, '').replace(/\"$/, '');
            new Function(funcBody).call(window);
        }
    }
);

然后为您的页面名称“PREPARE_URL”创建一个 Ajax 进程:

DECLARE
    l_url varchar2(2000);
    l_app number := v('APP_ID');
    l_session number := v('APP_SESSION');
    l_values varchar2(2000);
BEGIN
    l_values := apex_application.g_x01;
    l_url := apex_page.get_url(
        p_application => :APP_ID,
        p_page        => 19,
        p_items       => 'P19_FK_CONCE_DEF',
        p_values      => l_values
    );
    apex_json.open_object;
    apex_json.write('success', true);
    apex_json.write('url', l_url);
    apex_json.close_object;
END;

© www.soinside.com 2019 - 2024. All rights reserved.