Oracle EBS 基础概念:弹性域-说明性弹性域开发实例

本文详细介绍了在Oracle EBS系统中创建描述性弹性域的过程,包括表的创建、视图的建立、使用AD_DD工具包注册表及列、在系统中注册和启用描述性弹性域,以及Form开发中DF项的创建与触发器的添加。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

A. 创建表,表中包括弹性域结构列(context)和弹性域列

CREATE TABLE CUX_FORM_DFF_TEST
 (
   ITEM_ID NUMBER NOT NULL,
   ITEM_NUMBER VARCHAR2(30) NOT NULL,
   ITEM_NAME VARCHAR2(100) NOT NULL,
   ITEM_DESCRIPTION VARCHAR2(255),
   START_DATE_ACTIVE DATE,
   END_DATE_ACTIVE DATE,
   ATTRIBUTE_CATEGORY VARCHAR2(30),
   ATTRIBUTE1 VARCHAR2(150),
   ATTRIBUTE2 VARCHAR2(150),
   ATTRIBUTE3 VARCHAR2(150),
   ATTRIBUTE4 VARCHAR2(150),
   ATTRIBUTE5 VARCHAR2(150),
   ATTRIBUTE6 VARCHAR2(150),
   ATTRIBUTE7 VARCHAR2(150),
   ATTRIBUTE8 VARCHAR2(150),
   ATTRIBUTE9 VARCHAR2(150),
   ATTRIBUTE10 VARCHAR2(150),
   ATTRIBUTE11 VARCHAR2(150),
   ATTRIBUTE12 VARCHAR2(150),
   ATTRIBUTE13 VARCHAR2(150),
   ATTRIBUTE14 VARCHAR2(150),
   ATTRIBUTE15 VARCHAR2(150),
   CREATED_BY NUMBER NOT NULL,
   CREATION_DATE DATE NOT NULL,
   LAST_UPDATED_BY NUMBER NOT NULL,
   LAST_UPDATE_DATE DATE NOT NULL,
   LAST_UPDATE_LOGIN NUMBER
 )


--Create Index
 CREATE UNIQUE INDEX CUX_FORM_DFF_TEST_U1 ON CUX_FORM_DFF_TEST(ITEM_ID);

--Create Sequence
 CREATE SEQUENCE CUX_FORM_DFF_TEST_S START WITH 1;

--Create Synonym
 CREATE SYNONYM CUX_FORM_DFF_TEST FOR CUX_FORM_DFF_TEST;
 CREATE SYNONYM CUX_FORM_DFF_TEST_S FOR CUX_FORM_DFF_TEST_S;

B. 创建视图,视图中包括弹性域相关列(非必需)

C. 使用AD_DD工具包注册表和表列

BEGIN
   AD_DD.REGISTER_TABLE('XXE', 'CUX_FORM_DFF_TEST', 'T', 8, 10, 90);
   
