(01)-OAF 技术细节_第1页
(01)-OAF 技术细节_第2页
(01)-OAF 技术细节_第3页
(01)-OAF 技术细节_第4页
(01)-OAF 技术细节_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Oracle Seeker, Oracle探索者· Home · Activity · Members · Groups · Forums · Blogs Top of FormBottom of FormYou are browsing the archive for Oracle. Previous EntriesNext Entries by aronezhangOAF中如何更改query的默认查询12月 20, 2008 in Oracle EBS二次开发 by aronezhang  OA Framewo

2、rk使用Query Region来创建查询,可以创建简单的查询、高级查询和保存用户个性化的查询。query Region有三种构建方式:   1,resultsBasedSearch OA Framework根据查询结果表格(或HGrid)中定义的可查询的Item自动生成查询面板。OA Framework在用户选择查询按钮后自动根据用户输入的值,生成Where子句,并执行查询。   2,autoCustomizationCriteria OA Framework根据开发者定义的简单查询和高级查询Region生成查询面板。OA Framework在用户选择查询按钮后,根据用户

3、输入的值,生成Where子句,并执行查询。 利用这种模式可以更改查询项的类型,比如使用LOV、Poplist等,还可以加入结果表(或HGrid)中不存在的查询项目。   3,None OA Framework根据开发者定义的简单查询和高级查询Region生成查询面板。开发人员需要自己实现视图对象的查询逻辑。这种方式一般用于无法使用query Region所提供的功能的情况。   本文主要介绍在autoCustomizationCriteria模式下如何控制query的查询。比如对于日期的查询一般用区间范围进行查询,而默认情况下,OA Framework生成的Where子句做

