Archives for 2007

EBS 11i 中的标准工作流列表

在看Oracle公司的 Steven Qiao 关于工作流的介绍时,他的PPT提到EBS中应用到的工作流,我也正好需要这样的一份清单,于是稍做整理。他没有提到高级产品目录(APC)模块的工作流,估计这份清单也是不全的。以后有机会逐一补全。

总帐模块(GL)

  1. GIS(Global Intercompany System)通知
  2. GL自动分配
    • GL成批分配流程
    • GL分配流程
    • GL过帐流程
    • GL经常性日记帐流程
    • PA分配组流程
  3. 日记帐审批

应付模块(AP)

  1. AP采购卡经理审批事务处理
  2. AP采购卡员工核实工作流
  3. AP费用报表
  4. AP开放接口导入
  5. PO发送采购单据通知
    • PO单据审批催函

应收模块(AR)

  1. AR贷项通知单请求审批
  2. AR替代平衡段

项目会计(PA)

  1. PA项目审批工作流
  2. PA预算工作流
  3. PA逐级分配
  4. PA生成项目供应商发票帐户
  5. 项目费用报表帐户生成器

Inactive No Manager

在保证TNS无误,应用能够正常连接DB的前提下,提交一个请求后,如果返回一个无管理器的警告,那么可能遭遇了下列情况:
1,内部管理器(ICM)未启动。
最常见的情形是内部管理器(ICM)未启动。可以在unix中查看进程:
ps -ef | grep LIBR
如果没有FNDLIBR或INVLIBR进程,则需要手工启动ICM。
路径:Sysadmin -> Concurrent -> Manager -> Administer

2,ICM无法正常启动。
ICM日志中有如下记录:
……
Cause: AFPSMG found no rows while selecting concurrent manager 25
from FND_CONCURRENT_PROCESSES for update.
……

原因是因为各类原因(这个要自己去查),导致记录并发请求相关信息的表中的数据完整性遭破坏,就好比在操作系统中写入文件的时候突然断电。此时需要手工修正数据,涉及的表有:
FND_CONCURRENT_PROCESSES 记录并发程序历史信息,需要定期删除或清空。
FND_CONCURRENT_QUEUES 记录队列信息,将RUNNING_PROCESSES更新为0。
FND_CONCURRENT_REQUESTS 记录并发请求执行状态,将STATUS_CODE更新为T。
有个cmclean.sql可以完成这个工作,不过这种行为不被Oracle所支持。

3,磁盘空间不足。
当磁盘空间不足时,处于数据保护的目的,所有并发请求都不会被执行。清理并发请求历史数据或者增加空间即可解决。

我第一次安装EBS的时候,修改了机器名,而导致ICM无法启动。这种情况只要修改节点名称即可。

键弹性域必须的触发器

Form开发中,如果用到键弹性域,定义好后还必须正确添加相关的Trigger。总共有如下几个:

Block Level:
fnd_flex.event('PRE-QUERY');
fnd_flex.event('PRE-UPDATE');
fnd_flex.event('POST-QUERY');
fnd_flex.event('WHEN-VALIDATE-RECORD');


Item Level:
fnd_flex.event('WHEN-NEW-ITEM-INSTANCE');
fnd_flex.event('WHEN-VALIDATE-ITEM');

复制库存组织

复制库存组织

在Oracle库存模块,可以使用Copy Inventory Organization 功能来创建新库存组织。该功能通过复制已有的库存组织的一系列参数,来快速、批量地创建新库存组织。以下信息将会被带至新创建的库存组织:

  • 组织定义
  • 发运网络
  • 层次结构
  • BOM和BOM参数
  • 部门、资源和工艺路线
  • 物料和物料属性

其中,字库存和货位总是被复制。

准备复制库存组织

有两点前置要求:

  • 必须至少有一个库存组织作为模板。不能使用主组织作为模板。
  • 为每个需要新建的库存组织定义地点,如果使用一个已有的地点,该地点必须没有分配至任何其他组织。

EBS中发送电子邮件

关于在EBS中发送电子邮件,主要有三种途径:

  1. 在操作系统层,利用sendmail等专业软件发送。
    在Oracle中,可以创建java的procedure。
    在Oracle系统外部,则可以通过utl_http之类的方式调用外部RPC。
    EBS中的请求有许多种方式,也可以直接调用外部程序。多数情况下,这种方式比较简单。
  2. 利用DB中的utl_smtp或者utl_mail(10g)来发送。
    使用这种方式,只要会基础的SQL,都可以随时随地发送邮件。有个问题就是,比如用在form中,如果直接在代码中实现,那么万一mail server链接不畅,则用户界面响应时间会受到影响。
    用这种凡是可以发送简单的文本,也可以发送大附件。
  3. 利用工作流邮件系统。
    定义一个专用的工作流,有一个notification节点,就可以利用工作流邮件系统的优势了,比如队列,比如错误响应等,实现起来比第二种方式简便许多。唯一的不足是无法发送大文本和附件。

实际的实现方式非常多,但抽丝剥茧,无外乎就是上述几种。如果写好了API,简直方便至极。