Skip to content

packages sess.load_session

Jan Kvetina edited this page Oct 9, 2020 · 6 revisions

sess.load_session

Repository spec: sess.load_session, body: sess.load_session

This procedure retrieves latest payload for requested app/user/session and set it as current.


Signature

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;

Minimal example

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;

Clone this wiki locally