深入浅出Oracle EBS之OAF学习笔记-Oracle EBS技术文档_第1页
深入浅出Oracle EBS之OAF学习笔记-Oracle EBS技术文档_第2页
深入浅出Oracle EBS之OAF学习笔记-Oracle EBS技术文档_第3页
深入浅出Oracle EBS之OAF学习笔记-Oracle EBS技术文档_第4页
深入浅出Oracle EBS之OAF学习笔记-Oracle EBS技术文档_第5页
已阅读5页,还剩73页未读 继续免费阅读

下载本文档

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

文档简介

DocRef:REFDocRefNumber<DocumentReferenceNumber>REFDocTitleOracleERP最佳技术实践REFLastDateApril10,2007STYLEREFHD2专题理解与讨论IfSection2>1“DateAuthorVersionChangeReferenceCREATEDATE\@"d-MMM-yy"10-Apr-07Jianhua.HuangDraft1aNoPreviousDocumentReviewersNamePositionDistributionCopyNo.NameLocationLibraryMasterProjectLibraryProjectManagerNoteToHolders:Ifyoureceiveanelectroniccopyofthisdocumentandprintitout,pleasewriteyournameontheequivalentofthecoverpage,fordocumentcontrolpurposes.Ifyoureceiveahardcopyofthisdocument,pleasewriteyournameonthefrontcover,fordocumentcontrolpurposes.ContentsTOC\o"2-3"DocumentControl ii1. 开发配置 21.1. 了解EBS服务器目录 21.2. 简单了解JServ 21.3. 版本检查和下载 31.4. SettingUpYourDevelopmentEnvironment 41.5. 额外设置 62. 完整的例子:HelloWorld 82.1. 开发设置 82.2. 开发步骤 82.3. 发布到EBS 113. 完整的项目实例:增、删、改、查、LOV、Button、Sequence 143.1. 需求概述 143.2. 开发设置 153.3. 基础:创建项目框架 153.4. 基础:创建所需M对象 163.5. 基础:创建V对象之LovRegion 183.6. 查:创建V对象之SearchPage 203.7. 查:如何实现ExecuteQuery 223.8. 查:修改M对象 233.9. 查:创建C对象 233.10. 增:创建V对象之CreatePage 243.11. 增:修改M对象 263.12. 增:创建C对象 273.13. 增:修改查询V对象 283.14. 增:修改查询C对象 283.15. 增:如何实现Seqence 293.16. 改:修改M对象 293.17. 改:创建V对象 303.18. 改:创建C对象 303.19. 改:修改查询V对象 313.20. 改:修改查询C对象 323.21. 删:修改M对象 323.22. 删:修改查询V对象 333.23. 删:修改查询C对象 343.24. 发布到EBS 344. 常用代码块备忘 354.1. 消息处理 354.2. 发布 354.3. BC4J处理流程 365. 专题理解与讨论 375.1. 问题记录 376. OpenandClosedIssuesforthisDeliverable 38OpenIssues 38ClosedIssues 38PAGE10开发配置了解EBS服务器目录$JAVA_TOPJSP中可以引用标准Java类库,也可以引用其他Java类库,客户化开发的类库统一放在$JAVA_TOP下,按目录组织。OAF开发的文件都放在这里。$OA_HTML$OA_HTML是所有EBSWeb文件所在目录,最常见的是HTML文件、图片文件、JSP文件、Applet对应的Jar文件。我们开发的jsp等相关文件要用ftp上传到这里;通常我们会再创建一个客户化文件夹,比如cux,方便文件管理。如何具体确定$OA_HTML?用applmgr用户(如gappdev)Telnet登录应用服务器,执行echo$OA_HTML可以看到具体目录位置,方便在ftp中定位。$COMMON_TOP/_pages/_oa__html第一次运行,Jserv自动将JSP转成Servlet,然后Cache到内存。首先是转成Java源文件,然后编译成Class文件,都放在$COMMON_TOP/_pages/_oa__html下,当然如果jsp放在$OA_HTML的子目录下,这里也有子目录。一个执行过的jsp文件会对应这里的一个java文件和一个class文件,有时候查错会把这里的java文件拿下来看,因为如果报错,出错行指的是java文件的行,而不是jsp文件的行。$OA_MEDIA$OA_MEDIA通常存放图片。简单了解JServLog文件N:$IAS_ORACLE_HOME/Apache/Jserv/logs通常文件名是mod_jserv.log,如果遇到错误,可以查看这里的log文件。调整autoreload.classes、developer_mode和debug_mode参数N:$IAS_ORACLE_HOME/Apache/Jserv/etc/pertiesdeveloper_mode指示JSP运行期是否自动重编译任何在上次执行后被修改了的jsp文件,原理是检查JSP源文件的时间标志。开发环境设为“true”,否则要重启Apache才能使新上载的jsp文件生效;该功能会大大降低性能。autoreload.classes指示是否自动载入servlet的class文件,不是指jsp中import的class。debug_mode用来显示调试信息,比如Java堆栈记录。开发环境也建议设为“true”。正式环境这几个参数应该被设为“false”。设完重启Apache生效。版本检查和下载常见的同类工具Dreamweaver:做Web开发(HTML/CSS/ASP/PHP/JSP)非常方便,我常用它来生成HTML代码和CSS代码JCreator:做简单的Java开发Eclipse:流行的Java开发工具JBuilder:Borland公司出品的IDEJDeveloper:Oracle公司出品的IDE工具选择开发JSP推荐直接使用Jdeveloper的OAF扩展版本;开发OAF,则必定使用Jdeveloper的OAF扩展版本。EBS版本与开发工具下载安装 http://<host_name>:<port_number>/OA_HTML/OAInfo.jsp可以查看当前EBS的OAF版本,如:8069/OA_HTML/OAInfo.jsp。下载的补丁需要与EBS当前OAF相关补丁对应:EBSPatchLevelOAFVersionJDeveloperARUSeg11i.FWK.H(3262919)11.5.10.K4045639,我用472567011i.ATG_PF.H(3438354)4045639ATGPFCU1(4017300)4141787ATGPFCU2(4125550)457351711i.ATG_PF.HRUP3(4334965)472567011i.ATG_PF.H.RUP4(4676589)545551411i.ATG_PF.HRUP5(5473858)目前是5455514….….此外,3262919补丁之后,系统中有职责OAFrameworkInstallTest、OAFrameworkToolBoxTutorial(Metalink说看看能否创建、查询供应商),如果它们的功能能正常使用,说明此EBS可使用OAF开发了。从Metalink下载相应JdeveloperPatch,解压即可,位置任意,但目录名不能有空格和中文;不需要安装,也不需要原版本的Jdeveloper。假定解压到D:\Software\Oracle\JDev9iOAExtension,后面的章节将以这个目录为基础。目录描述Segjdevdoc\javadoc\fwkOAFramework的Java文档jdevdoc\javadoc\aoljAOL/J的Java文档jdevdoc\javadoc\bc4jBC4J的Java文档jdevdoc\javadoc\uixUIX的Java文档jdevdoc\toolboxOAFrameworkToolBox指南/实验文档jdevdoc\devguideOAFramework的开发员手册jdevbin\扩展的Oracle9iJDeveloper可执行和OAFramework类库jdevhome\OAFrameworkToolBox指南的源文件和开发工作区SettingUpYourDevelopmentEnvironment本节内容参考自Developer’sGuide第一章同名章节。设置Windows环境变量JDEV_USER_HOMEN:我的电脑/右键/属性/高级/环境变量/用户变量的新建变量名:JDEV_USER_HOME变量值:随意,比如D:\Software\Oracle\JDev9iOAExtension\jdevhome\jdev下载DBC文件从服务器cd$FND_SECURE,下载<DB_Host_Name>_<SID>.dbc到本地<JDEV_USER_HOME>\dbc_files\secure下。D:\OAF_R12_GENERIC开发工具\jdevhome\jdev\dbc_files\secure为JDeveloper主程序jdevw.exe创建快捷方式为了方便快速启动,为jdevbin\jdev\bin\jdevw.exe创建快捷方式到桌面创建EBS用户并分配职责创建EBS用户如HUAJHUA,并分配如下两个职责:OAFrameworkToolBoxTutorialOAFrameworkToolBoxTutorialLabs创建数据库连接选择Connections/Database/NewConnection:然后按照DBC文件的内容创建连接,如GTDEV。打开主程序jdevw.exe,并打开Workspacetoolbox.jwsN:File/Open打开<JDEV_USER_HOME>\myprojects\toolbox.jws选择项目Tutorial.jpr的属性/RuntimeConnection,选择前面下载的DBC文件,输入用户名、密码、职责应用简称、职责代码选择项目Tutorial.jpr下的Tutorial.jpx,右键/EditTutorial,在Connection中选择上面创建的连接对项目LabSolutions.jpr做同样设置。Tips:上面2、3两步可以设置到DefaultProjectSettings,这样新建的项目将不需要重新设置了!测试右键toolbox.jws,选择Rebuildtoolbox.jws,0Error即可,不用管Warning运行test_fwktutorial.jsp选择HelloWorld测试通过即可(需要IE安全设置允许Javascrip)额外设置设置默认字符集N:Tools/Preferences/Environment要根据EBS字符集修改;这里我改成GB2312。我们新建的jsp页面,头部的charset将默认取这个值,如<%@pagecontentType="text/html;charset=GB2312"%>。设置默认Project属性:调式信息N:Project/DefaultProjectSettings…/Common/OracleApplications/RunOptions添加OADiagnostic、OADeveloperMode设置默认Project属性:ForgiveDuplicateDirectiveAttributesN:Project/DefaultProjectSettings…/Configurations/Development/Compiler/JSP如果JSP页面包含另外一个JSP页面,这两个页面中都Import了某个相同的类,则Build该JSP页面会报“Error(XXX):错误,属性定义了两次:language”。解决办法是选中ForgiveDuplicateDirectiveAttributes(HelpsJSP1.1Compatability)。完整的例子:HelloWorld本章节参考自Developer’sGuide,所以仅记录关键内容。开发设置即“开发配置”章节之“版本检查和下载”、“SettingUpYourDevelopmentEnvironment”、“额外设置”。开发步骤创建基于OA的项目:HelloWorld参考下表完成:参数值Seg默认目录<JDEV_USER_HOME>\myprojectsWorkspaceHelloWorldOAWorkspace.jwsProjectHelloWorldOAProject.jprDefaultPackagehand.oracle.apps.cux.helloDBCFile<JDEV_USER_HOME>\dbc_files\secure\gthf_gtdev.dbc用户/密码HUAJHUA/111111应用/职责简称AK/FWK_TBX_TUTORIALDatabaseConnectionGTDEV检查Project运行属性:调式信息添加OADiagnostic、OADeveloperMode。如果默认的项目属性已经设置,这里就不用设置了。创建OAComponentsPage参考下表完成:参数值SegNameHelloWorldPGPackagehand.oracle.apps.cux.hello.webui修改最高层区域参考下表完成:参数值SegIDPageLayoutRNRegionStylepageLayoutAMDefinitionoracle.apps.fnd.framework.server.OAApplicationModuleWindowTitleHelloWorldWindowTitleTitleHelloWorldPageHeaderAutoFooterTrueFormTrue创建主内容区域N:右键PageLayoutRN/New/Region参考下表完成:参数值SegIDMainRNRegionStylemessageComponentLayout创建文本框N:右键MainRN/New/messageTextInput参考下表完成:参数值SegIDHelloNameItemStylemessageTextInputPromptYourNameLength20MaximumLength50创建按钮容器N:右键MainRN/New/messageLayout参考下表完成:参数值SegIDButtonLayout创建按钮N:右键ButtonLayout/New/Item参考下表完成:参数值SegIDGoItemStylesubmitButtonAttributeSet/oracle/apps/fnd/attributesets/Buttons/Go创建控制器N:右键MainRN/New/SetNewController...参考下表完成:参数值SegPackagehand.oracle.apps.cux.hello.webuiClassNameHelloWorldMainCO实际上是创建类java类HelloWorldMainCO。修改代码:添加引用类importoracle.apps.fnd.framework.OAException;修改方法processFormRequest()publicvoidprocessFormRequest(OAPageContextpageContext,OAWebBeanwebBean)

