четверг, 11 декабря 2008 г.

Полезные профили. Автоматизация установки

Продолжая тему полезных профилей.

Если каждый день приходится делать одни и те же операции, то возникает естественная потребность в автоматизации этого процесса. Именно эта потребность имеется ввиду, когда некоторые программисты уверяют, что "лень это двигатель прогресса".

Ну разумеется, кому понравится постоянно заходить в форму с системными профилями и устанавливать для них значения. Если нужно ежедневно устанавливать одни и те же значения для одних и тех же профилей, то проще написать небольшую программку, которая будет это делать.

В основе программы вызов функции fnd_profile.save
Небольшая "обертка" сверху позволяет сделать установку профиля на уровне пользователя еще более удобной (опять же подтверждая тезис о лени).


DECLARE
PROCEDURE set_profile_at_user_level (
p_user_name fnd_user.user_name%TYPE
,p_user_profile_option_name fnd_profile_options_vl.user_profile_option_name%TYPE
,p_profile_option_value fnd_profile_option_values.profile_option_value%TYPE
) IS
l_user_id fnd_user.user_id%TYPE;
l_profile_option_name fnd_profile_options_vl.profile_option_name%TYPE;
BEGIN
SELECT fu.user_id
INTO l_user_id
FROM fnd_user fu
WHERE fu.user_name = p_user_name;

SELECT fpo.profile_option_name
INTO l_profile_option_name
FROM fnd_profile_options_vl fpo
WHERE fpo.user_profile_option_name = p_user_profile_option_name;

IF Fnd_Profile.save (
x_name => l_profile_option_name
,x_value => p_profile_option_value
,x_level_name => 'USER'
,x_level_value => l_user_id
)
THEN
NULL;
END IF;
END set_profile_at_user_level;
BEGIN
set_profile_at_user_level ('L_ELLISON', 'ВЕБ: время ожидания для сеанса', '300');
set_profile_at_user_level ('L_ELLISON', 'Служебные программы: диагностика', 'Y');
set_profile_at_user_level ('L_ELLISON', 'Цветовая схема Java', 'OLIVE');
COMMIT;
END;

Проверочный запрос, показывает все профили установленные для пользователя

SELECT fpo.profile_option_name
,fpo.user_profile_option_name
,fpov.profile_option_value
FROM fnd_profile_option_values fpov
,fnd_profile_options_vl fpo
WHERE fpov.application_id = fpo.application_id
AND fpov.profile_option_id = fpo.profile_option_id
AND fpov.level_id = 10004
AND fpov.level_value = (
SELECT fu.user_id
FROM fnd_user fu
WHERE fu.user_name = 'L_ELLISON'
)

Комментариев нет: