




免费预览已结束,剩余50页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
*陈震南Email: MSN: QQ: 31505614*Lab 1:创建客户化应用本节介绍如何创建一个客户化应用。Step 1: 建立 Directory以 applprod 用户登录操作系统运行:$ cd $APPL_TOP在目录$APPL_TOP 下建立目录 satyam,其结构如图(注意大小写的区分)图 1.1*Step 2:修改 Environment File以 applprod 用户登录操作系统*修改环境文件 PROD.env,增加如下 2 行:*SATYAM_TOP =“/demoapp/demoappl /satyam/1.0.0”Export SATYAM_TOP重启 ORACLE APPLICATIONS,以使更改生效。*Step 3:创建 Tablespace/User以 applprod 用户登录操作系统运行:$ sqlplus在 SQL-PLUS 中,以用户名 SYSTEM 连结数据库运行以下命令建立 TABLESPACE:create tablespace satyam_datadatafile /demo/demodata/satyam_data01.dbf size 500M reuse autoextend on next 10M ;create tablespace satyam_idxdatafile /demo/demodata/satyam_idx01.dbfsize 100M reuse autoextend on next 10M ;运行以下命令建立 USER:create user satyam identified by satyam default tablespace satyam_data temporary tablespace temp ;运行以下命令授权:grant connect, resource to satyam ;grant select any table to satyam ;grant select any sequence to satyam ;*如果是一次性导入的话下面是运行创建Table, Sequence, Trigger, Synonym, View,1*PDF文件使用 pdfFactory Pro试用版本创建*陈震南Email: MSN: QQ: 31505614Package 等的脚本,在下一节再讨论。Step 4: Application Setup操作者必须先登录 OA 系统,并以“系统管理员”职责进入“浏览器”窗口。(1) Application Register在功能菜单中选择“应用-注册”,打开“应用”窗口新建一条记录(具体内容如下),保存后,关闭该窗口ApplicationShort NameBasepathDescription(2) Oracle UsersSATYAM CustomizationSATYAMSATYAM_TOPSATYAM Customization在功能菜单中选择“安全性-ORACLE-注册”,打开“ORACLE 用户”窗口新建一条记录(具体内容如下),保存后,关闭该窗口*Database User NameSATYAMPasswordPrivilegeInstall GroupDescription(3)Data Groups相应口令(系统要求输入2次,以确认)Enabled1SATYAM Customization在功能菜单中选择“安全性-ORACLE-数据组”,打开“数据组”窗口用窗口菜单“查询-查找”来检索出“标准”数据组。并在其下的明细行中新建一条记录(具体内容如下),保存后,关闭该窗口(如果 OA 启用了 MRC,则需要在“MRC”数据组中添加同样一条记录)。ApplicationORACLE IDDescription(4)Request GroupsSATYAM CustomizationAPPS在功能菜单中选择“安全性-责任-请求”,打开请“求组窗口”,创建一条新记录。GroupApplicationCodeDescriptionSATYAM Concurrent ProgramsSATYAM Customization接下来的步骤是建立Menu,Responsibility,Profile等,在此就不再一一赘述了。2*PDF文件使用 pdfFactory Pro试用版本创建*陈震南Email: MSN: QQ: 31505614*Lab 2:创建客户化数据库对象的注意事项在开发客制化Form往往要创建的新的数据库对象。比如。比如一个客制化的应用为SATYAM,对应的Schema为SATYAM,那么实在对象如table、Sequence、index、triggers等应建在SATYAMSchema的表空间中,其他代码对象如packages, views, procedures, functions等创建在AppsSchema下,常见错误是把表建在Apps Schema下,又来建别名,这个时候删除别名时会报对象不存在,而建别名的时候又报对象已存在。Apps Schema应创建其他用户对象的synonyms或者得到授权访问这些对象。下面是一段典型创建客户化表,索引,视图等对象的典型代码,可以对比验证下是否符合上一段所说的原则。PROMPT CONNECT DATABASE.*CONNECT SATYAM/&SATYAM_PASSWORD&SID_NAME;-以SATYAM用户登录,创建实在对象PROMPT CREATE TABLE.DROP TABLE satyam_catalog_group_headers_all;CREATE TABLE satyam_catalog_group_headers_all( CATALOG_GROUP_HEADER_ID NUMBER not null, CATALOG_GROUP_SERIAL_NUMBER VARCHAR2(30), CATALOG_GROUP_NAME VARCHAR2(100), CATALOG_GROUP_DESCRIPTION VARCHAR2(240), ,ORG_ID NUMBER not null,CREATION_DATE DATE not null, CREATED_BY NUMBER not null, LAST_UPDATED_BY NUMBER not null, LAST_UPDATE_DATE DATE not null, LAST_UPDATE_LOGIN NUMBER,ATTRIBUTE_CATEGORY VARCHAR2(30), ATTRIBUTE1 VARCHAR2(150), , ATTRIBUTE15 VARCHAR2(150),REQUEST_ID NUMBER, PROGRAM_APPLICATION_ID NUMBER, PROGRAM_ID NUMBER, PROGRAM_UPDATE_DATE DATE) TABLESPACE satyam_data; PROMPT CREATE INDEX. drop index SATYAM_CATALOG_group_HEADERS_U1; drop index SATYAM_CATALOG_group_HEADERS_U2;CREATE UNIQUE INDEX SATYAM_CATALOG_group_HEADERS_U1 ONSATYAM_CATALOG_group_HEADERS_ALL(catalog_group_header_id) TABLESPACESATYAM_IDX; CREATE UNIQUE INDEX SATYAM_CATALOG_group_HEADERS_U2 ONSATYAM_CATALOG_group_HEADERS_ALL(org_id,catalog_group_name) TABLESPACESATYAM_IDX; *PROMPT GRANT/REVOKE OBJECT PRIVILEGES -向APPS用户授权3*PDF文件使用 pdfFactory Pro试用版本创建*陈震南Email: MSN: QQ: 31505614GRANT SELECT, INSERT, UPDATE, DELETE, REFERENCES, ALTER, INDEX ONSATYAM.SATYAM_CATALOG_group_HEADERS_ALL TO APPS WITH GRANT OPTION; GRANT SELECT, INSERT, UPDATE, DELETE, REFERENCES, ALTER, INDEX ONSATYAM.SATYAM_CATALOG_group_lineS_ALL TO APPS WITH GRANT OPTION;PROMPT CREATE SEQUENCEDROP SEQUENCE SATYAM_CATALOG_group_HEADERS_S;CREATE SEQUENCE SATYAM_CATALOG_group_HEADERS_S START WITH 1;PROMPT CONNECT DATABASE.*CONNECT APPS/&APPS_PASSWORD&SID_NAME;-以APPS用户登录,创建虚对象PROMPT CREATE SYNONYM.DROP SYNONYM SATYAM_CATALOG_group_HEADERS_ALL;DROP SYNONYM SATYAM_CATALOG_group_HEADERS_S;*CREATE SYNONYM SATYAM_CATALOG_group_HEADERS_ALL FORSATYAM.SATYAM_CATALOG_group_HEADERS_ALL;CREATE SYNONYM SATYAM_CATALOG_group_HEADERS_S FORSATYAM.SATYAM_CATALOG_group_HEADERS_S;COMMIT;*PROMPTCREATE OR REPLACE VIEW.CREATE OR REPLACE VIEW SATYAM_CATALOG_GROUP_HEADERS ASSELECT catalog_group_header_id, catalog_group_serial_number, catalog_group_name, catalog_group_description, org_id, creation_date, created_by, last_updated_by, last_update_date, last_update_login, attribute_category, attribute1, attribute15, request_id, program_application_id, program_id, program_update_dateFROM satyam_catalog_group_headers_all*WHERENVL(ORG_ID, NVL(TO_NUMBER(DECODE(SUBSTRB(USERENV(CLIENT_INFO), 1, 1), ,NULL, SUBSTRB(USERENV(CLIENT_INFO), 1, 10), -99) =4*PDF文件使用 pdfFactory Pro试用版本创建*陈震南Email: MSN: QQ: 31505614 NVL(TO_NUMBER(DECODE(SUBSTRB(USERENV(CLIENT_INFO), 1, 1), , NULL,* SUBSTRB(USERENV(CLIENT_INFO), 1, 10), -99); CREATE OR REPLACE VIEW SATYAM_CATALOG_GROUP_HEADERS_V ASSELECT catalog_group_header_id, catalog_group_serial_number, catalog_group_name, catalog_group_description, org_id, creation_date, created_by, last_updated_by, last_update_date, last_update_login, attribute_category, attribute1, request_id, program_application_id, program_id, program_update_dateFROM satyam_catalog_group_headers;在上段代码中,首先建立了一个satyam_catalog_group_headers_all基表,有几个特殊字段 ORG_ID( 保 存 OU_ID), 五 个 Set_Who 字 段 (CREATION_DATE 、 CREATED_BY 、 CREATION_DATE 、CREATED_BY、LAST_UPDATE_LOGIN)相信大家都很熟悉了。ATTRIBUTE字段ATTRIBUTE_CATEGORY、ATTRIBUTE1-ATTRIBUTE15为使用弹性域预留;REQUEST_ID、PROGRAM_APPLICATION_ID、PROGRAM_ID、PROGRAM_UPDATE_DATE是四个并发程序相关的字段,我也没有用过。随后又创建了2个View: satyam_catalog_group_headers,satyam_catalog_group_headers_v,前者的作用在于根据OU屏蔽业务数据,不用去管那一串条件的含义,照抄会用即可。后者用于关联其它表或视图的数据。我习惯采用的命名方式为基表(A):XXXX_ALL;限制OU的的视图(B):XXXX;关联其它表或视图的视图(C):XXXX_V。如果要在客户化表上应用弹性域或预警,必须注册Tables/Columns,系统AD_DD包里有四个procedure经常会用到,procedure register_table (p_appl_short_name in varchar2,p_tab_name in varchar2,p_tab_type in varchar2,p_next_extent in number default 512,p_pct_free in number default 10,p_pct_used in number default 70);procedure register_column (p_appl_short_name in varchar2,p_tab_name in varchar2,5*PDF文件使用 pdfFactory Pro试用版本创建*陈震南Email: MSN: QQ: 31505614p_col_name in varchar2,p_col_seq in number,p_col_type in varchar2,p_col_width in number,p_nullable in varchar2,p_translate in varchar2,p_precision in number default nul ,p_scale in number default nul );procedure delete_table (p_appl_short_name in varchar2,p_tab_name in varchar2);procedure delete_column (p_appl_short_name in varchar2,p_tab_name in varchar2,p_col_name in varchar2);eg:ad_dd.register_table(SATYAM, SATYAM_CATALOG_GROUP_HEADERS_ALL, T,8,10, 90);ad_dd.register_column(SATYAM, SATYAM_CATALOG_GROUP_HEADERS_ALL,ATTRIBUTE_CATEGORY, 1, VARCHAR2, 150, Y, N);ad_dd.register_column(SATYAM, SATYAM_CATALOG_GROUP_HEADERS_ALL,ATTRIBUTE1, 2, VARCHAR2, 150, Y, N);ad_dd.register_column(SATYAM, SATYAM_CATALOG_GROUP_HEADERS_ALL,ATTRIBUTE15, 16, VARCHAR2, 150, Y, N);6*PDF文件使用 pdfFactory Pro试用版本创建*陈震南Email: MSN: QQ: 31505614*Lab 3:新建 Form修改Template.fmb模板是新建Form最快方法,对于在EBS系统中使用的Form,利用Template可以省去许多繁杂的工作。开发之前记得把服务器上appstand.fmb,pll,fmb文件($AU_TOP/RESOURCE/US路径下)下载到本地指定路径,以防打开或编译fmb文件时找不到引用对象。在Form builder中打开Template.fmb文件后,修改module name后另存为。下一步是修改3个地方。1 pre-form trigger(form level)修改此处FND_STANDARD.FORM_INFO的版本号,日期,作者App_window.set_window_position中BLOCKNAME要替换为window name,否则打开Form时会有问题。2 when-new-form-instance trigger(form level)修改FDRCSID中FMB文件名3 program unit : app_custom.close_window7*PDF文件使用 pdfFactory Pro试用版本创建 *陈震南Email: MSN: QQ: 31505614此处至少要制定your first window的名字,否则窗体不是关不掉就是出现红条,其他的代码可以根据程序的需要修改。Template中所有的对象都可以保留,也可以删除重建。我的建议是2个Block(BLOCKNANE和DETAILBLOCK)可以删除,其他对象如WINDOW(BLOCKNAME),CANVAS(BLOCKNAME)等都可以保留,修改对应的属性即可,新建的对象如BLOCK等记得设置正确的PROPERTY CLASS。另外几个属性要特别注意下:MODULEProperty NoteFirst 已运行Form光标最先进入的数据块,建议设navigation data置,否则系统会根据BLOCK对象的排列顺序决WINDOWCANVAS*block 定First navigation data blockProperty Note*Primary Canvas 建议指定Property Note*WINDOW 建议指定这些属性可能由于删除再新建对象发生丢失,所以每次开发Form时都需要特别小心。8*PDF文件使用 pdfFactory Pro试用版本创建*陈震南Email: MSN: QQ: 31505614*Lab 4:布局方法一个 Form Module 可能包含了多个 window,多个 Data Block,多个 canvas,在对象众多的情况下,布局方法遵循一定的规则可让你事半功倍。如图 4.1,一般来说布局,应按照 windows-canvases-data block-items 的顺序,先简单说明下各对象与布局相关的属性。WindowProperty NoteX Position Form 启动时 X 轴坐标 Y Position Form 启动时 Y 轴坐标 Width Form 实际宽度 Height Form 实际高度Canvas Property NoteWindow 指定 Canvas 所在的 window*View X Position on Canvas 可见部分相对于 Canvas的 X 轴坐标,通常置 0 * View Y Position on Canvas 可见部分相对于 Canvas的 Y 轴坐标,通常置 0 Width Canvas 实际宽度 Height Canvas 实际高度图 4.1Canvas 一般都要设置以上属性,但是根据 Property Class 的不同,几类 canvas 还是有所区别。 1 Content Canvas又称基础画布或内容画布,就像刷地板要先上底漆一样,是必不可少的。一般情况下Content Canvas 的宽和高应设置和 windows 的宽高一致或略小于,我的建议是设成一样。 2 CANVAS_STACKED_FIXED_FIELD Canvas译作固定的堆叠画布,顾名思义,固定意味着该画布的尺寸是固定的,千万不要误以为该画布会永远锁定在界面的最上层。Property NoteViewport X Position 可见部分相对于 Form 源点的 X 轴坐标,修改该值影响对象在 layout窗体上的位置 Viewport Y Position 可见部分相对于 Form 源点的 Y 轴坐标,修改该值影响对象在 layout9*PDF文件使用 pdfFactory Pro试用版本创建*陈震南Email: MSN: QQ: 31505614窗体上的位置 Viewport Width 可见部分的宽度,在 layout 窗体上显示的宽度,= Canvas Width Viewport Height 可见部分的高度,在 layout 窗体上显示的宽度,参见图 4.2 3 CANVAS_STACKED Canvas译作堆叠画布。在需要显示得列太多,界面上无法一次排开的情况,需要使用滚动条时多*用到这种画布。这种类型的画布,一般Canvas 的宽和高要比 Viewport 的宽和高要大得多,另外还要设置 Show Horizontal Scroll Bar 属性为 Yes,允许使用横向滚动条。下沿间距图 4.2 4 Tab_Canvas译作页签画布,此类画布使用起来比较简单再此就不再赘述了比较简单,与之相关的触发器我会在后面的章节总结。关于调整布局的一些技巧在 Form builder 中选 Format-Layout OptionRuler,弹出 4.3 窗体,Units 选 Character Cells,Character Cell Size 不用管它,不要修改;Grid Space 建议选 1 或 0.5,Number of Snap Points PerGrid Spacing 建议选 1;具体含义是采用 Character Cells 方式进行位置调整,Grid Space 表示每个 Grid 的幅度,Number of Snap Points Per Grid Spacing 我的理解是鼠标选中后方向键调整多少次才能达到一个 Grid Space 的幅度。所以 Grid Space 越大,Number of Snap Points Per Grid Spacing越小表明每次调整的幅度越大,设成上面的数字是个人的经验,可据需要而定,很多时候我都是修改对象坐标属性,然后利用对齐功能来调位置的。10*PDF文件使用 pdfFactory Pro试用版本创建*陈震南Email: MSN: QQ: 31505614图 4.3*对于CANVAS_STACKED CANVAS来说,一般都会使用横向滚动条,注意在 Units选择Character Cells 时(如图 4.3),应设置 Viewport 的下沿的 Y 坐标比比该画布上位置最低 Item 下沿Y 座标还要低 10-12 个刻度,如图 4.2 所示下沿间距。对于复杂的界面,可能同时使用 4 种类型的 Canvas,甚至 Tab Canvas 上还放置了堆叠画布,*整个显得非常 Layout 界面复杂而混乱,此时可在使用 Form builder 中 View 菜单下的 3 个选项:*1Show Canvas;2 Show Views;3 Stacked Canvas。选中 Show Canvas 会显示当前 Canvas 的实际大小的框架(width 和 height),并显示底色;选中 Show Views 会显示当前 Canvas 的 Viewport的框架(Viewport width 和 Viewport height),此选项的效果在对象为堆叠画布时显得非常直观;Stack Canvas 选项在画布互相堆叠时尤为好用,但是使用时一定要注意技巧。图 4.4*假 如 在 一 个 基 础 画 布 上 要 显 示 固 定 堆 叠 画 布SKN_HEADER(A) , 页 签 画 布*SKN_TAB_CANVAS(B)和另一个固定堆叠画布BLUECARD_STACKED_CANVAS(C),想把A放在最底层,B 次之, C 在最上面。那么在图 4.4 的界面上必须按住 CTRL 键,依次先选中 A再选中 B 最后选中 C,注意次序不能有任何的颠倒,否则点 OK 按钮后会发现有些 Canvas 看不见了。操作的原则是:先选择最底层,再选择此底层,最后选择最上层。当然你分步完成上述调整也没问题,但是一定要确保选择次序符合上述原则。Block注意设置 Number of Records Dispalyed 和相关的 Scrollbar 属性。11*PDF文件使用 pdfFactory Pro试用版本创建*陈震南Email: MSN: QQ: 31505614ItemItem 和布局属性相关的属性有 Property Class 和相关 prompt 属性。我一般的做法是根据不同类型字段先批量修改 Property Class 和 Format mask,第二步根据 Block 的设置批量设置 ITEM的相关 prompt 属性如:Property Notewidth 日期类型 1.2,时间类型.8,日期加时间 1.7,按钮列一般为 1.2height 选中 Property Class 一般不许修改,button 为.3,其他为.25prompt justification Right(数字型字段),其他选 Start prompt attachment edge 单行块一般选 Start,单行块一般选 Top prompt attachment offset .025prompt alignment offset .025*每个 ITEM 的 prompt 的属性值,我会在 layout窗口中一个个修改。*Navigate相关无论是Block还是Item都有一些与导航相关的属性,决定了界面上按tab键,光标的移动方式。BlockProperty NoteNavigate Style Same Record/Change Record/ Change Data Block Previous Navigation Data Block 比如关闭一个 window 后,光标会落到 Previous Block 上的第一个可导航 Item 时Next Navigation Data Block 当导航方式为 Change Data Block 时,光标落在前一个块最后一个可导航 Item 时,再按 tab 键,光标就会跳到 Next Block上当 Previous Navigation Data Block,Next Navigation Data Block 属性为空时,系统会自动根据 Form Builder 对象树各 block 的排列顺序,自动决定各 Block 的导航顺序。这种默认的方式可能会带来其他的问题,比如关闭窗体时,光标落在不该落到的块上,最好指定一下。ItemProperty Note Keyboard Navigable 设置 Item 是否可使用 tab 键导航Previous Navigation Item 前一个可导航 Item(可能会向前导航到前一个块的最后一个可导航 Item)Next Navigation Item 后一个可导航 Item 时(可能会向后导航到后一个块的第一个可导航 Item)注意当 Previous Navigation Item,Next Navigation Item 属性为空时,系统会自动根据 FormBuilder 对象树各 block 下 Item 的排列顺序,自动决定各 Item 的导航顺序。所以当我们不想去设置 Item 的导航顺序,又希望界面上各字段能够按照从上到下从左到右的顺序导航,那么就必须合理安排各 Item 的排列顺序,切记。12*PDF文件使用 pdfFactory Pro试用版本创建*陈震南Email: MSN: QQ: 31505614*Lab 5:赋初始值&Item对象相关属性本节介绍一下 Form 各对象赋初始值的方法以及设置 Item 属性需要注意的地方。1.赋初始值在 form 中需要记录一些变量的值,这些值在 Form 的整个运行过程中都可能被引用,为了避免重复的获取,我们采用的策略为在 Form 的 when-new-form-instance 时间中将这些变量读取出来赋值给 parameter(有时候是存入 global 变量中),以后对这些变量的引用就转换成对 Formparameter 的引用。以下是程序示例:PROCEDURE get_profile_parameterISBEGIN Fnd_profile.GET(ORG_ID,:PARAMETER.G_ORG_ID); Fnd_profile.GET(USER_ID,:parameter.G_USER_ID); select user_name into :parameter.G_USER_NAME from fnd_user where user_id = :parameter.G_USER_ID ; select NVL(employee_id,147) into :parameter.G_EMPLOYEE_ID from fnd_user where user_id = :parameter.G_USER_ID ;END get_profile_parameter;*对于Item来 说也需要赋初始值,设置日期型字段的初始值为当前日期,某主键字段为sequence 的 nextvalEg: Data Type Initial Value Note Date $DATE$ 当前日期 NUMBER :sequence.order_header_s.nextval 取自 sequence NUMBER fnd_ profile.value(org_id) 取自系统变量 Char :parameter.G_USER_NAME 取自 parameter2.Item 属性各种 Item 由于 property class 的不同视觉效果与属性设置都有所不同,下面简单列举各类Item 属性设置需要注意的地方。1.Text Items可以根据需要为 Text Items 设置不同的 Property Class,TEXT_ITEM,*TEXT_ITEM_DISPLAY_ONLY,TEXT_ITEM_MULTILINE, TEXT_ITEM_DATE,*REATION_OR_LAST_UPDATE_DATE,TEXT_ITEM_PERCENT_FIXED等。对于各种类型的字段,注意根据 data type 设置合适的 Format mask。2. Display Items应当设置足够宽以显示数据库中该项的最长内容。3. Check B
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年期货从业资格之《期货法律法规》练习试题及答案详解(全优)
- 2025年安全月安全生产知识竞赛试题附答案
- 2025年安全培训试题附带完整答案
- 2024年事业单位工勤技能考试试题预测试卷含答案详解
- 2024年法律硕士模拟试题带答案详解(模拟题)
- 2024年辽宁省新民市中考数学全真模拟模拟题附参考答案详解【突破训练】
- 2025年无人机资格证试题预测试卷及参考答案详解(培优B卷)
- 2024安全监察人员模拟试题带答案详解(能力提升)
- 2025男装品牌加盟合同范本
- 鱼类遗传育种考试题及答案
- 认识机械教学课件
- 轮胎硫化培训课件
- 执法监督培训课件
- 沉淀滴定法32课件
- 基于计算机视觉的苏绣纹样提取及智能优化设计研究
- 2025年广东省高考语文试卷(含标准答案)
- 电气焊证考试题库及答案
- 地块管护安全管理制度
- ddi领导力素质测试题及答案
- 2025年湖北恩施州鹤峰山水文化旅游发展有限公司招聘笔试参考题库含答案解析
- 班组长安全管理职责
评论
0/150
提交评论