{

if(pageContext.getParameter("Go")!=null)

{

StringuserContent=pageContext.getParameter("HelloName");

Stringmessage="Hello,"+userContent+"!";

thrownewOAException(message,OAException.INFORMATION);

}

}右键HelloWorldMainCO.java或其代码内任何区域,Rebuild。在本地Jdeveloper自带的OC4J服务器中运行N:右键HelloWorldPG.xml,运行发布到EBS了解文件类型和目录结构OAF项目的文件类型比较多,有些文件仅用于组织开发内容,有些文件则是开发和运行共同需要的,如XML、JavaClass。此外,开发和运行都有特定的目录结构规约,发布比Form要复杂些。总的来说XML文件是属性定义文件,Java文件是OAF代码,jws和jpr是项目管理文件,jpx则是当我们客户化标准功能时使用的替换文件。发布目录大约如下:编译、上传右键HelloWorldOAWorkspace.jws或HelloWorldOAProject.jpr,Rebuild将<JDEV_USER_HOME>\myclasses\hand上传到服务器$JAVA_TOP/hand修改目录属性,cd$JAVA_TOP后运行:chmod-R775hand把页面定义导入到MDS中实际上是用oracle.jrad.tools.xml.importer.XMLImporter将webui目录下的xml文件内容上传到数据库中。可以在服务器上做,也可以在本地做;服务器上的JDK、XDK可能版本过低,容易出现问题,所以通常在本地做。jdevw.exe所在目录的import.bat,已经自动设置了需要的环境变量,可以用来上传,使用实例:cdD:\Software\Oracle\JDev9iOAExtension\jdevbin\jdev\binimportD:\Software\Oracle\JDev9iOAExtension\jdevhome\jdev\myprojects\hand\oracle\apps\cux\hello\webui\HelloWorldPG.xml-rootdirD:\Software\Oracle\JDev9iOAExtension\jdevhome\jdev\myprojects-usernameapps-passwordapps2007-dbconnection"(description=(address_list=(address=(protocol=tcp)(host=)(port=1590)))(connect_data=(sid=gtdev)))"Tips:XMLImporter需要在命令行下运行,使用比较复杂,可以考虑创建一个简单的专门用于发布的Project,发布时修改下几个参数,运行项目即可。汉的美的升级项目就是这么做的。Java文件如下:importoracle.jrad.tools.xml.importer.XMLImporter;

publicclassCUXXMLImporter

{

publicstaticvoidmain(String[]args)

{

XMLImporterxmlimp=newXMLImporter();

Stringarg[]=newString[9];

arg[0]="D:\\Software\\Oracle\\JDev9iOAExtension\\jdevhome\\jdev\\myprojects\\hand\\oracle\\apps\\cux\\hello\\webui\\HelloWorldPG.xml";

arg[1]="-rootdir";

arg[2]="D:\\Software\\Oracle\\JDev9iOAExtension\\jdevhome\\jdev\\myprojects";

arg[3]="-username";

arg[4]="apps";

arg[5]="-password";

arg[6]="apps2007";

arg[7]="-dbconnection";

arg[8]="(description=(address_list=(address=(protocol=tcp)(host=)(port=1590)))(connect_data=(sid=gtdev)))";

xmlimp.doImport(arg);

}

}要使该类能正常运行,如果是普通项目,项目属性Libraries中加入MDSRuntime、OADeveloperLibaries、OracleXMLParserV2、OracleJDBC:验证导入用如下SQL验证:BEGIN

jdr_utils.printdocument('/hand/oracle/apps/cux/hello/webui/HelloWorldPG');

END;应该输出XML内容,而不是“Error:Couldnotfinddocument….”重启Apache如果是更新,则需要重启Apache。定义应用对象可以参考OAFrameworkToolBoxTutorial职责的菜单定义,关键是Function定义,HTMLCall中指向xml文件所在路径。实例如下:参数值FunctionCUX_OAF_HELLOTypeSSWAjspfunctionHtmlCallOA.jsp?page=/hand/oracle/apps/cux/hello/webui/HelloWorldPG菜单和职责定义这里不再详细说明。完整的项目实例:增、删、改、查、LOV、Button、Sequence需求概述完成下表数据的维护OAF的实体表,必须要有5个Who字段,主表SQL:--Createtable

createtableCUX.CUX_MFG_SYSTEM_CHECKS

(

SYSTEM_CHECK_IDNUMBERnotnull,

ORGANIZATION_IDNUMBERnotnull,--LOV

CHECK_TYPE_CODEVARCHAR2(30)notnull,--LOV

CHECK_FLAGVARCHAR2(1)default'Y'notnull,--CheckBox

DATEF_ROMDATEnotnull,--LOV

DATE_TODATEnotnull,--LOV

NOTIFY_ROLE1VARCHAR2(320),--LOV

NOTIFY_ROLE2VARCHAR2(320),--lOV

NOTIFY_ROLE3VARCHAR2(320),--LOV

CREATION_DATEDATEdefaultSYSDATEnotnull,

CREATED_BYNUMBERdefault-1notnull,

LAST_UPDATED_BYNUMBERdefault-1notnull,

LAST_UPDATE_DATEDATEdefaultSYSDATEnotnull,

LAST_UPDATE_LOGINNUMBER,

PROGRAM_APPLICATION_IDNUMBER,

PROGRAM_IDNUMBER,

PROGRAM_UPDATE_DATEDATE,

REQUEST_IDNUMBER,

ATTRIBUTE_CATEGORYVARCHAR2(30),

ATTRIBUTE1VARCHAR2(240),

ATTRIBUTE2VARCHAR2(240),

ATTRIBUTE3VARCHAR2(240),

ATTRIBUTE4VARCHAR2(240),

ATTRIBUTE5VARCHAR2(240),

ATTRIBUTE6VARCHAR2(240),

ATTRIBUTE7VARCHAR2(240),

ATTRIBUTE8VARCHAR2(240),

ATTRIBUTE9VARCHAR2(240),

ATTRIBUTE10VARCHAR2(240),

ATTRIBUTE11VARCHAR2(240),

ATTRIBUTE12VARCHAR2(240),

ATTRIBUTE13VARCHAR2(240),

ATTRIBUTE14VARCHAR2(240),

ATTRIBUTE15VARCHAR2(240)

);

--Create/Recreateindexes

createuniqueindexCUX.CUX_MFG_SYSTEM_CHECKS_U1onCUX.CUX_MFG_SYSTEM_CHECKS(SYSTEM_CHECK_ID)

tablespaceCUXX;

createuniqueindexCUX.CUX_MFG_SYSTEM_CHECKS_U2onCUX.CUX_MFG_SYSTEM_CHECKS(ORGANIZATION_ID,CHECK_TYPE_CODE)

tablespaceCUXX;

--

CREATESEQUENCECUX.cux_mfg_system_checks_s;

--Createsynonym

DROPSYNONYMcux_mfg_system_checks;

CREATESYNONYMcux_mfg_system_checksFORCUX.cux_mfg_system_checks;

DROPSYNONYMcux_mfg_system_checks_s;

CREATESYNONYMcux_mfg_system_checks_sFORCUX.cux_mfg_system_checks_s;LovORGANIZATION_ID来自如下SQL:SELECTanization_id,anization_code,org.NAMEorganization_name

FROMmtl_parametersmtp,hr_all_organization_units_vlorg,org_accessoa

WHEREanization_id=anization_id

ANDanization_id=anization_id

ANDoa.responsibility_id=fnd_profile.VALUE('RESP_ID')CHECK_TYPE_CODE来自如下SQL:SELECTlov.lookup_codecheck_type_code,lov.meaningcheck_type_meaning

FROMfnd_lookup_values_vllov

WHERElov.lookup_type='GITI_MFG_CHECK_TYPE'NOTIFY_ROLE1..3来自如下SQL:SELECTwfr.NAME,wfr.display_name,wfr.description,wfr.email_address

FROMwf_roleswfr

