今天自己查看了一下 标准form 物料编码 的录入时
系统的实现逻辑:
1.when_new_form_instance;
procedure when_new_form_instance is
CURSOR csr_org_id IS
SELECT t.inventory_organization_id
FROM financials_system_params_all t
WHERE t.org_id = :parameter.mo_default_org_id;
begin
fdrcsid('$Header: CUXPOXSTAD.fmb 117.39 2015/09/05 12:52:55 pkm ship $');
app_standard.event('WHEN-NEW-FORM-INSTANCE');
-- R12 MOAC
mo_setup_utl.multi_org_event('WHEN-NEW-FORM-INSTANCE');
-- 定义文件夹
app_folder.define_folder_block(object_name => 'PO_LINES',
folder_block_name => 'PO_LINES',
prompt_block_name => 'PO_LINES_PROMPT',
folder_canvas_name => 'PO_LINE_STK',
folder_window_name => 'MAIN',
disabled_functions => '',
tab_canvas_name => '',
fixed_canvas_name => '');
app_folder.event('INSTANTIATE');
-- 定义描述性弹性域
fnd_descr_flex.define(BLOCK => 'PO_HEADERS',
field => 'DESC_FLEX',
appl_short_name => 'CUX',
desc_flex_name => 'CUX_PO_HEADERS_ALL');
fnd_descr_flex.define(BLOCK => 'PO_LINES',
field => 'DESC_FLEX',
appl_short_name => 'CUX',
desc_flex_name => 'CUX_PO_LINES_ALL');
-- 定义菜单
fnd_message.set_name('CUX', 'CUX_POX_STAD_APPROVAL_HIST');
app_special.instantiate(option_name => 'SPECIAL1',
hint => fnd_message.get,
icon => NULL,
initially_enabled => FALSE,
separator => NULL);
-- 控制QUERY_ONLY模式
IF NAME_IN('PARAMETER.QUERY_ONLY') = 'YES' THEN
SET_BLOCK_PROPERTY('PO_HEADERS', INSERT_ALLOWED, PROPERTY_FALSE);
SET_BLOCK_PROPERTY('PO_LINES', INSERT_ALLOWED, PROPERTY_FALSE);
SET_BLOCK_PROPERTY('PO_HEADERS', UPDATE_ALLOWED, PROPERTY_FALSE);
SET_BLOCK_PROPERTY('PO_LINES', UPDATE_ALLOWED, PROPERTY_FALSE);
--APP_ITEM_PROPERTY.SET_PROPERTY('CONTROL.APPROVE', ENABLED, PROPERTY_OFF);
ELSE
SET_BLOCK_PROPERTY('PO_HEADERS', INSERT_ALLOWED, PROPERTY_TRUE);
SET_BLOCK_PROPERTY('PO_LINES', INSERT_ALLOWED, PROPERTY_TRUE);
SET_BLOCK_PROPERTY('PO_HEADERS', UPDATE_ALLOWED, PROPERTY_TRUE);
SET_BLOCK_PROPERTY('PO_LINES', UPDATE_ALLOWED, PROPERTY_TRUE);
-- APP_ITEM_PROPERTY.SET_PROPERTY('CONTROL.APPROVE', ENABLED, PROPERTY_ON);
END IF;
open csr_org_id;
fetch csr_org_id into :PARAMETER.ORG_ID;
close csr_org_id;
fnd_key_flex.define(BLOCK => 'PO_LINES',
field => 'SEGMENT1',
id => 'INVENTORY_ITEM_ID',
appl_short_name => 'INV',
code => 'MSTK',
data_set => ':PARAMETER.ORG_ID',
required => 'N',
usedbflds => 'N',
allownulls => 'Y',
validate => 'FULL',
select_comb_from_view => 'MTL_SYSTEM_ITEMS_VL',
where_clause => '',
longlist => 'Y',
column =>'DESCRIPTION DESCRIPTION(*) into PO_LINES.DESCRIPTION'); --物料描述字段
Show_View('PO_LINE_STK');
end;
2. 物料编码项的属性
lov enable_list_lamp 从列表中验证 否
物料编码 项 WHEN-VALIDATE-ITEM添加
fnd_flex.event(upper('when-validate-item'));
关于单位 物料类别 其他都可以写在 这个事件里面
procedure item_number(event varchar2) is
l_uom_code VARCHAR2(10);
l_unit_of_measure VARCHAR2(10);
CURSOR csr_uom(p_inventory_item_id IN NUMBER,
p_organization_id IN NUMBER) IS
SELECT mu.unit_of_measure,
msi.primary_uom_code
FROM mtl_system_items_vl msi,
mtl_units_of_measure_vl mu
WHERE msi.primary_uom_code = mu.uom_code
AND msi.inventory_item_id = p_inventory_item_id
AND msi.organization_id = p_organization_id;
begin
if event ='WHEN-VALIDATE-ITEM' then
OPEN csr_uom(:po_lines.inventory_item_id,
:parameter.org_id);
FETCH csr_uom
INTO l_unit_of_measure,
l_uom_code;
CLOSE csr_uom;
:po_lines.PRIMARY_UNIT := l_unit_of_measure;
app_field.clear_dependent_fields('PO_LINES.SEGMENT1',
'PO_LINES.INVENTORY_ITEM_ID',
'PO_LINES.DESCRIPTION',
'PO_LINES.PRIMARY_UNIT');
else
app_exception.invalid_argument('PO_LINES.SEGMENT1',
'EVENT',
event);
end if;
end item_number;