首页 > 代码库 > Oracle Apex 实用笔记系列 3 - 组件只读

Oracle Apex 实用笔记系列 3 - 组件只读

1. 普通组件

对于Apex各种组件(page, region, item, button等) 可以很简单地在某种条件下设置为只读。它们的设置很类似,下面也region只读作为个例子。

在组件视图(Component View)

1. 点击某一个Region

2. 点击只读(Read only)标签

3.选择条件类型,有很多选择。简单的可以是一个表达式不为NULL或者两个表达式(不)相等。笔者常用的是PL/SQL Expression 或者PL/SQL Function body returning a boolean,因为它们可以支持更复杂的自定义逻辑。

4.确定并Apply change,就可以有效了。

2. 报表列组件

笔者在开发过程中发现,报表本身可以按上述方式整体被设为某个条件下的只读。但如果需求是只有某几列只读,就需要稍微复杂些的设置了。步骤如下:
1) 在Apex 建立一个hidden item,比如P1_Condition;
2) 在数据库建立一个PL/SQL function返回一个值(可以是数值,字符串值或者boolean值);
3) 在Apex 建立一个Before Header process,调用该function并赋值给之前建立的hidden item;
4) 在Apex 建立一个on page load的dynamic action, 执行javascript 脚本,大致过程的伪代码如下:
//1. 得到hidden item 的值
var cond = $v(‘P1_Condition‘); //$v函数用来获得某个item的值


//2. 比较条件
if( cond = ‘abcd‘){
  // 3. 得到报表各个列
  var col1Array = $(‘input[name="f02"]‘);  //利用jquery selector得到报表某一列
  
  //col2, col3为希望只读的列
  var col2IdPrefix="f03_";
  var col3IdPrefix = "f04_"; 

 $.each(col1Array , function(index,obj1) {
    //计算各列对应的cell的id
    var tmpId= (index+1);
    var idStr = "0000"+ tmpId;
    var idStrLen = idStr.length;
    var idSubStr = idStr.substring(idStrLen-4,idStrLen);

   var col2CompId = ‘#‘+col2IdPrefix +idSubStr;    
   var col2Comp = $(col2CompId );

  var col3CompId = ‘#‘+col2IdPrefix +idSubStr;    
   var col3Comp = $(col2CompId );

   
   //赋予各个cell为只读
   col2Comp.attr("readonly","readonly");
   col3Comp.attr("readonly","readonly");
 
 });


}

Oracle Apex 实用笔记系列 3 - 组件只读