WHEREwfr.orig_systemIN('FND_USR','PER')开发设置即“开发配置”章节之“版本检查和下载”、“SettingUpYourDevelopmentEnvironment”、“额外设置”。基础:创建项目框架创建基于OA的项目:HelloWorld参考下表完成:参数值Seg默认目录<JDEV_USER_HOME>\myprojectsWorkspaceGITICUXMFG.jwsProjectGITICUXMFG.jprDefaultPackagehand.oracle.apps.cux.mfgDBCFile<JDEV_USER_HOME>\dbc_files\secure\gthf_gtdev.dbc用户/密码HUAJHUA/111111应用/职责简称AK/FWK_TBX_TUTORIALDatabaseConnectionGTDEV检查Project运行属性:调式信息添加OADiagnostic、OADeveloperMode。如果默认的项目属性已经设置,这里就不用设置了。创建BC4JPackageBC4J包需要遵循如下格式要求:对象类型Seg实体对象<mycompany>.oracle.apps.<appshortname>.[<modulename>].schema.server视图对象<mycompany>.oracle.apps.<appshortname>.<modulename>.serverlov视图对象<mycompany>.oracle.apps.<appshortname>.<modulename>.lov.serverpoplist视图对象<mycompany>.oracle.apps.<appshortname>.<modulename>.poplist.server页面<mycompany>.oracle.apps.<appshortname>.<modulename>.webui.XxxxPG控制器<mycompany>.oracle.apps.<appshortname>.<modulename>.webui.XxxxCO所以我们创建如下BusinessComponentPackage:对象类型Seg实体对象hand.oracle.apps.cux.mfg.schema.server视图对象hand.oracle.apps.cux.mfg.serverlov视图对象hand.oracle.apps.cux.mfg.lov.serverpoplist视图对象hand.oracle.apps.cux.mfg.poplist.server基础:创建所需M对象开发之前,应当先规划M对象。这里我们将创建1个EO、1个基于EO+SQL的VO用于增删改查、3个基于SQL用于LOV的VO、1个用于管理LOV的AM、一个用于管理程序页面的AM。创建EntityObjects:SystemChecksEO在hand.oracle.apps.cux.mfg.schema.server下创建。Name: SystemChecksEO

SchemaObject: CUX_MFG_SYSTEM_CHECKS设置SystemCheckId为PrimaryKey;设置SystemCheckId、OrganizationId、CheckTypeCode的Updateable为WhileNew;设置OrganizationId、CheckTypeCode为Unique。在产生Java画面,选中EntityObjectClass下的所有复选框。创建ViewObjects:SystemChecksVO该VO用来完成增加和修改。在hand.oracle.apps.cux.mfg.server下创建。Name: SystemChecksVOEntityObject,选SystemChecksEO,并选所有字段。向导结束后,在SystemChecksVO的Query属性中,启用“Expert”模式,添加表和条件,注意新加的字段放最后:SELECTSystemChecksEO.SYSTEM_CHECK_ID,

SystemChecksEO.ORGANIZATION_ID,

SystemChecksEO.CHECK_TYPE_CODE,

SystemChecksEO.CHECK_FLAG,

SystemChecksEO.DATEF_ROM,

SystemChecksEO.DATE_TO,

SystemChecksEO.NOTIFY_ROLE1,

SystemChecksEO.NOTIFY_ROLE2,

SystemChecksEO.NOTIFY_ROLE3,

SystemChecksEO.CREATION_DATE,

SystemChecksEO.CREATED_BY,

SystemChecksEO.LAST_UPDATED_BY,

SystemChecksEO.LAST_UPDATE_DATE,

SystemChecksEO.LAST_UPDATE_LOGIN,

SystemChecksEO.PROGRAM_APPLICATION_ID,

SystemChecksEO.PROGRAM_ID,

SystemChecksEO.PROGRAM_UPDATE_DATE,

SystemChecksEO.REQUEST_ID,

SystemChecksEO.ATTRIBUTE_CATEGORY,

SystemChecksEO.ATTRIBUTE1,

SystemChecksEO.ATTRIBUTE2,

SystemChecksEO.ATTRIBUTE3,

SystemChecksEO.ATTRIBUTE4,

SystemChecksEO.ATTRIBUTE5,

SystemChecksEO.ATTRIBUTE6,

SystemChecksEO.ATTRIBUTE7,

SystemChecksEO.ATTRIBUTE8,

SystemChecksEO.ATTRIBUTE9,

SystemChecksEO.ATTRIBUTE10,

SystemChecksEO.ATTRIBUTE11,

SystemChecksEO.ATTRIBUTE12,

SystemChecksEO.ATTRIBUTE13,

SystemChecksEO.ATTRIBUTE14,

SystemChecksEO.ATTRIBUTE15,

org.NAMEorganization_name,

lov.meaningcheck_type_name,

wf1.display_namenotify_role_name_1,

wf2.display_namenotify_role_name_2,

wf3.display_namenotify_role_name_3,

anization_code

FROMCUX_MFG_SYSTEM_CHECKSSystemChecksEO,

mtl_parametersmtp,

hr_all_organization_units_vlorg,

org_accessoa,

