Получение темы ролика Config JSON в APEX - PullRequest
0 голосов
/ 03 октября 2019

Я пытаюсь получить конфигурацию текущей темы JSON из таблицы apex_application_theme_styles, столбец theme_roller_config CLOB и использовать ее в функции JavaScript.

Используемый код реализован следующим образом:

  • pr_get_theme_config в Processing> Ajax Callback
declare
  c_trc_json clob;
  c_trc_json_vars clob;
begin
  select theme_roller_config into c_trc_json from apex_application_theme_styles where application_id = :APP_ID and upper(IS_CURRENT) like upper('Yes');
  apex_json.parse(c_trc_json);
  --dbms_output.put_line(apex_json.get_varchar2(p_path => 'vars')); -- for debugging purposes, but prints nothing
end;
  • getThemeConfig функция в Page> JavaScript> Function ... Declaration
function getThemeConfig() {
  var themeConfig = new htmldb_Get(null, &APP_ID., 'APPLICATION_PROCESS=pr_get_theme_config', &APP_PAGE_ID.);
  var themeConfigJson = themeConfig.get();
  return themeConfigJson;
}

После вызова getThemeConfig возвращает пустую строку, но должен возвращать JSON.

Для лучшего понимания, вот пример того, что может быть внутри theme_roller_config (послекаждый \n заменяется настоящей новой строкой)

{
  "customCSS": "/* custom CSS, should be discarded in this case, cause could contain a large multiline CSS code block */",
  "vars": {
    "@g_Accent-BG": "#008328",
    "@g_Link-Base": "#267373",
    "@g_Header-BG": "#007228",
    "@g_Accent-OG": "#fafafa",
    "@g_Header-FG": "#ddffdd",
    "@g_Region-BG": "#ffffff",
    "@g_Region-Header-BG": "#007228",
    "@g_Nav-BG": "#ffffff",
    "@g_Nav-Active-BG": "#aaaaaa",
    "@g_Actions-Col-BG": "#ebebeb",
    "@g_Body-Title-BG": "#ffffff",
    "@l_Left-Col-BG": "#ebebeb",
    "@g_Nav-FG": "#dddddd",
    "@g_Nav-Active-FG": "#ffffff",
    "@g_Button-BorderRadius": "4px",
    "@g_Form-BorderRadius": "4px",
    "@g_Body-Content-Max-Width": "auto",
    "@g_Focus": "#007228",
    "@g_Form-Item-BG": "#fefefe",
    "@g_Nav-Icon": "#1c1c1f",
    "@menu_Tabs-Active-Text": "#0a6a14",
    "@g_Container-BorderRadius": "4px",
    "@g_Body-BG": "#f0f0f0",
    "@l_Button-Primary-BG": "#fd8b43",
    "@l_Button-Danger-BG": "#e53835",
    "@l_Button-Warning-Text": "#a30b0b",
    "@l_Button-Success-BG": "#007228",
    "@l_Button-Success-Text": "#ffffff",
    "@g_Form-Item-FG": "#3e3e3e",
    "@l_Button-Primary-Text": "#5f3100"
  }
}

А теперь основные вопросы:

  • Как посмотреть результаты процедуры apex_json.parse при отладкемой PL / SQL в IDE (в моем случае это PL/SQL Developer)?

  • Как получить доступ к vars свойству JSON в PL / SQL и передать его в функцию JavaScript?

1 Ответ

0 голосов
/ 09 октября 2019

Правильный способ получить объект из свойства vars - это использовать apex_json.write и apex_json.g_values в PL / SQL-процессе обратного вызова AJAX и вызывать его из JS с помощью apex.server.process. Вот пример:

  • pr_get_theme_config в Processing> Ajax Callback:
declare
  c_trc clob;
begin
  select theme_roller_config 
    into c_trc 
    from apex_application_theme_styles 
    where application_id = :APP_ID 
      and upper(IS_CURRENT) like upper('Yes');
  apex_json.parse(c_trc);
  apex_json.write(apex_json.g_values, 'vars');
end;
  • Page> JavaScript> Function ... Declaration:
apex.server.process(
  'pr_get_theme_config',{},{
    success: function (data) {
      doSomething(JSON.parse(data));
    },
    dataType: 'text'}
);

Работая с apex.server.process, имейте в виду, что IE11 не поддерживает Promises, поэтому вы должны использовать свойство success для обратного вызова. В противном случае вы можете использовать .then() в других браузерах.

Дополнительные документы:

  1. Справочник по API APEX - APEX_JSON
  2. WRITEПроцедура Подпись 15
  3. Тот же вопрос в Oracle Community
...