Скрипт копирования меню
27 Февраль 2012
Нет комментариев
Скрипт для копирования меню. В случае, если меню уже существует, то добавляются отсутствуюшие пункты меню.
DECLARE
l_original_menu_name VARCHAR2(150) := 'MENU_NAME!!!';
l_new_menu_name VARCHAR2(150) := 'NEW_MENU_NAME!!!';
l_new_user_menu_name VARCHAR2(400) := 'Описание меню!!!';
--
l_flag_exist_menu NUMBER := 0;
l_new_menu_id NUMBER;
l_last_menu_id NUMBER;
l_row_id VARCHAR2(100);
l_descr VARCHAR2(400);
--
l_req_status VARCHAR2(1);
BEGIN
-- получаем ID оригинального меню
SELECT max(menu_id) into l_last_menu_id
FROM fnd_menus_vl where menu_name = l_original_menu_name;
if (l_last_menu_id is null) then
dbms_output.put_line('Не найдено оригинальное меню');
return;
else
dbms_output.put_line('Original menu_id='||l_last_menu_id);
end if;
-- =====================================================
-- проверка на существование нового меню
-- =====================================================
SELECT max(menu_id) into l_new_menu_id FROM fnd_menus_vl
where menu_name = l_new_menu_name;
if (l_new_menu_id is not null) then
l_flag_exist_menu := 1; -- меню уже существует
dbms_output.put_line('Меню уже существует');
else
-- создаем новое меню
l_new_menu_id := fnd_menus_s.nextval;
FND_MENUS_PKG.INSERT_ROW(
X_ROWID => l_row_id,
X_MENU_ID => l_new_menu_id,
X_MENU_NAME => l_new_menu_name,
X_USER_MENU_NAME => l_new_user_menu_name,
X_MENU_TYPE => null,
X_DESCRIPTION => null,
X_CREATION_DATE => sysdate,
X_CREATED_BY => fnd_global.user_id,
X_LAST_UPDATE_DATE => sysdate,
X_LAST_UPDATED_BY => fnd_global.user_id,
X_LAST_UPDATE_LOGIN => fnd_global.login_id);
dbms_output.put_line('Создали меню: '||l_new_menu_name);
dbms_output.put_line(' menu_id: '||l_new_menu_id);
end if;
-- =====================================================
-- Создание пунктов меню
-- =====================================================
for i in (select t.* from fnd_menu_entries_vl t where t.menu_id = l_last_menu_id)
loop
-- проверка на существование пункта меню
select nvl(max(1),0) into l_flag_exist_menu
from fnd_menu_entries t
where t.menu_id = l_new_menu_id
and ( (i.sub_menu_id is null and t.sub_menu_id is null) or t.sub_menu_id = i.sub_menu_id)
and ( (i.function_id is null and t.function_id is null) or t.function_id = i.function_id)
and 1=1;
-- создаем только новые пункты меню
if (l_flag_exist_menu = 0) then
FND_MENU_ENTRIES_PKG.INSERT_ROW(
X_ROWID => l_row_id,
X_MENU_ID => l_new_menu_id,
X_ENTRY_SEQUENCE => FND_MENUS_PKG.NEXT_ENTRY_SEQUENCE(), --i.entry_sequence,
X_SUB_MENU_ID => i.sub_menu_id,
X_FUNCTION_ID => i.function_id,
X_GRANT_FLAG => i.grant_flag,
X_PROMPT => i.prompt,
X_DESCRIPTION => i.description,
X_CREATION_DATE => sysdate,
X_CREATED_BY => fnd_global.user_id,
X_LAST_UPDATE_DATE => sysdate,
X_LAST_UPDATED_BY => fnd_global.user_id,
X_LAST_UPDATE_LOGIN => fnd_global.login_id);
l_descr := 'Создан пункт';
if (i.prompt is not null) then
l_descr := l_descr ||' : '|| i.prompt;
end if;
if (i.description is not null) then
l_descr := l_descr ||' : '|| i.description;
end if;
if (i.sub_menu_id is not null) then
l_descr := l_descr ||' : sub_menu_id='|| i.sub_menu_id;
end if;
if (i.function_id is not null) then
l_descr := l_descr ||' : function_id='|| i.function_id;
end if;
dbms_output.put_line(l_descr);
end if;
end loop;
l_req_status := FND_MENU_ENTRIES_PKG.SUBMIT_COMPILE();
dbms_output.put_line('SUBMIT_COMPILE='||l_req_status);
END;
Categories: API, Oracle e-Business Suite copy, FND_MENU_ENTRIES_PKG, FND_MENUS_PKG, menu, копирование, меню, скрипт

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