交互式网格-model.getRecord(selectedRecords)在oracle apex中返回null

时间:2018-10-23 10:22:44

标签: oracle-apex

我试图通过编写下面的代码从Oracle APEX的交互式网格中获取所有选定的记录。我还已将#myStaticIgId声明为报告的静态ID。

        var record, USER_NAME;
        var x = '';

        var l_role = $v("P2_ROLE");
        var l_justification = $v("P2_JUSTIFICATION");
        var l_date = $v("P2_DATE");

        //Identify the particular interactive grid
        var ig$     = apex.region("myStaticIgId").widget();

        //Fetch the model for the interactive grid
        var grid    = ig$.interactiveGrid("getViews","grid");

        //Fetch the model for the interactive grid
        var model   = ig$.interactiveGrid("getViews","grid").model;



        //Fetch selected records
        var selectedRecords = apex.region("myStaticIgId").widget().interactiveGrid("getViews","grid").view$.grid("getSelectedRecords");
         alert(selectedRecords.length);

        //Loop through selected records 
        for (idx=0; idx < selectedRecords.length; idx++) {
            //Get the record
            record = model.getRecord(selectedRecords[idx][0]);

             alert(record);

            //Get the current value for USER_NAME
             USER_NAME  = model.getValue(record,"USER_NAME");
            //  USER_NAME  = 'Abha';

            alert('submit 2');


         }

我为返回记录值而编写的警报语句向我返回了NULL。

您能建议一下,为了在记录变量中获取正确的记录值需要做什么。

关于, 艾卜哈

3 个答案:

答案 0 :(得分:0)

我在这里测试了您的代码(进行了一些更改)并且可以正常工作。

1-定义交互式网格的区域ID。 enter image description here

2-转到chrome->打开控制台(按F12)->尝试以下代码:

var gridID = "orders";
var ig$ = apex.region(gridID).widget();
var grid = ig$.interactiveGrid("getViews","grid");
var model   = ig$.interactiveGrid("getViews","grid").model;
var selectedRecords = grid.getSelectedRecords();

for (idx = 0; idx < selectedRecords.length; idx++) {
    record = model.getRecord(selectedRecords[idx][0]);
    console.log(record);
    console.log(model.getValue(record,"USER_NAME"));
}

答案 1 :(得分:0)

最后,我开始工作了。问题是主键列的顺序。主键列应该是列表中“ APEX $ ROW_SELECTOR”和“ APEX $ ROW_ACTION”之后的第一列。

我的主键列“ ASSIGNMENT_NUMBER”不是第一列,而“ USER_NAME”列是REgions中的第一列。因此,它适用于USER_NAME,不适用于“ ASSIGNMENT_NUMBER”。在将该列的顺序更改为第一列之后,它就起作用了。

enter image description here

希望这对别人也有帮助!

答案 2 :(得分:0)

我也有类似的问题。标志是“选定列表”(是/否)。我正在尝试将选定行的标志值从“否”更改为“是”,但是值未更改。 我正在使用以下代码。

function changeFlag(){
var isVerified;
var ig$     = apex.region("New").widget();
var grid    = ig$.interactiveGrid("getViews","grid");
var model   = ig$.interactiveGrid("getViews","grid").model;
var selectedRecords = apex.region("New").widget().interactiveGrid("getViews","grid").view$.grid("getSelectedRecords");
for (idx=0; idx < selectedRecords.length; idx++) {
    record = model.getRecord(selectedRecords[idx][0]);
 console.log(record);
    isVerified  = model.getValue(record,"FLAG");
    console.log(isVerified);
    if (isVerified === 'N') {
        model.setValue(record,"FLAG", 'Y');
    }  
}
}

this link中提供了示例应用程序 我不明白我在哪里提出问题。

实际问题是使用IG更新批量记录的标志。我试图将值更改为“是”,然后将保存记录。因为这个问题,我被困住了。