javascript Oracle Apex Interactive网格-使用JavaSript发布设置列值

cnjp1d6j  于 2023-06-04  发布在  Java
关注(0)|答案(1)|浏览(96)

我得到了一个带有“切换”列(“是”/“否”)的交互式网格。我要求网格中只有一条记录的Switch列值应该等于'Yes'('Y')。
如果用户输入新行,并且网格中已经有一行的“切换”列等于“Y”,则新行的“切换”列的值应设置为“否”('N')。
我正在遍历交互式网格以获取Switch列的值,以确定是否有任何值等于“Y”。我得到了以下函数,如果找到'Y',它将返回true:

function mainInd (gridId, colName) {
//Get the Interactive grid widget instance
  var ig$   = apex.region(gridId).widget();
  var model = ig$.interactiveGrid("getCurrentView").model;
  var colValue;
 //Loop through the records in the interactive grid
   ig$.interactiveGrid("getViews", "grid").model.forEach(function(record) {
     console.log('***************mainInd() - record: ' + record );
   colValue = model.getValue(record,colName).v;
     console.log('***************mainInd() - colValue: ' + colValue );
   return Boolean(colValue === 'Y');
   //return colValue === 'Y'; //did not work either
 });
}

但是,该函数不返回布尔值。
我正在交互式网格的行初始化DA中使用此函数:

var model = this.data.model,
    rec   = this.data.record,
    meta  = model.getRecordMetadata(this.data.recordId);
 if ( meta.inserted )
 {
  if ( mainInd("BP","MAIN_BUYER_IND") ){
      console.log('**************Row Init DA - expected true: ' + mainInd("BP","MAIN_BUYER_IND") );
     model.setValue(rec,"MAIN_BUYER_IND", {d:"No", v:"N"});
    } else {
      console.log('**************Row Init DA - expected false: ' + mainInd("BP","MAIN_BUYER_IND") );
     model.setValue(rec,"MAIN_BUYER_IND", {d:"Yes", v:"Y"});
   }
}

我没有得到正确的true或false布尔值。我在控制台得到的都是“未定义”。因此逻辑并不像预期的那样工作。我也试过:

function mainInd (gridId, colName) {
 //Get the interactive grid widget instance
   var ig$   = apex.region(gridId).widget();
   var model = ig$.interactiveGrid("getCurrentView").model;
   var colValue;
  //Loop through the records in the interactive grid
    ig$.interactiveGrid("getViews", "grid").model.forEach(function(record) {
      console.log('***************mainInd() - record: ' + record );
    colValue = model.getValue(record,colName).v;
    if (colValue === 'Y') {
      console.log('***************mainInd() - colValue: ' + colValue );
      return true;
    }
   return false;
  });
}

它也没有工作。
你能检查一下代码,让我知道它有什么问题吗?
如果你想看控制台,下面是演示:https://apex.oracle.com/pls/apex/f?p=108817:23:112338007040585::::P23_CUSTOMER_ID:1
用户:guest密码:视频2023
谢谢你。

92dk7w1h

92dk7w1h1#

我想你不能从forEach循环中返回任何东西,你只能在循环中设置一个值。你必须返回一个循环外的值。下面是我最后一个运行良好的函数代码:

function mainInd (gridId, colName) {
 // Get the interactive grid widget instance
 var ig$     = apex.region(gridId).widget();
 var view    = ig$.interactiveGrid("getCurrentView");  
 var model   = ig$.data.model;   
 var colValue;
 var boolean = false;    
    
 // Loop through all records in the interactive grid
 ig$.interactiveGrid("getViews", "grid").model.forEach(function(record) {
      console.log('***************mainInd() - record: ' + record );  
     colValue = model.getValue(record,colName).v;   
  if (colValue === 'Y') {
     boolean = true;
      console.log('***************mainInd() - colValue: ' + colValue );
    }     
  });   
  return boolean;
}

相关问题