OAF控件及常见问题使用总结.docx

上传人:b****5 文档编号:6208887 上传时间:2023-01-04 格式:DOCX 页数:105 大小:1,023.39KB
下载 相关 举报
OAF控件及常见问题使用总结.docx_第1页
第1页 / 共105页
OAF控件及常见问题使用总结.docx_第2页
第2页 / 共105页
OAF控件及常见问题使用总结.docx_第3页
第3页 / 共105页
OAF控件及常见问题使用总结.docx_第4页
第4页 / 共105页
OAF控件及常见问题使用总结.docx_第5页
第5页 / 共105页
点击查看更多>>
下载资源
资源描述

OAF控件及常见问题使用总结.docx

《OAF控件及常见问题使用总结.docx》由会员分享,可在线阅读,更多相关《OAF控件及常见问题使用总结.docx(105页珍藏版)》请在冰豆网上搜索。

OAF控件及常见问题使用总结.docx

OAF控件及常见问题使用总结

OAF项目工程目录布局

Oracle.apps...webui

Usedfor:

PageandController

 

Oracle.apps...server

Usedfor:

AMandVOandVL

 

Oracle.apps...schema.server

Usedfor:

EOandAO

 

Oracle.apps..lov.server

Usedfor:

AMandVOforLOV

 

Oracle.apps..lov.webui

Usedfor:

PageandControllerforLOV

 

Oracle.apps..poplist.server

Usedfor:

AMandVOforPOPLIST

从这些路径我们可以得出如下几点:

Oracle.apps.是Oracle标准,所有的Project都必须用这样的路径来定义对象。

Componentname往往是我们所建的Project的名字,比如我做一个客户管理的应用,可定义名称为"ManageCust”。

webui一般放Clint端的东西,server一般放server端的东西。

LOV及POPLIST是可以共享给多个Projects的.所以目录层次与Componentname一致。

在Oracle.apps前是可以加入个性化的上层目录的,比如用公司名称,用来代替那个MyCompany。

举个例子:

假设我公司的名字叫Abeam,

Jdevhomepath为"C:

\OAF\jdevhome\jdev”,

我新建一个Project,功能是进行客户管理,名字为"ManageCust”

应用为ICX(这里的应用所发挥的作用还有待研究)

则你的目录结构会是如下:

myprojects

|____abeam

        |__oracle

             |__apps

                   |__icx

                        |__managecust

                        |   |___webui

                        |   |___server

                        |   |___schema

                        |          |___server

                        |__lov

                        |   |__webui

                        |   |__server

                        |__poplist

                             |__server

下拉框(MessageChoice)

控件展示如图:

方法一值集

路径:

ManufacturingandDestributionManagerInventory设置弹性域验证。

“值集”来定义展示(相当于代码类别(集)和代码定义(值))

值集的定义

1.首先登陆到:

8000/OA_HTML/OA.jsp?

OAFunc=OAHOMEPAGE#系统。

2.主菜单中选择ManufacturingandDestributionManagerInventory设置弹性域验证。

如图:

3.首先定义集,如图:

定义之后,点击工具栏的保存按钮,进行保存。

(如上值,该值集定义有10个值选项)

4.定义值集下面的值,点击值,如图:

点击名称弹出框,弹出查找窗口,在查找窗口中输入上一步新建的值集名(即INV_STATUS),点击查找,如图:

在值区域,新增要显示的显示列值。

如上图。

如何在OAF中调用定义的值集

值集定义数据库中保存的表如下:

fnd_flex_value_sets值集(ID:

FLEX_VALUE_SET_ID)

fnd_flex_values值集对应的值(ID:

FLEX_VALUE_ID;关联ID:

FLEX_VALUE_SET_ID)

fnd_flex_values_tl值集对应的值的说明(关联ID:

FLEX_VALUE_ID)

定义VO,如图:

选择如上图所示,下一步,如图:

在QueryStatement中输入一下语句:

SELECTtl.DESCRIPTION,//值说明

v.FLEX_VALUE//值定义

FROM

FND_FLEX_VALUE_SETSs,

FND_FLEX_VALUESv,

FND_FLEX_VALUES_TL

WHEREs.FLEX_VALUE_SET_ID=v.FLEX_VALUE_SET_ID

ANDv.FLEX_VALUE_ID=tl.FLEX_VALUE_ID

ANDs.FLEX_VALUE_SET_NAME='INV_STATUS'//INV_STATUS定义的值集名

ANDtl.LANGUAGE='ZHS'//中文

ANDv.ENABLED_FLAG='Y'//启用状态

ANDtrunc(sysdate)betweentrunc(nvl(v.start_date_active,sysdate-1))andtrunc(nvl(v.end_date_active,sysdate+1));

--有效日期([开始日期,结束日期])

下一步,完成VO的创建。

把VO加到对应的AM中,对绑定列选择VO字段,如图:

方法二代码