fnd_lookup_values_vllov,

(SELECTwfr.NAME,wfr.display_name

FROMwf_roleswfr

WHEREwfr.orig_systemIN('FND_USR','PER'))wf1,

(SELECTwfr.NAME,wfr.display_name

FROMwf_roleswfr

WHEREwfr.orig_systemIN('FND_USR','PER'))wf2,

(SELECTwfr.NAME,wfr.display_name

FROMwf_roleswfr

WHEREwfr.orig_systemIN('FND_USR','PER'))wf3

WHERESystemChecksEO.organization_id=anization_id

ANDanization_id=anization_id

ANDanization_id=anization_id

ANDoa.responsibility_id=fnd_profile.VALUE('RESP_ID')

ANDoa.resp_application_id=fnd_profile.VALUE('RESP_APPL_ID')

ANDSystemChecksEO.check_type_code=lov.lookup_code

ANDlov.lookup_type='GITI_MFG_CHECK_TYPE'

ANDSystemChecksEO.notify_role1=wf1.NAME(+)

ANDSystemChecksEO.notify_role2=wf2.NAME(+)

ANDSystemChecksEO.notify_role3=wf3.NAME(+)创建ViewObjects:OrgAccessLOVVO该VO用于LOV。在hand.oracle.apps.cux.mfg.lov.server下创建。Name: OrgAccessLOVVO一直Next,直接输入SQL:SELECTanization_id,anization_code,org.NAMEorganization_name

FROMmtl_parametersmtp,hr_all_organization_units_vlorg,org_accessoa

WHEREanization_id=anization_id

ANDanization_id=anization_id

ANDoa.responsibility_id=fnd_profile.VALUE('RESP_ID')创建ViewObjects:CheckTypeLOVVO该VO用于LOV。在hand.oracle.apps.cux.mfg.lov.server下创建。Name: CheckTypeLOVVO一直Next,直接输入SQL:SELECTlov.lookup_codecheck_type_code,lov.meaningcheck_type_meaning

FROMfnd_lookup_values_vllov

WHERElov.lookup_type='GITI_MFG_CHECK_TYPE'创建ViewObjects:NotifyRoleLOVVO该VO用于LOV。在hand.oracle.apps.cux.mfg.lov.server下创建。Name: NotifyRoleLOVVO一直Next,直接输入SQL:SELECTwfr.NAME,wfr.display_name,wfr.description,wfr.email_address

FROMwf_roleswfr

WHEREwfr.orig_systemIN('FND_USR','PER')创建ApplicationModule:SystemChecksAM在hand.oracle.apps.cux.mfg.server下创建。Name: SystemChecksAM在数据模型画面,把SystemChecksVO加进来两次,可以看到两个实例SystemChecksVO1、SystemChecksVO2,前者用于增加和修改,后者用于查询和删除。向导完毕之后,编辑该AM,加入如下Property:Name: RETENTION_LEVEL

Value: MANAGE_STATE创建ApplicationModule:LovAM该AM用于管理Lov。在hand.oracle.apps.cux.mfg.lov.server下创建。Name: LovAM在数据模型画面,把OrgAccessLOVVO、CheckTypeLOVVO、NotifyRoleLOVVO加进来。向导完毕之后,编辑该AM,加入如下Property:Name: RETENTION_LEVEL

Value: MANAGE_STATE基础:创建V对象之LovRegion创建LovOAComponents:OrgAccessLovRN新建OAComponents/RegionName: OrgAccessLovRN

Package: hand.oracle.apps.cux.mfg.lov.webui

Style: listOfValues向导完成后继续设置如下属性Scope: Public

AMDefinition: hand.oracle.apps.cux.mfg.lov.server.LovAM

AdvSearchAllowed: True新建table选中OrgAccessLovRN,新建tableUsingWizard,选择LovAM下的OrgAccessLOVVO1,Resion名字为LovTable,选出所有字段,根据实际需要修改Prompt。向导完成后继续设置如下属性,所有Item都可以设。SearchAllowed: True创建LovOAComponents:CheckTypeLovRN新建OAComponents/RegionName: CheckTypeLovRN

Package: hand.oracle.apps.cux.mfg.lov.webui

Style: listOfValues向导完成后继续设置如下属性Scope: Public

AMDefinition: hand.oracle.apps.cux.mfg.lov.server.LovAM

AdvSearchAllowed: True新建table选中OrgAccessLovRN,新建tableUsingWizard,选择LovAM下的CheckTypeLOVVO1,Resion名字为LovTable,选出所有字段,根据实际需要修改Prompt。向导完成后继续设置如下属性,所有Item都可以设。SearchAllowed: True创建LovOAComponents:NotifyRoleLovRN新建OAComponents/RegionName: NotifyRoleLovRN

Package: hand.oracle.apps.cux.mfg.lov.webui

Style: listOfValues向导完成后继续设置如下属性Scope: Public

AMDefinition: hand.oracle.apps.cux.mfg.lov.server.LovAM