AD_DD.REGISTER_COLUMN('XXE', 'CUX_FORM_DFF_TEST', 'ITEM_ID', 1, 'NUMBER', 38, 'N', 'N');
   AD_DD.REGISTER_COLUMN('XXE', 'CUX_FORM_DFF_TEST', 'ITEM_NUMBER', 2, 'VARCHAR2', 30, 'N', 'N');
   AD_DD.REGISTER_COLUMN('XXE', 'CUX_FORM_DFF_TEST', 'ITEM_NAME', 3, 'VARCHAR2', 100, 'N', 'N');
   AD_DD.REGISTER_COLUMN('XXE', 'CUX_FORM_DFF_TEST', 'ITEM_DESCRIPTION', 4, 'VARCHAR2', 255, 'Y', 'N');
   AD_DD.REGISTER_COLUMN('XXE', 'CUX_FORM_DFF_TEST', 'START_DATE_ACTIVE', 5, 'DATE', 9, 'Y', 'N');
   AD_DD.REGISTER_COLUMN('XXE', 'CUX_FORM_DFF_TEST', 'END_DATE_ACTIVE', 6, 'DATE', 9, 'Y', 'N');
   AD_DD.REGISTER_COLUMN('XXE', 'CUX_FORM_DFF_TEST', 'ATTRIBUTE_CATEGORY', 7, 'VARCHAR2', 30, 'Y', 'N');
   AD_DD.REGISTER_COLUMN('XXE', 'CUX_FORM_DFF_TEST', 'ATTRIBUTE1', 8, 'VARCHAR2', 150, 'Y', 'N');
   AD_DD.REGISTER_COLUMN('XXE', 'CUX_FORM_DFF_TEST', 'ATTRIBUTE2', 9, 'VARCHAR2', 150, 'Y', 'N');
   AD_DD.REGISTER_COLUMN('XXE', 'CUX_FORM_DFF_TEST', 'ATTRIBUTE3', 10, 'VARCHAR2', 150, 'Y', 'N');
   AD_DD.REGISTER_COLUMN('XXE', 'CUX_FORM_DFF_TEST', 'ATTRIBUTE4', 11, 'VARCHAR2', 150, 'Y', 'N');
   AD_DD.REGISTER_COLUMN('XXE', 'CUX_FORM_DFF_TEST', 'ATTRIBUTE5', 12, 'VARCHAR2', 150, 'Y', 'N');
   AD_DD.REGISTER_COLUMN('XXE', 'CUX_FORM_DFF_TEST', 'ATTRIBUTE6', 13, 'VARCHAR2', 150, 'Y', 'N');
   AD_DD.REGISTER_COLUMN('XXE', 'CUX_FORM_DFF_TEST', 'ATTRIBUTE7', 14, 'VARCHAR2', 150, 'Y', 'N');
   AD_DD.REGISTER_COLUMN('XXE', 'CUX_FORM_DFF_TEST', 'ATTRIBUTE8', 15, 'VARCHAR2', 150, 'Y', 'N');
   AD_DD.REGISTER_COLUMN('XXE', 'CUX_FORM_DFF_TEST', 'ATTRIBUTE9', 16, 'VARCHAR2', 150, 'Y', 'N');
   AD_DD.REGISTER_COLUMN('XXE', 'CUX_FORM_DFF_TEST', 'ATTRIBUTE10', 17, 'VARCHAR2', 150, 'Y', 'N');
   AD_DD.REGISTER_COLUMN('XXE', 'CUX_FORM_DFF_TEST', 'ATTRIBUTE11', 18, 'VARCHAR2', 150, 'Y', 'N');
   AD_DD.REGISTER_COLUMN('XXE', 'CUX_FORM_DFF_TEST', 'ATTRIBUTE12', 19, 'VARCHAR2', 150, 'Y', 'N');
   AD_DD.REGISTER_COLUMN('XXE', 'CUX_FORM_DFF_TEST', 'ATTRIBUTE13', 20, 'VARCHAR2', 150, 'Y', 'N');
   AD_DD.REGISTER_COLUMN('XXE', 'CUX_FORM_DFF_TEST', 'ATTRIBUTE14', 21, 'VARCHAR2', 150, 'Y', 'N');
   AD_DD.REGISTER_COLUMN('XXE', 'CUX_FORM_DFF_TEST', 'ATTRIBUTE15', 22, 'VARCHAR2', 150, 'Y', 'N');
   AD_DD.REGISTER_COLUMN('XXE', 'CUX_FORM_DFF_TEST', 'CREATED_BY', 23, 'NUMBER', 9, 'Y', 'N');
   AD_DD.REGISTER_COLUMN('XXE', 'CUX_FORM_DFF_TEST', 'CREATION_DATE', 24, 'DATE', 9, 'Y', 'N');
   AD_DD.REGISTER_COLUMN('XXE', 'CUX_FORM_DFF_TEST', 'LAST_UPDATED_BY', 25, 'NUMBER', 9, 'Y', 'N');
   AD_DD.REGISTER_COLUMN('XXE', 'CUX_FORM_DFF_TEST', 'LAST_UPDATE_DATE', 26, 'DATE', 9, 'Y', 'N');
   AD_DD.REGISTER_COLUMN('XXE', 'CUX_FORM_DFF_TEST', 'LAST_UPDATE_LOGIN', 27, 'NUMBER', 9, 'Y', 'N');
