Можно ли получить коллекцию apex из другого приложения в apex? - PullRequest
1 голос
/ 16 октября 2019

У меня есть приложение в Oracle Apex, где я создаю коллекцию. Мне нужны данные из этой коллекции в другом приложении Oracle Apex. Я пытался вызвать функцию SQL:

FUNCTION TestColl RETURN VARCHAR2 AS
    tmp number;
    v_workspace_id apex_workspaces.workspace_id%type;
    v_work_id NUMBER;
    BEGIN
    apex_application.g_flow_id := 100; --Application Id with collection I need
    v_work_id :=APEX_UTIL.FIND_SECURITY_GROUP_ID (p_workspace=>'XXX');
    apex_util.set_security_group_id(p_security_group_id => v_work_id);
    apex_custom_auth.set_session_id(p_session_id => '00000000'); --some session id
    commit;
    SELECT COUNT(*) into tmp FROM APEX_COLLECTIONS WHERE collection_name='C_COLLECTION_NAME';
    return to_char(tmp);
END TestColl;

Эта функция возвращает 0, но в IDE возвращает несколько.

Эти два приложения имеют разные схемы базы данных с грантами.

Чтоне так?

1 Ответ

1 голос
/ 16 октября 2019

Состояние сеанса привязано как к приложениям, так и к сеансам (за исключением элементов приложения, для которых для Scope установлено значение Global). Без встроенной поддержки «scope» на уровне коллекции я не могу понять, как бы вы сделали эту работу, не сделав что-то действительно хакерское (вы уже начинали этот путь). Без такой поддержки просто используйте свои собственные таблицы.

Собранные данные хранятся в традиционных таблицах кучи, так что это достаточно просто. Я рекомендую добавить столбец SESSION_ID в таблицу и использовать общую аутентификацию между приложениями (установите значения cookie в аутентификации одинаковыми). Тогда вам просто нужно создать задание для удаления данных для истекших сеансов.

...