AdvSearchAllowed: True新建table选中OrgAccessLovRN,新建tableUsingWizard,选择LovAM下的NotifyRoleLOVVO1,Resion名字为LovTable,选出所有字段,根据实际需要修改Prompt。向导完成后继续设置如下属性,所有Item都可以设。SearchAllowed: True查:创建V对象之SearchPage创建顶层页面:SystemChecksSearchPG新建OAComponents/PageName: SystemChecksSearchPG

Package: hand.oracle.apps.cux.mfg.webui向导完成后继续设置如下属性Scope: PageLayoutRN

AMDefinition: hand.oracle.apps.cux.mfg.server.SystemChecksAM

WindowsTitle: MFGSystemChecks

Titile: SystemChecks(可选)关于Logo可以考虑修改下默认的公司Logo图片;也可以考虑在公司Logo下加一个产品Logo——ProductBranding:ID: ProdBrand

ImageURI: /OA_MEDIA/GITILOGO.gif

AdditionalText: MFGLogo(可选)页面级消息可以考虑加一个页面级别的消息,该消息需要来源AOLMessage,以支持多语言。至此,可以右键SystemChecksSearchPG运行。创建查询区域:QueryRN在PageLayoutRN下新建RegionID: QueryRN

RegionStyle: Query

ConstructionMode: resultsBasedSearch

IncludeSimplePanel: True

IncludeViewsPanel: True

IncludeAdvancedPanel:True在QueryRN下新建RegionUsingWizard选择SystemChecksVO2,RegionID设置为ResultsTable,Style选择Table,字段选择有意义:组织代码、组织名称、检查名称、是否检查、开始日期、结束日期、通知者1..3。根据需要修改Prompt,Style则要全部改为messageStyledText!向导结束后针对ResultsTable的属性设置如下。AdditionalText: ResultsTable

Width: 100%

UserPersonalization: True而对ResultsTable下的Item,主要关注如下几个属性。SearchAllowed: 是否允许查询,建议设置必要的字段为True即可

SortAllowed: 是否允许排序,建议设置必要的字段为True即可

InitialSortSequence: 对于允许排序的字段,可设置初始排序方法

SelectiveSearchCriteria:查询是否不允许空查询,数据量大才需要设置为True

UserPersonalization: 建议都设置为True至此,可以右键SystemChecksSearchPG运行,可以执行查询了。Tips:可以把CheckFlag类型改为MessageCheckBox,设置方法同Forms,不过别忘了把ReadOnly属性设下。自己实现查询上面的查询区域,是自动出来的(SearchAllowed=True的字段),但比较简单,没有LOV,所以仅适用简单查询,要完成复杂查询,需要继续做些开发。修改QueryRNConstructionMode: autoCustomizationCriteria

IncludeViewsPanel: False

IncludeAdvancedPanel: False在QueryRN下建simpleSearchPanel把默认生成的HeaderRegion2改为SimpleSearchHdr,Text属性改为Search。把默认生成的messageComponentLayoutRegion1改为CustomSimpleSearch。在CustomSimpleSearch下创建需要的查询字段,类似在Forms中创建查询块建三个字段:SerachOrgCode、SerachOrgName、SerachCheckName。类型都是messageTextInput,设置CSSClass属性为OraFieldText,其他属性如SelectiveSearchCriteria、DataType、MaximumLength、Prompt、Length根据需要设置。在queryComponents下创建simpleSearchMappings,然后创建查询字段映射ID: OrgCodeMap

SearchItem: SearchOrgCode

ResultsItem: OrganizationCodeID: OrgNameMap

SearchItem: SearchOrgName

ResultsItem: OrganizationNameID: CheckNameMap

SearchItem: SearchCheckName

ResultsItem: CheckTypeName至此,可以右键SystemChecksSearchPG运行,效果和自动产生的查询一样!给查询加LovLov的使用和Forms中类似,需要设置在哪个字段启用Lov,需要设置Return字段。升级SerachOrgName为Lov字段Style: messageLovInput

ExternalLOV:/hand/oracle/apps/cux/mfg/lov/webui/OrgAccessLovRN并创建如下LovMapping:ID: lovMap1

LovRegionItem: OrganizationCode

ReturnItem: SerachOrgCode

CriteriaItem: SerachOrgCodeID: lovMap2

LovRegionItem: OrganizationName

ReturnItem: SerachOrgName

CriteriaItem: SerachOrgName注:CriteriaItem用来提前自动过滤Lov的内容!升级SerachCheckName为Lov字段Style: messageLovInput

ExternalLOV:/hand/oracle/apps/cux/mfg/lov/webui/CheckTypeLovRN并创建如下LovMapping:ID: lovMap3

LovRegionItem: CheckTypeMeaning

ReturnItem: SerachCheckName

CriteriaItem: SerachCheckName至此,可以右键SystemChecksSearchPG运行,查询字段可以出来Lov了。查:如何实现ExecuteQuery对于数据量不大的查询或者报表,希望一打开页面就执行查询。根据MVC的关系,用户通过V(Page及其Layout)——UI界面与系统交互,系统通过CO控制页面响应和页面流转,适当时候调用M完成逻辑处理,M(AM、EO、CO)负责和数据库打交道。按照OAF规范,需要在VO中实现查询,AM中编写调用VO的方法,CO中调用AM的方法。查:修改M对象(因为没有参数,可选)修改VO的Java类在SystemChecksVOImpl.java中加入方法:publicvoidinitQuery()