COMMIT;
END;
--可在EBS  APP DEV  -> Application -> Database -> Table 可查看已注册的表和字段。

D. 在Oracle EBS系统中注册描述性弹性域
在这里插入图片描述
E. 启用描述性弹性域
在这里插入图片描述在这里插入图片描述
F.按照一般Form开发的步骤,创建相关对象
创建一个DF非数据库项,并设置属性
在Data Block中新增一个Item,命名为”DF”,其Subclass Information设置为TEXT_ITEM_DESC_FLEX,(List of Values设置为ENABLE_LIST_LAMP,Validate from List设置为NO,非必需)Database Item设置为NO。
在这里插入图片描述

给DF项和数据块添加必要的触发器和标准代码
为DF项添加WHEN-NEW-ITEM-INSTANCE触发器,并将其Execution Hierarchy属性从Override修改为Before,触发器代码如下: FND_FLEX.EVENT(‘WHEN-NEW-ITEM-INSTANCE’);
为DF项添加WHEN-VALIDATE-ITEM触发器,其代码为FND_FLEX.EVENT(‘WHEN-VALIDATE-ITEM’);

在DF项所在Data Block下添加几个Block级别的触发器,分别为
PRE-QUERY: FND_FLEX.EVENT(‘PRE-QUERY’);
POST-QUERY: FND_FLEX.EVENT(‘POST-QUERY’);
PRE-INSERT: FND_FLEX.EVENT(‘PRE-INSERT’);
PRE-UPDATE: FND_FLEX.EVENT(‘PRE-UPDATE’);
WHEN-VALIDATE-RECORD: FND_FLEX.EVENT(‘WHEN-VALIDATE-RECORD’);
WHEN-VALIDATE-ITEM: FND_FLEX.EVENT(‘WHEN-VALIDATE-ITEM’);

在PRE-FORM触发器中初始化弹性域
在Form级别的触发器PRE-FORM中使用FND_DESCR_FLEX.DEFINE来初始化描述性弹性域,如
FND_DESCR_FLEX.DEFINE(block => ‘ITEMS’,
field => ‘DF’,
appl_short_name => ‘CUX’,
desc_flex_name => ‘CUX_FORM_DFF_TEST’);

G. 编译Form并验证说明性弹性域

