码迷,mamicode.com
首页 > 其他好文 > 详细

OAF 动态创建组件以及动态绑定属性

时间:2015-05-28 22:50:12      阅读:618      评论:0      收藏:0      [点我收藏+]

标签:

在开发中,我们遇到以下一个需求。

一个表格左侧有5列是固定存在的,右侧有N列是动态生成的,并且该N列中第一列可输入,第二列是不可编辑的,但是是数字,如果小于0,那么就要显示为红色,重点标识出来。

 

首先,我们假设你的VO中的SQL查询已经做好了,并且每次能动态确定到需要插入几列。

//获得你要生成的列总数
int n=Integer.valueOf(String.valueOf(am.invokeMethod("getCloumnCount"))) ;
OATableBean tableBean = (OATableBean)webBean.findChildRecursive("tableRN");
//创建第1个动态列列单元格
//createWebBean有很多参数,有兴趣的可以翻一翻官方文档
OAMessageTextInputBean cellOneBean=   (OAMessageTextInputBean)this.createWebBean(pageContext, 
                                                        OAMessageTextInputBean.MESSAGE_TEXT_INPUT_BEAN,
                                                        null, 
                                                        "Cell1"
                                                        );
 cellOneBean.setViewUsageName("XxxxVO1");//此列绑定的VO
 cellOneBean.setViewAttributeName("prodType1");//此列绑定的VO中的字段
 cellOneBean.setLabel("第1个动态单元格"); //此列需要显示的题头
 
 //DisableFlag是你在VO中的叫DisableFlag的字段,根据某些条件在VORowImpl中返回true或者false
 //其用法类似于在页面上设置某个组件的属性 Disable = ${oa.current.DisabledFlag}
OADataBoundValueViewObject Disabled =  new OADataBoundValueViewObject(cellOneBean,"DiabledFlag");
cellOneBean.setAttributeValue(this.DISABLED_ATTR,Disabled);

tableBean.addIndexedChild(cellOneBean);

//创建第2个动态列单元格
OAMessageStyledTextBean cellTwoBean = 
    (OAMessageStyledTextBean)this.createWebBean(pageContext, 
                                                OAMessageStyledTextBean.MESSAGE_STYLED_TEXT_BEAN, 
                                                null, 
                                                "Cell2"
                                                );
                                                
cellTwoBean.setViewUsageName("XxxxVO1");//此列绑定的VO
cellTwoBean.setViewAttributeName("prodType2");//此列绑定的VO中的字段
cellTwoBean.setLabel("第2个动态单元格"); //此列需要显示的题头    

//同上,CssCode为VO的一个字段
/*其VORowImpl中的写法类似于
 public String getCssCode()
 {
   //return (String) getAttributeInternal(CSSCODE);
   // return CSS
   if( this.getScore() != null && this.getScore().floatValue() < 0 )
   {
       //OAF的CSS样式的设定请参考其他资料
       return "TouchScreenRedDataText";
   }else
   {
       return "";
   }
   
 }  */
 OADataBoundValueViewObject cssjob = new OADataBoundValueViewObject(cellOneBean,"CssCode");
 cellTwoBean.setAttributeValue(oracle.cabo.ui.UIConstants.STYLE_CLASS_ATTR, cssjob);
 
tableBean.addIndexedChild(cellTwoBean);

for(int i=3; i<n+1; i++ ){
    //动态创建WebBean
    OAMessageStyledTextBean summary = 
        (OAMessageStyledTextBean)this.createWebBean(pageContext, 
                                                    OAMessageStyledTextBean.MESSAGE_STYLED_TEXT_BEAN, 
                                                    null, 
                                                    "Text" + i
                                                    );

    String label = null;
    label = "Prodtype" + i;
    //从AccountCostDetailVO中显示对应到的数据项到动态的webBean
    summary.setViewUsageName("AccountCostDetailVO");
    summary.setViewAttributeName(label);
    summary.setLabel("第"+i+"个动态单元格");
    
    tableBean.addIndexedChild(summary);
}

 

为动态创建的组件添加FireAction事件

// 启用Expense Template的FireAction功能
OAMessageChoiceBean choiceBean = (OAMessageChoiceBean)webBean.findChildRecursive("ExpenseTemplate");
choiceBean.setFireActionForSubmit("change", null, null, true);

 

参考资料:

EBS OAF开发中的绑定值(BoundValues)

EBS OAF开发DataBoundValues的使用示例-动态显示表列的左右对齐

            

 

OAF 动态创建组件以及动态绑定属性

标签:

原文地址:http://www.cnblogs.com/huanghongbo/p/4536978.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!