{

executeQuery();

}修改AM的Java类在SystemChecksAMImpl.java中加入方法,去调用VO:publicvoidinitQuery()

{

SystemChecksVOImplvo=getSystemChecksVO2();

if(vo==null)

{

//Handleerrorhere

}

vo.initQuery();

}查:创建C对象创建控制器:SystemChecksSearchCO给PageLayoutRN或ResultTable创建控制器,相当于Form中创建触发器。PackageName: hand.oracle.apps.cux.mfg.webui

ClassName: SystemChecksSearchCO简单理解,自动生成的Java代码中,processRequest是在浏览器初次打开页面时调用,而processFormRequest除此之外,每次用户点击提交按钮时还会再调用。所以我们应当在processRequest中执行查询。先引用包:importoracle.apps.fnd.framework.OAApplicationModule;再在processRequest最后添加:OAApplicationModuleam=pageContext.getApplicationModule(webBean);

am.invokeMethod("initQuery");至此常规的查询功能已完全实现。运行效果如下:增:创建V对象之CreatePage创建顶层页面:SystemChecksCreatePG新建OAComponents/PageName: SystemChecksCreatePG

Package: hand.oracle.apps.cux.mfg.webui向导完成后继续设置如下属性ID: PageLayoutRN

AMDefinition: hand.oracle.apps.cux.mfg.server.SystemChecksAM

WindowsTitle: MFGSystemChecks

Titile: SystemChecks

WarnAboutChanges: True(可选)关于Logo可以从SearchPage拷贝过来。创建按钮区域和按钮:PageButtons在PageLayoutRN下新建RegionID: PageButtons

RegionStyle: pageButtonBar在PageButtons下新建两个按钮,一个Cancel,一个ApplyID: Cancel

ItemStyle: submitButton

AttributeSet: /oracle/apps/fnd/attributesets/Buttons/Cancel

DisableServerSideValidation: True

DisableClientSideValidation: TrueID: Apply

ItemStyle: submitButton

AttributeSet: /oracle/apps/fnd/attributesets/Buttons/Apply创建新建区域:MainRN在PageLayoutRN下新建RegionUsingWizard,VO选择SystemChecksVO1ID: MainRN

RegionStyle: defaultSingleColumn选择除Who、请求、弹性域外的所有Item,各字段Prompt根据需要修改。向导结束后,将RegionStyle更改为messageComponentLayout。在MainRN下新建messageLayout,ID为FormValueRN然后把那些需要使用Lov返回但本身不显示的字段,这里是OrganizationId、CheckTypeCode、NotifyRole1、NotifyRole2、NotifyRole3,全部拉到这下面,再把ItemStyle设置为formValue。设置各个字段的属性先说通常设置:Required: 根据需要设置

SearchAllowed: 是否允许查询,建议设置必要的字段为True即可

SortAllowed: 是否允许排序,建议设置必要的字段为True即可

InitialSortSequence: 对于允许排序的字段,可设置初始排序方法

SelectiveSearchCriteria:查询是否不允许空查询,数据量大才需要设置为True

UserPersonalization: 建议都设置为True再说关键属性:ItemStyle: 想包含在UI中又不显示则用formValue,其他都可顾名思义

ViewInstance: 类似Form中的Block_Name,非数据库字段放空

ViewAttribute: 类似Form中的Item_Name,非数据库字段放空

CSSClass: 显示的字段,只读用OraDataText,其他用OraFieldText

Tiptype: 日期字段用dateFormat,其他根据需要设置在MainRN下新建非数据库字段,并将它们设置为Lov本例需要建立5个字段,并给它们设置Lov及Lov的Mapping。在PageLayoutRN下创建一个提示区pageStatusID: RequiredKey

Extends: /oracle/apps/fnd/framework/webui/OAReqFieldDescRG

Width: 100%至此,运行效果如下:要实际完成新增记录,还得写点代码。增:修改M对象修改AM的Java类在SystemChecksAMImpl.java,先引用包:importoracle.jbo.Row;

importoracle.jbo.Transaction;

importoracle.apps.fnd.framework.OAViewObject;再加入3个方法,1个是用来初始化1个空行,1个用来提交,1个用来回滚:/***************************************************************************

*Createsanewrow.

****************************************************************************

*/

publicvoidcreateSystemCheck()

{

OAViewObjectvo=(OAViewObject)getSystemChecksVO1();

/*

if(!vo.isPreparedForExecution())

{

vo.executeQuery();

}

*/

vo.setMaxFetchSize(0);

vo.clearCache();

Rowrow=vo.createRow();

vo.insertRow(row);

row.setNewRowState(Row.STATUS_INITIALIZED);

}

/****************************************************************************

*Commitsthetransaction.

*****************************************************************************

*/

publicvoidapply()

{

getTransaction().commit();

}

/****************************************************************************

*Executesarollbackincludingthedatabaseandthemiddletier.

*********

温馨提示

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

评论

0/150

提交评论