4、相等比较。 1. 为query Region创建简单查询面板,创建各个查询Item,包括日期从和日期至。 2. 为各个查询Item创建SearchMapping,除了日期从和日期至两个查询项。此时除了日期范围,其余项目的查询都已经可用。 3. 在query Region所在的Controller类processFormRequest()方法中加入以下代码 ?Copy to clipboardView Code JAVA 123456789101112OAQueryBean querybean = (OAQueryBean)webBean.findIndexedChildRecursive(&q

5、uot;QueryRN");/ 判断用户是否选择了查询按钮if (pageContext.getParameter(querybean.getGoButtonName() != null) String dateFrom = pageContext.getParameter("SearchDateFrom"); String dateTo = pageContext.getParameter("SearchDateTo");  OAApplicationModule am = pageContext.getApplicationMod

6、ule(webBean); Serializable params = dateFrom, dateTo;  am.invokeMethod("bindDateRangeWhereClause", params);4. 应用程序模块中方法如下: ?Copy to clipboardView Code JAVA 123456789101112131415161718192021222324252627282930public void bindDateRangeWhereClause(String dateFrom, String dateTo) OAViewObj

7、ect vo = getXxxVO1();  String clause = null; String joinStr = "" if (vo.getWhereClause() != null) joinStr = "AND"   if (dateFrom != null) && (!("".equals(dateFrom.trim() clause = " RECEIPT_DATE >= :" whereClause.append(+bindCou

8、nt); parameters.addElement(Date.valueOf(dateFrom); clauseCount+;/ 条件:接收日期至if (dateTo != null) && (!("".equals(dateTo.trim() if (clauseCount > 0) whereClause.append(" AND "); whereClause.append(" RECEIPT_DATE <= :"); whereClause.append(+bind

9、Count); parameters.addElement(Date.valueOf(dateTo); clauseCount+;  Tags: OA Framework, Oracle, Oracle EBSNo Comments »by aronezhangOAF中如何新开一个窗口12月 20, 2008 in Oracle EBS二次开发 by aronezhang  OAF页面要新开窗口,可以在带有导航功能的Item,如link和button(非提交按钮),指定Target Frame属性为”_blank“,就可以新开窗口打开Desti

10、nation URI属性指定的路径。 如果用户希望新开的窗口能隐藏地址栏、工具栏、菜单栏或者想控制窗口大小,那么在上面所说的Destination URI属性中使用 javascript:window.open(OA.jsp?page=XXX,'<windowName>, <params>)   注意:在对按钮的Destination URI属性使用Javascript的新开窗口时,需要在首选项中设置可访问功能为标准可访问性,否则Javascript将无法执行。 虽然以上的方法能够实现新开窗口,但还有很多的限制,比如如果在新开窗口前需要执行某些特定操作

11、、或者新开窗口的URL是需要通过执行某些逻辑才能得到的,那么上面的方法就无法实现了。 在OAF中,Oracle不建议在OAF中使用Javascript,但是OAF还是提供了API用于执行Javascript:?Copy to clipboardView Code JAVA 1234OAPageContext.putJavascriptFunction(String name, String function)OAPageContext.removeJavascriptFunction(String name)OAPageContext.putJavascriptLibrary(String n

12、ame, String library)OAPageContext.removeJavascriptLibrary(String name)    假设用户提交了请求(点击链接、提交按钮等等触发事件的情况)需要新开窗口,在processFormRequest方法中,按一下步骤进行: 1、首先执行pageContext.removeJavascripFunction() 这是非常重要的一点,因为一旦Javascript注册到OAPageContext之后,就一直存在于OAPageContext中,这样会导致每次页面的刷新时都会执行Javascript。   2、在特

13、定的事件中,执行程序逻辑,注册Javascript到OAPageContext对象中?Copy to clipboardView Code JAVA 123456789if (pageContext.getParameter("Open") != null) / 执行其它处理 .  / 定义Javascript String jScript = "window.open('OA.jsp?page=XXX')" pageContext.putJavascriptFunction("FunctionName",

14、jScript)  注意:在调用putJavascriptFunction()时,必须指定Name参数,只有这样才可以调用removeJavascriptFunction()。      Tags: OA Framework, Oracle, Oracle EBS2 Comments »by aronezhangOAF中判断当前事务存在未提交的更改12月 20, 2008 in Oracle EBS二次开发 by aronezhang  开发需求 在OAF的开发中,可能有这样的需求,在选择保存按钮时,如果存在改动的数据,则提

15、交事务,保存到数据库中; 如果不存在改动的数据,就提示用户当前没有数据可更改。   解决思路 判断页面中所使用的视图对象是否发生过改动   方法一、调用OADBTransaction.isDirty()方法 此方法用于判断当前事务中,视图对象是否发生过变更。但是此方法只对基于实体对象的视图对象有效,如果存在基于查询的视图对象,需要调用PL/SQL来改变数据库的就不行了。   方法二、调用OAViewObject.isDirty()方法 此方法可以判断单个视图对象是否发生过变更,无论是基于实体对象的视图对象还是基于查询的视图对象。   方法三、调用实体对象

16、的getPostState()方法来判断 有时使用OAViewObject.isDirty()也有一定的限制。如果重新执行了查询,则视图对象的Dirty标志被重置,此时不可以使用该方法来判断是否存在变更,而需要使用下面所说的方法或第四种方法。 调用ViewRowImpl.getEntity(0).getPostState()可以判断视图行对应的实体对象是否发生过变更,这样就可以不顾是否重新查询导致Dirty标志重置。   方法四、使用数据缓存 进入页面前把数据缓存到Transaction中,在保存按钮事件时,比较Transaction保存的实体对象行的每个属性是否和当前视图对象行属性

17、一致。 使用方法四的理由是,如果存在insertRow(),然后又删除了新建的行row.remove(),此时系统就会认为视图对象存在未保存的变更。而使用第四种方法可以避免这种情况(一般情况下,应该也能说服客户接受这种情况)。 另外如果是基于查询建立的视图对象(使用PL/SQL保存到数据库中),并且存在临时属性的变更的情况(调用过row.setAttribute(),即使属性是不需要保存到数据库),就只能使用第四种方法。     Tags: OA Framework, Oracle, Oracle EBSNo Comments »by aronezhangOAF中

18、实现动态LOV12月 16, 2008 in Oracle EBS二次开发 by aronezhang EBS 10.5.10 介绍 Oracle标准页面上也有使用动态LOV的情况,主要是子在应用Key Flex。代码可参考oracle.apps.ap.oie.framework.kff.webui.KffRegionCO。但是Oracle标准页面上的动态LOV存在Bug,不能在弹出的LOV查询页面中多次输入条件查询,原因在下面会提及。不知在R12中,这个Bug是否已经修正。本文所介绍的方法在11.5.10版本下运行正常,而且没有标准动态LOV的Bug,并实际运用

19、在项目上。 要在OAF中动态创建LOV的功能是很复杂的一件事,本文所讲述的动态LOV创建场合用于事先不能知道页面上会有多少个LOV,而且LOV所使用的SQL查询,也是由用户交互而获得的。 思路如下:首先创建一个通用的LOV Region,建立一个查询的视图对象(Select From Dual),这个LOV并不能查出任何内容,在运行时动态更改视图对象的定义。   1,创建LOV   首先在使用LOV的页面的控制器的processRequest方法中创建一个LOV?Copy to clipboardView Code JAVA 1234567891011OAMess

20、ageLovInputBean lovItem = (OAMessageLovInputBean)createWebBean(pageContext,LOV_TEXT,null );region.addIndexedChild(lovItem); lovItem.setAttributeValue(REGION_CODE, "/xxx/oracle/apps/cux/lov/webui"); lovItem.setAttributeValue(REGION_APPLICATION_ID,new Integer(pageContext.getResponsibili

21、tyApplicationId(); addLovItem.setLovRegion(pageContext,"/xxx/oracle/apps/cux/lov/webui/CommonLovRN");lovItem.setUnvalidated(false);lovItem.addLovRelations(pageContext,lovItem.getID(),LOV_RESULT,LOV_REQUIRED_NO);lovItem.setPrompt();  需要注意的是动态建立LOV时,不要使用addLovRelations去增加LOV_CRITER

22、IA(criteria item),如果设置了criteria item, 那么LOV就会用原始定义的SQL去拼页面上的值组成SQL查询,而不会使用我们设置的动态SQL去查询。 (顺便提一下,对于不是动态创建的LOV,而需要动态修改LOV对应的视图对象定义的情况,因为LOV基本的对应项必须设置成criteria item, 为了防止LOV的自动查询,可以设置lovMAP的Programmatic Query为True,这样就不会把页面上的值自动加到WHERE子句后查询。)   2,修改视图对象的查询 在LOV的控制器类的processRequest中动态修改视图对

23、象的查询,因为我们屏蔽了LOV的自动查询,所以在processRequest中还必须处理自动查询的情况 (自动查询的情况是因为用户输入了值或之前已经选择了,重新打开LOV),这里不给出具体的代码。在LOV控制器的processFormRequest方法中必须做以下处理, 因为尽管我们更改了视图对象的定义,但是当点查询按钮时,LOV还是按最原始定义的SQL绑定条件来查询,所以这里的操作是不让LOV执行查询,而进入processRequest重新更改视图的定义:?Copy to clipboardView Code JAVA 1234567891011121314if ("lovFilt

24、er".equals(pageContext.getParameter("event") try String strRedirectUrl = pageContext.getRequestUrl(); int intIndex = strRedirectUrl.indexOf("&amp;"); strRedirectUrl = strRedirectUrl.substring(0, intIndex + 1) + "searchText=" + URLEncoder.encode(pageContext.getP

25、arameter("searchText") + "&amp;" + "FormRequest=Y&amp;" + strRedirectUrl.substring(intIndex + 1);  pageContext.sendRedirect(strRedirectUrl); catch (Exception expt)         Tags: OA Framework, Oracle, Oracle EBSNo Comments »by aronez

26、hangOAF个性化开发实例12月 13, 2008 in Oracle EBS二次开发 by aronezhang EBS   需求下图是Oracle标准页面,有一个简单的开发需求,当Expense Template等于“管理费用”时,Approver的LOV输入框默认为“XXX”,并且LOV只读,不能进行选择。 分析 这个看似极其简单的开发,其背后所隐藏的技术知识却是不那么简单的。 当Expense Template选择为“管理费用”时,Approver LOV输入框只读,这里牵涉到的开发基本为给Expense Templ

27、ate加上FireAction的功能, 然后在Expense Template的Value Change事件中去修改Approver LOV的只读属性。 因为开发规范是不允许直接修改Oracle的代码,所以此开发将通过集成标准的控制器类,在客户化的控制器类中实现添加Expense Template的FireAction功能,和修改Approver LOV只读属性, 然后通过个性化,将控制器类替换成客户化的控制器类。    技术要点 1,修改Approver LOV的只读属性刚刚进行OAF开发的开发人员可能觉得这是很简单的事,只要在客户化的控制器类的pro

28、cessFormRequest()方法中调用以下代码:?Copy to clipboardView Code JAVA 12OAMessageLovInputBean lovBean = (OAMessageLovInputBean)webBean.findChildRecursive("Approver");lovBean.setReadOnly(true);就可以实现了,如果这样做开发,那么就错了,在运行时会抛出异常:?Copy to clipboardView Code TEXT 123The OA passivation framework coding stand

29、ard has been violated. Web bean properties cannot be modified in the controller processFormData or processFormRequest method. Web bean properties should be modified in the processRequest method only.  (这里有两个方法是例外,setValue()和setText(),因为Value并不影响控件树)为什么把LOV设为只读会出错呢?这是因为OAF在运行时,表现为一棵控件树。 当进入页面时,控

30、件树被初始化创建,而当用户事件触发POST请求时,控件树并不会被重新生成(提高性能),要改变控件的属性只有两个办法,一个是重新生成控件树,二是使用PPR。   方法一:重构控件树 重构控件树就意味着在processFormRequest()方法处理事件时,需要Forward到本页,并通过参数控制来设置Approver LOV只读,这样会刷新整个页面,而且对编码也带来困难。 方法二:使用PPR 实现方法是利用OAF数据绑定机制,将Approver LOV的ReadOnly属性绑定到视图对象的属性,通过改变视图对象属性的值来控制Approver LOV的只读。 这里又引出第2个技术要点:

31、  2,动态创建视图对象 创建视图对象需要首先创建OAViewDef对象,然后利用OAViewDef对象来创建视图对象。 这里谈一下Oracle的一个开发规范,OAViewDef接口在oracle.apps.fnd.framework.server包下,按照Oracle的规范,任何webui下的类不允许import任何server下的类。我是一个规范的严格遵守者,这样就会使开发变得更复杂。 要在server包下引用OAViewDef接口,就必须创建应用程序模块,将动态创建视图对象的代码移到应用程序模块中实现。在客户化控制器类中,动态创建应用程序模块,然后调用应用程序模块的方

32、法。   实现步骤   假设开发人员对Oracle标准的页面结构都已经非常了解了,包括需要集成哪个标准的控制器,页面上所使用的视图对象。 1、创建客户化应用程序模块cux.oracle.apps.ap.oie.entry.server.CuxPVOAM 2、创建视图对象cux.oracle.apps.ap.oie.entry.server.CuxPVO,视图对象中只有一个临时属性ReadOnlyFlag,类型为Boolean(此步可选) 3、创建客户化控制器类,继承标准的控制器类 4、在CuxPVOAMImpl.java中创建两个方法:?Copy to clipboardV

33、iew Code JAVA 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849import oracle.apps.fnd.framework.OAViewObject;import oracle.apps.fnd.framework.server.OAViewDefImpl;import oracle.jbo.AttributeDef;import oracle.jbo.Row; public void initPVO() OAApplicationMod

34、uleImpl rootAM = (OAApplicationModuleImpl)getRootApplicationModule();  / 创建视图对象 OAViewDefImpl viewDef = (OAViewDefImpl viewDef)getOADBTransaction().createViewDef(); viewDef.setFullName("CuxPVODef"); viewDef.setViewObjectClass("oracle.apps.fnd.framework.server.OAViewObjectImpl &qu

35、ot;); viewDef.addTransientAttrDef("ReadOnlyFlag", "java.lang.Boolean", null, false, AttributeDef.UPDATEABLE);  OAViewObject pvo = (OAViewObject)rootAM.createViewObject("CuxViewPVO", viewDef); / 初始化PVO if (!pvo.isPreparedForExecution() pvo.executeQuery(); pvo.setMax

36、FetchSize(1); Row row = pvo.createRow(); pvo.insertRow(row); row.setAttribute("ReadOnlyFlag", Boolean.FALSE);   public void handleTemplateChange() OAApplicationModuleImpl rootAM = (OAApplicationModuleImpl)getRootApplicationModule(); OAViewObject vo = (OAViewObject)rootAM.findViewObjec

37、t("XxxVO1"); /标准的VO OAViewObject pvo = (OAViewObject)rootAM.findViewObject("CuxViewPVO");  if () pvo.first().setAttribute("ReadOnlyFlag", Boolean.TRUE); vo.first().setAttribute("Xxx", ); / 设置Approver LOV绑定的视图对象属性值 else pvo.first().setAttribute("ReadO

38、nlyFlag", Boolean.FALSE);   5、在客户化控制器中添加相应代码 processRequest代码:?Copy to clipboardView Code JAVA 12345678910111213141516171819202122232425public void processRequest(OAPageContext pageContext, OAWebBean webBean) cessRequest(pageContext, webBean);  / 启用Expense Template的FireAction

39、功能OAMessageChoiceBean choiceBean = (OAMessageChoiceBean)webBean.findChildRecursive("ExpenseTemplate"); choiceBean.setFireActionForSubmit("change", null, null, true);  / 创建客户化应用程序模块 OAApplicationModule rootAM = pageContext.getRootApplicationModule(); OAApplicationModule pvoAM

40、 = (OAApplicationModule)rootAM.findApplicationModule("CuxPVOAM"); if(pvoAM = null) rootAM.createApplicationModule("CuxPVOAM","cux.oracle.apps.ap.oie.entry.server.CuxPVOAM"); pvoAM = HssCustomizeHelper.getNestedAMInstance(rootAM, "CuxPVOAM"); pvoAM.invokeMethod

41、("initPVO");  / 将ReadOnly属性绑定到视图对象属性OAMessageLovBean approverLov = (OAMessageChoiceBean)webBean.findChildRecursive("Approver"); approverLov.setAttributeValue(READ_ONLY_ATTR, new OADataBoundValueViewObject(approverLov,"ReadOnlyFlag","CuxPVO");将开发测试后的代码发布到服

42、务器。(测试可以在本地,将页面上的控制器类替换成客户化的控制器来进行)   processFormRequest代码: ?Copy to clipboardView Code JAVA 12345678910111213141516171819public void processFormRequest(OAPageContext pageContext, OAWebBean webBean) cessFormRequest(pageContext, webBean);  OAApplicationModule rootAM = pageCont

43、ext.getRootApplicationModule(); OAApplicationModule pvoAM = (OAApplicationModule)rootAM.findApplicationModule("CuxPVOAM"); if(pvoAM = null) rootAM.createApplicationModule( "CuxPVOAM","cux.oracle.apps.ap.oie.entry.server.CuxPVOAM"); pvoAM = HssCustomizeHelper.getNestedAM

44、Instance(rootAM, "CuxPVOAM");   if ("change".equals(pageContext.getParameter(EVENT_PARAM) pvoAM.invokeMethod("handleTemplateChange");  HssCustomizeHelper.getNestedAMInstance()的代码如下: ?Copy to clipboardView Code JAVA 12345678910111213141516171819202122public sta

45、tic OAApplicationModule getNestedAMInstance(OAApplicationModule parentAM, String nestedAMName) OAApplicationModule am = null;  String amNames = parentAM.getApplicationModuleNames(); for (int i=0; i&lt; amNames.length; i+) if (amNamesi.endsWith(nestedAMName) return (OAApplicationModule)paren

46、tAM.findApplicationModule(amNamesi); else am = getNestedAMInstance(OAApplicationModule)parentAM.findApplicationModule(amNamesi),nestedAMName); if (am != null) return am; return am;7、重启Apache 8、进入页面,设置个性化,替换标准的控制器类为客户化控制器类。   重新整理后的Oracle OAF学习笔记?4.应用构建基础之实现视图1楼   2008-02-01页

47、面创建页面的基本步骤是创建pages,region,items。Page LayoutRegion的关键属性创建一个pageLayout区域时,应该特别注意下面的属性:· AutoFooter将这个设置为true以保证在页面上有应用的保密和版权说明链接。 · Help Target如果你需要为当前页显示帮助按钮,必须在这里指定帮助文件(通常是文件名)。 · AM Definition用于设置页面的根应用模块。必须使用类的全名,比如:oracle.apps.fnd.framework.toolbox.tutorial.server.SearchAM · F

48、unction Name总是设置页面的保密函数 · Window Title浏览器窗口标题 · Title显示在page header中的文本。 · Form在pageLayout中设置为true,这通常是默认设置,不要在其子对象中添加亲折form。OA Framework在同一个页面中只支持一个form。 · pageLayout Components注意OA Framework页面基础一文中提到的,页面包含了特殊的被命名的组件,其中一个就是标识图案。为了在页面关联标识图案,选择pageLayout区域或pageLayoutComponents节点,然

49、后右键菜单中选择创建image item,并把它的Image URI属性设置为<imageName>.gif。Item 的关键属性每个item类型都有自己的一套属性,不可能每个都介绍,这里介绍一些通常的公共属性。· Extends说明新的item继承于一个已存在的item。 · Attribute Set命名了的item的属性集合。 · Destination URI对于支持页面导航的对象,这个是导航的目标,比如:OA.jsp?page=/oracle/apps/fnd/framework/toolbox/tutorial/webui/PoDetail

50、sPG&retainAM=Y。 · (Client Action)Action Type标明item是否可以提交表单,或者产生局部页面渲染事件(partialpage rendering (PPR))。 · CSS Class指定item使用的样式表。(多数item,UIX将把这个值按BLAF UI指导方案中的值设置)。 · Rendered指明相应的对象是否包含了webbean层级结构,需要UIX将HTML发送给浏览器渲染。对于多数item来说,这用于指定一个item是否显示,但有些item是不会实际显示出来的(比如隐藏域),实际上是指定对象是否存在于页

51、面上。 · View Instance让item绑定到下层的视图对象上以便读写数据,这里标明将item绑定到哪个视图对象实例(包含在一个应用模块中的)。 · View Attribute将视图对象实例的属性与item绑定。 · Admin Personalization决定是否允许系统管理员进行个性化定制。 · User Personalization决定是否允许用户个性化定制。 · Initial Value定义item的缺省值。Simplest Possible Expression Language (SPEL)对于所选的属性,OA Fr

52、amework支持使用SPEL表达式快速的将属性绑定到下层数据源提供的属性值上。比如,你可以将按钮的Rendered属性绑定到一个视图对象的属性上以检查是否需要显示或隐藏。属性中使用的SPEL语法如下:$oa.<ViewInstanceName>.<ViewAttributeName>技巧: SPEL是一个业界标准的表达式语言,它包含于JSTL中。组件重用OA Component开发环境所宣称的一项关键优势就是可以重用通用的page,region,item定义。Regions共享可以按下面的步骤创建共享的region。注意: 共享region可以包含一个或多个子regi

53、on。· 顶级共享region必须保存在它的XML文件中。 · 可以将共享region设置为接收其它region的值。值可能通过“状态管理”一文中描述的方式通过请求传递,或者使用页面事务缓存的值。 · 共享region必须处理失效的情况。比如,如果没有合适的参数传递到region,共享region应该接收或者抛出一个有意义的异常。 · 如果region的scope被设置为Public: o 顶级region必须有自己的应用模块。应用模块应该包含与这个region相关的视图对象。 o 顶级region必须有自己的控制器。如果需要可以为子region添加控制

54、器。· 共享region必须添加完整的注释文档。特殊情况: LOVLOV与共享region的区别:· LOV不需要关联控制器 · 当在页面上使用LOV时,并不从它继承,而是将页面字段的External LOV属性配置为页面与LOV的数据交换。Pages共享page实际上只是顶级region为共享region的pageLayout组件。共享page与共享region的创建过程类似。· 如果要重用一个单独的page或page flow,只要简单的创建一个新的菜单功能并将它指向主页面。 · 如果需要将页面插入到另一个使用了不同根应用模块的page f

55、low,则必须创建一个新的page,并继承共享的page的pageLayout region下的内容。记住正确设置将新页面的根应用模块。Items共享可以从任何区域的单个item继承,尽管我们推荐将准备重用的item放到一个重用region中。共享容器region将确保不会任意的修改item而不明确这样修改将影响使用这个item的页面。通过设置item的Extends属性设置共享。属性集 Atribute Sets属性集是一个命名了的可重用的属性集合,可以用于任何OA组件,包括regions,items和其它属性集。它被设计为可以在整个Oracle Application中可以重用的组件,它有

56、效的节约了Oracle和其客户的开销。· Oracle节约了翻译和管理的开销 · 客户可以更快的定制应用的全局个性化效果。另外,少数UI元素占用更少的中间层内存,提高了性能和伸缩性。通常,attributes sets被组织到OA组件包中(独立的XML包文件中),这个包与数据训表对应,一个包对应一个表:· 包名与不带下划线的数据库表名对应。比如,在OA Framework ToolBox中,有一个表FWK_TBX_PO_HEADERS。对应的属性集包名为FwkTbxPoHeaders。 · 各个属性集是为了显示表中各个列而设置的。 · 基于列的

57、属性集命名与列一致。比如,在FWK_TBS_PO_HEADERS表有一个名为HEADER_ID的列。对应的属性集被命名为 HeaderId。如果多个属性集对应于同一个列(这个值被用于不同的情况并使用了不同的prompt属性)时根据实际使用的位置使用不同的前缀来区分。 · 属性集也可以包含通用域头部和按钮等的设置。命名则使用与它们相关联的标签。使用属性集在下面的情况下使用属性集:· 所有的items都与table.column数值关联。比如,供应商查询字段和数据列表中的供应商字段可以使用同样的属性集。 · 所有通用按钮(确定、应用、退出等等)。这种情况下也可以继承按钮的快捷键。技巧: OA Framework通用按钮属性集包位于/oracle/apps/fnd/attributesets/Buttons/<AttributeSetName>。· 所有通用表格动作列(像删除、修

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论