省略了一些自己看起来已经掌握的技能,列出了些注意点。如下:
从整个EBS的角度看,分DB、APP两部分、五个大目录:
其中COMN目录(对应环境变量$COMMON_TOP)存放服务启停脚本和基于HTML
的应用文件(Java类、JSP页等):
APPL(对应环境变量$APPL_TOP)则存放配置文件、各种管理脚本、各模块应用代
码:
创建数据库对象TIPS:
1.一个表关键字ID,通常与表名一致,并用表SEQUENCE来给每条记录复制,用来唯一标识记录。(即使在当前记录当中没有使用到,也需要添加该字段。以防在以后使用这个ID)
2.一个组织ID,根据不同的开发模块选定不同的组织ID(HR用BG,GL用SOB,AR,AP,PO,OM等经营单位使用ORG_ID,INV,MRP,WIP,BOM等使用ORGANIZATION_ID 【这些可以在ORG_ORGANIZATION_DEFINIATIONS中可以查看】),之后通过对基表_ALL的组织控制视图来进行组织控制。
3.WHO字段,CREATION_DATE,CREATED_BY, LAST_UPDATE_DATE,LAST_UPDATE_BY,LAST_UPDATE_LOGIN
4.四个请求字段,处理请求ID,请求日期,并发程序ID,应用ID。根据需要添加。
5.16个DFF字段,1个上下文,15个DFF。
6.加个DESCRIPTION字段。
7.模块简称打头。
注册表和字段,这样以后就可通过标准功能设置弹性域、监控表操作;
EXECUTE AD_DD.REGISTER_TABLE('SCF','CUX_ORDER_HEADERS_ALL','T',2,10,40);
EXECUTE AD_DD.REGISTER_COLUMN('SCF','CUX_ORDER_HEADERS_ALL','HEADER_ID',1,'NUMBER',38,'N','N');
EXECUTE AD_DD.REGISTER_COLUMN('SCF','CUX_ORDER_HEADERS_ALL','ORG_ID',2,'NUMBER',38,'N','N');
EXECUTE AD_DD.REGISTER_COLUMN('SCF','CUX_ORDER_HEADERS_ALL','ORDER_NUMBER',3,'NUMBER',38,'N','N');
FROM中标准触发器:ON-INSERT,ON-LOCK,ON-UPDATE,ON-DELETE的生成过程:
hand_plsql_autocreate
参数:通常对Parameter的初始化需要在Form级触发器Pre-Form中完成。
在from中,使用LIST(既hardcode的lov,List在用户看来只有1列)时,应该注意:
Mapping of Other Values这个属性要特别注意,它的意思是,如果从数据库中读出来的数据,不在这个列表内(这里是I和E),那么要映射为I还是E,如果不映射,那么该条记录将无法在Form中显示出来,表现出来的现象就是“数据库和View中明明有,界面却看不到”。
List中的条目,只要鼠标一点就自动生成,很垃圾,可以用“shift+ctrl+<”删除,因为这个快捷键一般人不知道,所以只好重新Item。
LOV也可以不验证,用户可以随便输入,这个一般用在特殊用途比如日期、弹性域、或者其他特殊业务需求。 注意Validate from List,意思是用户输入的值必须在LOV第一可见列的值范围内。
LOV还有个麻烦的问题,如果清空了Item的值,因为空值不触发验证,这样之前返回到各个目标Item上的值并没有自动被清空,需要写代码处理。
控制行状态的不可更新,在BLOCK的WHEN-NEW-RECORD-INSTANCE中,写出发代码,并且设置执行层次为before
创建query_find的过程:
1.COPY标准form APPSTAND.fmb中的对象组QUERY_FIND.自动带来三个对象:QUERY_FIND的块,画布,窗口。
2.删除对象组QUERY_FIND.以上三个对象自动保留。
3.设置QUERY_FIND的下一导航快是目标块,上一导航块是自己。
4.将QUERY_FIND块的三个BUTTON的‘your blockname here’修改为目标块的名称。
5.创建查询的ITEM。
6.块级触发器QUERY_FIND,PER_FIND.
在PRE_FIND中,使用COPY,QUERY_DATE_RANGE来执行赋值查询跟日期区间查询。
(范围查询的QUERY_LENGTH设置到足够大,默认值往往不够。)
FORM TRIGGER的执行层次:
before 先出发低级别,再高级别
after 先出发高级别,再低级别
override:默认模式,不在出发高级别触发器(item级别最低)
按F11进入查询模式,但记录颜色是白的而不是我们习惯的浅蓝色,问题的症结在于其在Block级覆盖了when-new-record-instace
Pre-Form可以理解为打开Form最先触发的事件,如果其失败,Form就退出。所以变量比如Global和Parameter的初始化应该最好在Pre-Form里面。
When-New-Form-Instance则是Form初始化完毕,定位到第一个块的第一个可导航的Item的时候触发的,通常用来定义弹性域和Folder、查询某个块。
假定数据库中有10条记录,块设置显示行数为8,那么当执行完查询,将连续触发8次Post-Query,仅触发1次When-New-Record-Instance。这是因为前者是记录被Fetch到Form中触发的,后者是光标进入行时触发的。
如果我们在记录间移动光标,包括移回原来的记录,每次都将触发When-New-Record-Instance;而只有移入第9、10条记录时才会触发Post-Query,并且移回“老”记录,是不会再触发的。
如果想给某个字段赋值,通常在Post-Query中,而想根据字段的内容控制行或者某些字段的属性,通常在When-New-Record-Instance中处理。
在OU层获得默认本位币 思路是根据财务选项视图(屏蔽OU)连接SOB表取:
SELECT sob.currency_code
INTO :parameter.g_default_currency
FROM financials_system_parameters fsp, gl_sets_of_books sob
WHERE fsp.set_of_books_id = sob.set_of_books_id;
获得账户结 构思路是根据预知文件的账套:
SELECT sob.set_of_books_id, sob.chart_of_accounts_id
FROM gl_sets_of_books sob
WHERE sob.set_of_books_id = fnd_profile.VALUE('GL_SET_OF_BKS_ID');
消息处理
调式
fnd_message.debug('Message');
出错消息
fnd_message.set_name('<APP_SHORT_NAME>','<Message_CODE>') ;
fnd_message.error;
提示消息
fnd_message.set_name('<APP_SHORT_NAME>','<Message_CODE>') ;
fnd_message.show;
询问信息
fnd_message.set_name('<APP_SHORT_NAME>', '<Message_CODE>');
if fnd_message.question('YES','NO',NULL,1,2) = 1 then
--do something
else
--do something
end if;
如果指责只有一个菜单,那么进入这个职责将自动打开Form。这个时候问题来了,如果用户在其他职责切换过组织,那么这个时候,这里将不再切换了,而是从前面的职责直接带过来,不管“合法不合法”。
方法:把请求放入菜单。这样可以要求选组织;通过View不让提交
hide_view并没有真正hide一个画布,只是放到最下层,所以如果上层的画布没有完全覆盖下层画布,下层的画布很可能用户还看得到;show_view则是把画布放在最上层。
Master-detail关系
block both are database block
each block has one item based on database displayed
Fnd_profile.GET('ORG_ID',x_org_id);
fnd_client_info.set_org_context(x_org_id);
When-create-record的时候给Item赋值不改变记录状态
直接放在TAB Page上的Item,和放在堆叠画布上的Item在设计时是无法“所见即所得”,所以建议把所有的Item根据需要放在不同的堆叠画布上再堆到TAB Page上
当对块进行刷新时,会修改很多Item的属性,别以为你设置过了,Oracle就会记住。我碰到的情况是Insert Allowed等被自动改掉了!即使我的子类设置为Text_Item_Display_Only
二次开发中自定义菜单的使用需要在三个地方写代码form when-new-forminstance/app_special.instantiate('SPECIAL1','prompt'),formpre_block/app_special.enable('SPECIAL1',property_on),form SPECIAL1 trigger/菜单需要执行的代码
还有很多很深的解释,还没有看懂。下一次阅读的时候,希望能够读懂。
在IE7中不支持CSDN Best4c 画出博客中需要的图片,HTTP 404,貌似不行,哎。