EBS上维护路径

英文路径:

ApplicationDeveloper-->Application-->Lookups-->Common

中文路径:

应用开发员-->应用产品-->代码--->公用

1、定义代码类型以及其代码定义,如下图所示:

路径见上面。

2、根据下面PLSQL语句建立VO视图

SELECTLOOKUP_CODE,MEANING

FROMFND_LOOKUP_VALUES_VL

WHERELOOKUP_TYPE='INV_NOTICE_TRANSPORT'ANDENABLED_FLAG='Y'

andtrunc(sysdate)betweentrunc(nvl(start_date_active,sysdate-1))and

trunc(nvl(end_date_active,sysdate+1))--有效日期

ORDERBYTAG

设置控件MessageChoice的属性如下:

注:

Meaning用于显示(即name),LookupCode用于存值(即code)

OAF下拉框缓存

在使用OAF开发功能时,经常会遇到下拉框组件,比如查询面板中的,下拉框组件默认是有缓存的,这会导致下拉框中的数据被增加、删除或者修改后,下拉框依然不会发生变化。

所以在开发的过程中一般要把下拉框组件的缓存去掉。

可以在页面对应的CO中的processRequest方法中去除下拉框缓存,代码如下:

publicvoidprocessRequest(OAPageContextpageContext,OAWebBeanwebBean){

super.processRequest(pageContext,webBean);

OAMessageChoiceBeansearchIncidentUrgency=

(OAMessageChoiceBean)webBean.findChildRecursive("SearchIncidentUrgency");

if(searchIncidentUrgency!

=null){

searchIncidentUrgency.setPickListCacheEnabled(false);

}

OAMessageChoiceBeansearchIncidentType=

(OAMessageChoiceBean)webBean.findChildRecursive("SearchIncidentType");

if(searchIncidentType!

=null){

searchIncidentType.setPickListCacheEnabled(false);

}

OAMessageChoiceBeansearchIncidentStatus=

(OAMessageChoiceBean)webBean.findChildRecursive("SearchIncidentStatus");

if(searchIncidentStatus!

=null){

searchIncidentStatus.setPickListCacheEnabled(false);

}

}

OAF中实现两个下拉选择框的联动

步骤:

1.创建两个VO:

ReportTypeVO和ReportVO(ReportVO中的ReportTypeId与ReportTypeVO中的ReportTypeId相关);将两个VO添加到AM中,其InstanceName分别为:

ReportTypeVO1和ReportVO1;

2.在页面中创建两个item,ItemStyle为messageChoice,ID分别为:

ParentChoice和ChildChoice,其PicklistViewInstance属性分别与第一步的ReportTypeVO和ReportVO相关联;指定各自的PicklistDisplayAttribute和PicklistValueAttribute属性;

3.设置ParentChoice的ActionType为fireAction,Event为changeList;

4.在CO.java中的processRequest()中处理ChildChoice列表初始化(初始列表值为空):

OAApplicationModuleam=

(OAApplicationModule)pageContext.getApplicationModule(webBean);

am.invokeMethod("handleListInitEvent");

5.在AMImpl.java中:

publicvoidhandleListInitEvent()

{

ReportVOImplvochild=(ReportVOImpl)findViewObject("ReportVO1");

//页面初始化,ParentChoice未选择值,ChildChoice值列表应为空

vochild.initQuery(newNumber(-1));

}

6.在CO.java中的processFormRequest()中处理ParentChoice的数据变化事件:

importoracle.apps.fnd.framework.webui.beans.message.OAMessageChoiceBean;

if("changeList".equals(event))

{

OAMessageChoiceBeanparentChoiceBean

=(OAMessageChoiceBean)webBean.findChildRecursive("ParentChoice");

StringselectValue=parentChoiceBean.getSelectionValue(pageContext);

Serializable[]parameters={selectValue};

am.invokeMethod("handleListChangeEvent",parameters);

}

7.在AMImpl.java中:

 publicvoidhandleListChangeEvent(StringselectValue)

{

NumberreportTypeId=null;

try

{

reportTypeId=newNumber(selectValue);

}

catch(Exceptione){}

ReportVOImplvochild=(ReportVOImpl)findViewObject("ReportVO1");

vochild.initQuery(reportTypeId);

}

8.在ReportVOImpl.java中:

publicvoidinitQuery(NumberreportTypeId)

{

setWhereClause("REPORT_TYPE_ID=:

1");

setWhereClauseParams(null);//Alwaysreset

setWhereClauseParam(0,reportTypeId);

executeQuery();

}

多行文本输入

如上图,多行文本输入,设置如下:

控件类型为:

MessageTextInput

修改其高度height:

来控制多行输入。

例如:

日期控件格式设定

OADateValidaterformatter=newOADateValidater("yyyy-MM-dd","");

OAMessageDateFieldBeansendDateTxt1=

(OAMessageDateFieldBean)webBean.findChildRecursive("sendDateTxt1");//控件名称

sendDateTxt1.setAttributeValue(ON_SUBMIT_VALIDATER_ATTR,formatter);//控件格式属性

字符类型转换为时间类型

fnd_conc_date.string_to_date('2014-02-25')

设置弹出框提示信息

1.在程序的CO中的processRequest中注册js

//在html生产js函数名称为delAlert(注:

hideIsDel为隐藏控件来存放confirm返回值)

