`
waking
  • 浏览: 7183 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

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

});


}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics