-
Notifications
You must be signed in to change notification settings - Fork 1
packages sess.load_session
Jan Kvetina edited this page Oct 9, 2020
·
6 revisions
Repository spec: sess.load_session
,
body: sess.load_session
This procedure retrieves latest payload for requested app/user/session and set it as current.
PROCEDURE load_session (
in_user_id sessions.user_id%TYPE,
in_app_id sessions.app_id%TYPE,
in_page_id sessions.page_id%TYPE := NULL,
in_session_db sessions.session_db%TYPE := NULL,
in_session_apex sessions.session_apex%TYPE := NULL,
in_created_at_min sessions.created_at%TYPE := NULL
);
Show code (51 lines)
PROCEDURE load_session (
in_user_id sessions.user_id%TYPE,
in_app_id sessions.app_id%TYPE,
in_page_id sessions.page_id%TYPE := NULL,
in_session_db sessions.session_db%TYPE := NULL,
in_session_apex sessions.session_apex%TYPE := NULL,
in_created_at_min sessions.created_at%TYPE := NULL
) AS
rec sessions%ROWTYPE;
BEGIN
-- find best session
SELECT s.* INTO rec
FROM sessions s
WHERE s.session_id = (
SELECT MIN(s.session_id) KEEP (DENSE_RANK FIRST
ORDER BY
CASE s.session_apex WHEN in_session_apex THEN 1 END NULLS LAST,
CASE s.session_db WHEN in_session_db THEN 1 END NULLS LAST,
CASE s.page_id WHEN in_page_id THEN 1 END NULLS LAST,
s.session_id DESC
)
FROM sessions s
WHERE s.user_id = COALESCE(in_user_id, sess.get_user_id())
AND s.app_id = COALESCE(in_app_id, sess.get_app_id())
AND s.page_id = COALESCE(in_page_id, s.page_id)
AND s.session_db = COALESCE(in_session_db, s.session_db)
AND s.session_apex = COALESCE(in_session_apex, s.session_apex)
AND s.created_at >= COALESCE(in_created_at_min, TRUNC(SYSDATE))
);
-- prepare contexts
IF rec.contexts IS NOT NULL THEN
sess.apply_contexts(rec.contexts);
END IF;
-- prepare APEX items
$IF $$APEX_INSTALLED $THEN
IF COALESCE(in_page_id, rec.apex_globals) IS NOT NULL THEN
sess.apply_items(rec.apex_globals);
END IF;
--
IF COALESCE(in_page_id, rec.apex_locals) IS NOT NULL THEN
sess.apply_items(rec.apex_locals);
END IF;
$END
EXCEPTION
WHEN NO_DATA_FOUND THEN
NULL;
--tree.log_error('NO_DATA_FOUND');
--RAISE_APPLICATION_ERROR(tree.app_exception_code, 'LOAD_SESSION_NOT_FOUND', TRUE);
END;
BEGIN
tree.log_module();
sess.init();
-- get latest payload for current app/user and set it as current
sess.load_contexts (
in_app_id => sess.get_app_id(),
in_user_id => sess.get_user_id(),
in_session_db => NULL,
in_session_apex => NULL
);
END;
/
Check current contexts:
SELECT s.*
FROM session_contexts s
ORDER BY 1, 2;