StringBufferjsString=newStringBuffer();

jsString.append("functiondelAlert(){");

jsString.append("varhideIsDel=document.getElementById('hideIsDel');");

jsString.append("hideIsDel.setAttribute('value','NO');");

jsString.append("if(confirm('\\u786e\\u8ba4\\u5220\\u9664\\u5417?

','提示!

')){hideIsDel.setAttribute('value','YES');}");

jsString.append("}");

pageContext.putJavaScriptFunction("delAlert",jsString.toString());

//例子给bodyonload事件注册delAlert函数

//OABodyBeanbB=(OABodyBean)pageContext.getRootWebBean();

//bB.setOnLoad("javascript:

delAlert()");

//给DelNoticeBtn删除按钮onClick事件注册delAlert函数

OASubmitButtonBeanregisterbutton=

(OASubmitButtonBean)webBean.findChildRecursive("DelNoticeBtn");

if(registerbutton!

=null){

registerbutton.setOnClick("javascript:

delAlert()");

};

2.在processFormRequest按钮提交中获取confirm返回值并执行删除后的相应代码:

OAWebBeanTextInputhideIsDel=

(OAWebBeanTextInput)webBean.findChildRecursive("hideIsDel");

StringisDel=(String)hideIsDel.getValue(pageContext);

if("YES".equals(isDel)){

//确认删除后需执行的代码在此添加

3.设置cssclass样式隐藏hideIsDel控件

开发工具jdeveloper的根地址\jdevhome\jdev\myhtml\OA_HTML\cabo\styles中

custom.xss文件添加

--Pleasestartyourcustomizationshere-->

none

--Pleaseendyourcustomizationshere-->

并在控件中设置cssclass样式

4.因oaf中文乱码所以必须转成Unicode类型

在线转换工具地址

OAF控制数据显示格式

importoracle.cabo.ui.validate.Formatter;

importoracle.apps.fnd.framework.webui.OADecimalValidater;

importoracle.apps.fnd.framework.webui.beans.OAWebBeanDataAttribute;

importoracle.apps.fnd.framework.webui.beans.message.OAMessageTextInputBean;

在processRequest中加入

  Formatterformatter=newOADecimalValidater("#,###,###,##0;(#,###,###,##0)","#,###,###,##0;(#,###,###,##0)");

 OAMessageTextInputBeanFare=

(OAMessageTextInputBean)webBean.findChildRecursive("Fare");

    if(Fare!

=null)

      Fare.setAttributeValue(ON_SUBMIT_VALIDATER_ATTR,formatter);

    ((OAWebBeanDataAttribute)tableBean.findIndexedChildRecursive("Fare")).setTabularFunctionCurrencyCode("CNY");或者

这个方法其实只要设置了币种就可以了,当然,需要在首选项里设置数字格式,同时这也是一个Profile,可以在系统管理员配置。

例如:

OAMessageStyledTextBeancost=

(OAMessageStyledTextBean)webBean.findIndexedChildRecursive("Cost");

  cost.setAttributeValue(CURRENCY_CODE,"CNY");

做点补充:

需要导入的类都位于:

oracle.cabo.ui.validate

  Formater的子类有ColorValidater,WMLPatternValidater,ByteLengthValidater,DecimalValidater,DateValidater

  1、DateValidater:

验证日期格式。

不但可以用于“OAMessageDateFieldBean”,也可用于“OAMessageTextInputBean”。

例如:

      OADateValidaterformatter=newOADateValidater("yyyyMMdd","");

2、WMLPatternValidater:

验证文本框的格式。

例如:

    WMLPatternValidaterformatter=newWMLPatternValidater("8N");

3、ByteLengthValidater:

验证输入的byte长度。

例如:

    ByteLengthValidaterformatter=newByteLengthValidater(10,"Windows-31J");

    当输入的字符中有全角,超出规定的byte数后,会报出客户端的错。

与在画页面的时候,设置控件的长度效果一样。

4、DecimalValidater:

验证输入数字的大小。

例如:

  DecimalValidaterformatter=newDecimalValidater();

formatter.setMaxValue(10);

  formatter.setMinValue

(2);

  (webBean.findChildRecursive("item1")).setAttributeValue(ON_SUBMIT_VALIDATER_ATTR,formatter);

5、若是需要自定义地、更复杂地属性验证,可以使用RegExpValidater。

例如:

    (webBean.findChildRecursive("item

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 成人教育 > 远程网络教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1