Application(EBS)开发整理

[复制链接]
查看11 | 回复4 | 2015-4-24 16:04:24 | 显示全部楼层 |阅读模式
Profile:一个Profile其实就是一个参数,在开发员职责里面定义,注意这个时候选择的Application仅仅是方便管理,对以后的使用没有限制;一个Profile的具体值需要在系统管理员职责里面定义,可以分别在四个层次上定义,即Site/Application/Responsibility/User,具体来说可以给任意一个Site或任意一个Application或任意一个Resp或任意一个User定义这个Profile的值,可以四个层次都定义,也可以定义某几个层次;对于一个Session来说,一个Profile到底取什么值是和上面的定义有关系的,即后面的覆盖前面的,如果它定义了的话。我们可以通过fnd_profile.value('Profile_Name')来取得当前会话的Profile值,库存组织profile是mfg_organization_id

在用fnd_request.submit_request的时候,第五个参数用false,不要被参数名称误导;这个函数有105个参数,前面五个定义请求本身,后面100个是传递给请求的具体参数,都是Char类型,我们需要转换,默认值是chr(0),代表这个参数不用传递给调用的请求;在Package里面调用只需要传递需要的参数个数,因为它有默认值指示结束;在form里面则不行,要写满105个,而且我们参数结束之后要用一个chr(0)来表示结束
用submit_request的时候,其实最终还是向fnd_concurrent_requests(另外我们定义的request是保存在Fnd_Concurrent_Programs里面的)里面插入一行数据,如果不提交的话,该请求是不会真正开始运行的,所以我们一般在submit_request之后来个Commit,否则的话如果使用wait_for_request的话会无限期等待下去;在Form里面需要注意的是,必须使块基于数据库,不然没得Commit。假如在一个请求内部使用了submit_request,特别注意的是需要检查Concurrent Manager的Process数至少为2,否则上述两个请求会处于死锁状态

数据库表中的Org_Id或者Organization_Id对初学者来说往往搞不清楚是哪个层次的组织,一般来说前者是OU,后者是库存组织,然而这也不一定,有一个简易的方法是,只要我们碰到Item,比如在订单中,那么一般是指库存组织
_all,基表,保存多组织数据,里面有一个Org_Id字段,一般不直接出现在我们的DML中
去掉_all的视图,根据用户环境过滤掉组织,相当于普通的基表,我们直接使用它,就当它是基表
_v,视图,给Form用
_kfv,启用关键性弹性域的时候动态生成的视图,包含Concact过的字段组合
_dfv,启用描述性弹性域的时候动态生成的视图,我们取弹性域子段的描述的时候,需要用用户出口函数。。。。。。。。。。。
_tl,基表,有language字段,us肯定有,其他的看安装
_vl,视图,根据环境设置过滤语种,所以做报表用_vl
_s,序列号
_API,Package,保证向后兼容
_PKG,Package,Program
_SV,Package,供Form调用
rowid,伪列,指明记录物理位置,文件号+块号等,具体的我也不清楚
rownum,伪列,指明符合条件的记录的记录号,需要注意的是这个记录号在Order By之前就已经决定,如果想用Order By之后的记录号,只能再套一层Select
level,伪列,指明树状结构记录的层次,以下示例代码可作为Form Tree的数据源
select 1 state, level, CUSTOMER_NAME,null,CUSTOMER_ID
from da_customers a
start with PARENT_CUSTOMER_ID = -1
connect by prior CUSTOMER_ID = PARENT_CUSTOMER_ID
who,五个记录创建及修改历史的字段,可以通过OA的Help/Record History菜单查看
attribute_xxx,描述性弹性域字段

