Скрипт для копирования меню. В случае, если меню уже существует, то добавляются отсутствуюшие пункты меню.
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, копирование, меню, скрипт
Последние комментарии