【问题标题】:Interactive Grid - model.getRecord(selectedRecords )returns null in oracle apex交互式网格 - model.getRecord(selectedRecords) 在 oracle apex 中返回 null
【发布时间】:2018-10-23 10:22:43
【问题描述】:

我正在尝试通过编写以下代码从 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 给我。

您能否建议,需要做什么才能在记录变量中获得正确的记录值。

问候, 阿卜哈

【问题讨论】:

    标签: oracle-apex


    【解决方案1】:

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

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

    希望这也对某人有所帮助!

    【讨论】:

      【解决方案2】:

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

      1 - 定义交互式网格的区域 ID。

      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"));
      }
      

      【讨论】:

      • 感谢您的帮助.. 但是我使用的代码与您提到的完全相同,但我仍然收到相同的错误。它返回的记录值显示为 NULL。确切的错误是:“未捕获的 TypeError:无法读取属性 '1' of null”。我之前做过这种编码,它曾经工作过。无法理解为什么它现在不起作用..
      • 另外,当我尝试打印 - alert(selectedRecords) 时,它会返回正确的选定记录,但之后当我调用 - 'record = model.getRecord(selectedRecords[idx][0] );'此语句并打印记录的值,它给了我 NULL 值。所以某处获取记录时出错。
      • 我再次调查这个问题。我在交互式网格中有 2 列 - "User_NAME" & "ASSIGNMENT_NUMBER" 。如果我将 USER_NAME 设置为主键,我会在打印“alert(record);”时得到正确的记录值。但是如果我将 Assignment_number 设置为主键,我会为“alert(record);”得到“NULL”。我无法弄清楚为什么会发生这种情况。实际上我只想要分配号作为主键而不是用户名。有人有什么建议吗,我该怎么做?
      【解决方案3】:

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

      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 更新批量记录的标志。我正在尝试将值更改为“是”,然后将保存记录。因为这个问题,我被卡住了。

      【讨论】:

        猜你喜欢
        • 2020-02-22
        • 1970-01-01
        • 2019-01-26
        • 1970-01-01
        • 1970-01-01
        • 2023-01-11
        • 2021-09-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多