<think>好的,用户想了解Oracle EBS中的库存转移API。首先,我需要回忆一下Oracle EBS的相关模块,库存管理属于Inventory模块,而库存转移涉及物料在不同子库存或组织间的移动。API部分,常用的可能是Inventory相关的开放接口或公共API。 接下来,用户可能需要知道具体的API名称、功能以及如何使用。常见的库存操作API包括INV_TRANSACTION_INTERFACE_PUB和INV_MATERIAL_TRANSACTION_PUB。这些API用于处理事务处理,比如转移、发放、接收等。 需要区分组织内转移和组织间转移。组织内转移可能涉及子库存之间的转移,而跨组织转移则需要考虑发运和接收步骤,可能涉及采购模块或库存模块的不同API。 另外,库存转移可能涉及成本组、批次、序列号等复杂属性,API需要支持这些参数的传递。用户可能关心如何构建有效的事务处理记录,包括项目编号、数量、来源和目标子库存、事务日期等。 还需要考虑错误处理和事务处理的状态查询,比如如何通过接口表查看错误信息,确保事务处理成功。可能涉及到的表包括MTL_MATERIAL_TRANSACTIONS_TEMP和MTL_TRANSACTION_INTERFACE,以及如何通过API返回的状态进行判断。 用户可能是开发人员或系统管理员,需要集成外部系统与EBS进行库存转移,或者自动化某些业务流程。因此,示例代码或调用步骤会很有帮助。需要确保提供正确的参数,如库存项目ID、组织ID、转移类型、数量等,并调用合适的API方法。 另外,需要注意权限和并发请求的处理,有些API可能需要通过并发程序异步处理事务。同时,库存转移可能触发其他模块的流程,如成本计算、在制品状态更新等,需确保事务的完整性。 最后,总结关键点,分步骤说明使用哪些API,注意事项,以及可能的参考文档或资源,帮助用户进一步查阅官方资料或示例代码。</think>以下是Oracle EBS库存转移API的核心实现逻辑及步骤说明: ### 1. **核心API介绍** - **`INV_TRANSACTION_INTERFACE_PUB`** 用于将库存事务数据插入接口表(`MTL_TRANSACTION_INTERFACE`),需通过并发请求`INCOIN`处理数据。 - **`INV_MATERIAL_TRANSACTION_PUB`** 直接处理库存事务,无需接口表,适用于实时性要求高的场景。 ### 2. **组织内转移(子库存间)** ```sql -- 调用示例(伪代码) l_return_status := INV_MATERIAL_TRANSACTION_PUB.MATERIAL_TRANSACTION ( p_api_version => 1.0, p_init_msg_list => FND_API.G_TRUE, p_commit => FND_API.G_TRUE, x_return_status => l_return_status, x_msg_count => l_msg_count, x_msg_data => l_msg_data, p_transaction_type => '子库存转移', -- 事务类型 p_organization_id => 101, -- 组织ID p_inventory_item_id => 10001, -- 物料ID p_transaction_date => SYSDATE, p_transaction_qty => 50, -- 转移数量 p_subinventory_code => 'MAIN', -- 来源子库存 p_transfer_subinventory => 'WIP' -- 目标子库存 ); ``` ### 3. **跨组织转移** 需分两步处理: - **Step1. 发运组织调用API** 使用事务类型`组织转移`,指定`TRANSFER_ORGANIZATION_ID`为目标组织。 - **Step2. 接收组织运行`接收事务处理`** 通过`RCV_SHIPMENT_LINE_PUB`处理接收。 ### 4. **必填参数清单** - `库存项目ID` (`p_inventory_item_id`) - `组织ID` (`p_organization_id`) - `事务数量` (`p_transaction_qty`) - `来源/目标子库存` (`p_subinventory_code`/`p_transfer_subinventory`) - `事务类型` (`p_transaction_type`,如`子库存转移`) ### 5. **错误排查要点** - 检查`MTL_INTERFACE_ERRORS`表获取错误明细 - 验证物料是否在目标子库存有效 - 确保批次/序列号在转移前后状态一致 - 检查库存弹性上下文是否匹配 ### 6. **附加功能支持** - **批次转移**:需传入`p_lot_number` - **序列号转移**:使用`INV_SERIAL_NUMBER_PUB`接口 - **成本组更新**:通过`p_cost_group_id`参数指定 ### 7. **完整调用流程** 1. 初始化API环境(`FND_API.GLOBAL.INITIALIZE`) 2. 填充事务记录参数 3. 调用`MATERIAL_TRANSACTION` API 4. 检查`x_return_status`是否为`S` 5. 提交事务(`FND_API.G_COMMIT`) 6. 异常时调用`FND_MSG_PUB.GET`获取错误堆栈 ### 8. **关键数据表** - `MTL_MATERIAL_TRANSACTIONS`(事务主表) - `MTL_TRANSACTION_ACCOUNTS`(成本分录) - `MTL_ONHAND_QUANTITIES`(实时库存量) > 📌 **提示**: > - 正式环境建议先在测试实例验证事务逻辑 > - 跨组织转移需配置`组织关系`和`内部订单` > - 详细参数参考官方文档《Oracle Inventory API Reference》
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值