
Если, при кастомизации стандартной формы OEBS, возникает необходимость сохранить функциональность аттачментов, то реализовать это поможет следующий скрипт:
--copy attachment funtion procedure
DECLARE
l_cnt NUMBER;
l_new_ff_id NUMBER;
l_new_app_id NUMBER;
l_new_att_function_id NUMBER;
l_new_att_block_id NUMBER;
e_exists EXCEPTION;
e_ff_problem EXCEPTION;
e_procc_err EXCEPTION;
--
l_old_func_name VARCHAR2(100) := 'LAST_FUNCTION_NAME';
l_new_func_name VARCHAR2(100) := 'NEW_FUNCTION_NAME';
BEGIN
--(-1) проверка на уже сущ-юю
SELECT COUNT(1)
INTO l_cnt
FROM fnd_attachment_functions
WHERE function_name = l_new_func_name;
IF l_cnt > 0 THEN
RAISE e_exists;
END IF;
--0) определяем id форм-функции
BEGIN
SELECT t.function_id, t.application_id
INTO l_new_ff_id, l_new_app_id
FROM fnd_form_functions t
WHERE t.function_name = l_new_func_name;
EXCEPTION
WHEN OTHERS THEN
RAISE e_ff_problem;
END;
--1) находим сущ-щую ф-ю:
l_cnt := 0;
FOR i IN (SELECT * FROM fnd_attachment_functions
WHERE function_name = l_old_func_name
AND function_type = 'O' --форма
)
LOOP
l_cnt := l_cnt + 1;
IF l_cnt > 1 THEN
RAISE e_procc_err;
END IF;
--вставка новой строки в FND_ATTACHMENT_FUNCTIONS
INSERT INTO fnd_attachment_functions
(attachment_function_id,
function_type,
function_id,
function_name,
creation_date,
created_by,
last_update_date,
last_updated_by,
last_update_login,
application_id,
session_context_field,
enabled_flag)
VALUES
(fnd_attachment_functions_s.NEXTVAL,
i.function_type,
l_new_ff_id,
l_new_func_name,
SYSDATE,
1,
SYSDATE,
1,
1,
l_new_app_id,
i.session_context_field,
i.enabled_flag
) RETURNING attachment_function_id INTO l_new_att_function_id;
--2) заполняем FND_DOC_CATEGORY_USAGES
FOR j IN (SELECT * FROM fnd_doc_category_usages
WHERE attachment_function_id = i.attachment_function_id)
LOOP
INSERT INTO fnd_doc_category_usages
(doc_category_usage_id,
category_id,
attachment_function_id,
enabled_flag,
creation_date,
created_by,
last_update_date,
last_updated_by,
last_update_login)
VALUES
(fnd_doc_category_usages_s.nextval,
j.category_id,
l_new_att_function_id,
j.enabled_flag,
SYSDATE,
1,
SYSDATE,
1,
1);
END LOOP;
--3) заполняем FND_ATTACHMENT_BLOCKS
FOR k IN (SELECT * FROM fnd_attachment_blocks
WHERE attachment_function_id = i.attachment_function_id)
LOOP
INSERT INTO fnd_attachment_blocks
(attachment_blk_id,
attachment_function_id,
block_name,
query_flag,
security_type,
creation_date,
created_by,
last_update_date,
last_updated_by,
last_update_login,
org_context_field,
set_of_books_context_field,
business_unit_context_field,
context1_field,
context2_field,
context3_field)
VALUES
(fnd_attachment_blocks_s.nextval,
l_new_att_function_id,
k.block_name,
k.query_flag,
k.security_type,
sysdate,
1,
sysdate,
1,
1,
k.org_context_field,
k.set_of_books_context_field,
k.business_unit_context_field,
k.context1_field,
k.context2_field,
k.context3_field
) RETURNING attachment_blk_id INTO l_new_att_block_id;
FOR l IN (SELECT * FROM fnd_attachment_blk_entities
WHERE attachment_blk_id = k.attachment_blk_id)
LOOP
INSERT INTO fnd_attachment_blk_entities
(attachment_blk_entity_id,
attachment_blk_id,
data_object_code,
display_method,
include_in_indicator_flag,
indicator_in_view_flag,
creation_date,
created_by,
last_update_date,
last_updated_by,
last_update_login,
pk1_field,
pk2_field,
pk3_field,
pk4_field,
pk5_field,
sql_statement,
query_permission_type,
insert_permission_type,
update_permission_type,
delete_permission_type,
condition_field,
condition_operator,
condition_value1,
condition_value2)
VALUES
(fnd_attachment_blk_entities_s.nextval,
l_new_att_block_id,
l.data_object_code,
l.display_method,
l.include_in_indicator_flag,
l.indicator_in_view_flag,
sysdate,
1,
sysdate,
1,
1,
l.pk1_field,
l.pk2_field,
l.pk3_field,
l.pk4_field,
l.pk5_field,
l.sql_statement,
l.query_permission_type,
l.insert_permission_type,
l.update_permission_type,
l.delete_permission_type,
l.condition_field,
l.condition_operator,
l.condition_value1,
l.condition_value2);
END LOOP;
END LOOP;
END LOOP;
--commit;
EXCEPTION
WHEN e_exists THEN
ROLLBACK;
dbms_output.put_line('Ошибка. Для данной ф-ии уже создана attachment_function');
WHEN e_ff_problem THEN
ROLLBACK;
dbms_output.put_line('Ошибка. Не найдена указанная форм-функция');
WHEN e_procc_err THEN
ROLLBACK;
dbms_output.put_line('Ошибка. Найдено более 1 функции для копирования.');
END;

Последние комментарии