文件系统File system的层次一般是$APPL_TOP/$MODULE_TOP such as $GL_TOP,$AU_TOP/Version/forms,reports,sql,.../EN,ZHS,...五个层次,在URL中有一个语言参数,它的值是根据用户当前的NLS_LANG设置来的;假如指明是中文,那么Form Server会到ZHS下取文件,在任何其他语言对应的目录下找不到文件的话,系统都会到EN目录下取,假如还取不到,这个时候才报错。AU指Application Utility,我们编写的Form源文件一般放在$AU_TOP/Version/forms/LANG下,而PLL源文件一般放在$AU_TOP/Version/resource下,但编译的时候前者要放到对应应用的对应语言的目录下,而后者还是在源目录;对于Report,则直接放在对应应用的对应语言下,不需要编译
一个用户对应一个或多个responsibility,一个responsibility对应一个或多个menu,一个底层menu对应一个function,一个function对应一个form或者一个报表或者一个程序;一个responsibility对应一个请求组,一个请求组对应一个或多个报表和程序,这个应该放过来说,在定义报表的时候可以选择哪个请求组;一个responsibility对应一个Application,这个不要和该responsibility拥有的菜单混淆,菜单没有限制
Attachements
Oracle的附件给我们提供了一个方便的功能,只要定义定义,不需要任何代码就可以实现附件功能,比弹性域还方便(当然功能没有弹性域强)
定义Attachements比较容易,遵循115devg中的Attachements章节即可完成。
fnd_attached_*****系列的表保存我们在开发员职责里面的附件定义
fnd_documents_****系列的表保存最终用户的具体的附件业务数据,file类型的附件存储在fnd_lobs表中
fnd_documents_tl.media_id可以关联到fnd_lobs.file_id、fnd_documents_long_text.media_id、fnd_documents_shot_text.media_id取得相应的附件内容
定义过程如下
1、定义Entity实体,其实就是表,必须的
Table 输入表名即可
Entity ID 输入表名即可,如果在同一个标定义多个实体,可以用“表名_N”的形式,随便
Entity Name 输入一个比较友好的名字,这个名字要显示给用户看
Prompt 没什么用
Application 就是我们的应用;如果是定义在Oracle标准表上,最好也用我们自己的应用名,否则升级的时候会丢失
2、定义Document Categories,其实就是定义一个类别或者说一个标志,可以直接用系统的Miscellaneous这个类别,可选的
Category 输入任意一个名字即可
Default Datatype 随便选一个,最好选会应用这个Category最常用的类型,比如文件
Effective Date 默认,不填即可
Assinments按钮 这里不用管
3、定义Attachement Function,必须的
Type 一个Form可能关联几个Function(进一步关联几个菜单),如果附件在不同的Function下可能不同,比如Category不同(从而可以过滤附件,这就是所谓的安全性),这里选Function;如果附件不需要区分Function,这里就选Form
Name Form或者Function的名字
User Name 自动出来
Session Context 我没用它
Enabled 打勾
4、点击Category按钮,为上面定义的Attachement Function选择刚才定义的Category,或者选择Miscellaneous,可以选择任意个,必须的
**Category的工作原理:Category本身仅仅是一个标志,就像我们部门字典表一样;一个Form(或者其Function)会关联到一个或多个Category(就是在这里定义);最终用户在把一个附件添加到这个Form上的一条记录上时,必定会指定属于某个Category,可选范围就是这里定义的;到这里Category还没有显示出什么作用,也就是如果仅仅一个地方会用到这个附件,Category就没什么用。如果同一个实体的附件会在其他Form上出现,就像115devg文档所说的,一个Product的附件可以在Order Line上被显示出来,假如用户上传了一个图片作为附件,并分配Category为xxxxx,如果Order Form的Category没有包含xxxxx,在Order Line上将看不到那个附件。按我的理解,就这样。
5、定义Attachement Function Block,定义我们Form上包含附件的数据块,每个块都可以定义,必须的
Block Name 输入块名,不要告诉我你不知道!
Method 一般Base Entity选Allow Change,如果是引用的选Query Only
Secured By 这个可以进一步限制安全性,可以不定;这里我不多说,如果不清楚再找我
6、定义Block-Entity关系,必须的
Entity 选择上面定义的实体,一行一个
Display Method 基础实体选择Main Window,引用实体选择Related Window
Include in Indicator 基础实体打勾,引用实体不选;这个选项其实就是用来初始化工具栏上的图标,选不选都不影响功能
Indicator in View 我没选
操作许可 分别定义Query/Insert/Update/Delete,基础实体一般允许全部操作,引用对象不能有Insert,其他的看需要
定义条件 根据条件更加灵活的定义“操作许可”范围;这里我不多说,如果不清楚再找我
7、定义关键字段,一般是主键,这里指块上的Item而非表里面的,所以需要用“块名.Item名”,必须的
按顺序定义,如果基础块的实体不定义主键,仍然可以工作,但在引用块将看不到,这是我碰到的问题
8、定义SQL Statement,附加的限制条件,就像我们在Form开发时定义的Where Clause一样,一般没用,可选的
使用过程如下
1、打开我们的Form,查询记录或者输入新记录
2、注意工具栏上的Attachment按钮时可用的,点击
3、出来附件窗口,想怎么玩都行
最好用IE浏览器打开Oracle Application,有些基于IE内核的浏览器可能无法打开附件上传窗口
回复

使用道具 举报

千问 | 2015-4-24 16:04:24 | 显示全部楼层
帖子是不错,人吗? 就不一定是好人拉。。哈哈
回复

使用道具 举报

千问 | 2015-4-24 16:04:24 | 显示全部楼层
最初由 ammonecho 发布
[B]好帖子阿!不回就沒有人性了

[/B]

好。。不错,好同志。。
回复

使用道具 举报

千问 | 2015-4-24 16:04:24 | 显示全部楼层
最初由 wangxz 发布
[B]很早之前有人发过的啦
不过还是谢谢LZ! [/B]

这些都是我很早以前的存货了,最近比较闲,所以,给大家一起学习一下。。
回复

使用道具 举报

千问 | 2015-4-24 16:04:24 | 显示全部楼层
最初由 huajhua 发布
[B]有点晕,这个是我在2004年写的...... [/B]

不是我写的,我只是收藏了好长时间了,现在和大家一起分享而已..
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行