---------------------------------------------------------------------------------------------------
 // отследить изменения атриутов на DOM компоненте
                    let parentForm = getPage().form;
                    let btnSave = parentForm.getControlByName('Btn_Save');
                    let observer = new MutationObserver(Form.setFieldsRequired.bind(null, true));
                    observer.observe(btnSave, {
                        attributeFilter: ['class', 'enabled']
                    });
            // Добавляем событие изменений ComboBox в фильтре StatGrid
            let statGridFmeExpertises = getControl('StatGridFmeExpertises');
            let btnGetFiltr = statGridFmeExpertises.querySelector('[class="btn_actions_mis toggleFilter"]');
            btnGetFiltr.onclick(); // открываем окно фильтра
            let filtrDomBlock = statGridFmeExpertises.querySelector('.filter-block');
            filtrDomBlock.querySelectorAll('[cmptype="ComboBox"]').forEach(comboBoxInput => {
                let observer = new MutationObserver(mutationRecords => {
                    if ((mutationRecords[0].target.children.length !== 0)
                         && (mutationRecords[1].target.children.length !== 0)
                         && (mutationRecords[2].target.children.length !== 0)) {
                        refreshDataSet('DsFmeExpertises');
                    }
                });
                observer.observe(comboBoxInput, {
                    childList: true,
                    subtree: true,
                    characterDataOldValue: true
                });
            });
            sbtnGetFiltr.onclick();
---------------------------------------------------------------------------------------------------

Синхронный запуск экшена
executeAction('getInfoFromHHDeps',null, null, null, false);

---------------------------------------------------------------------------------------------------
Парсинг JSON в запросе
<div cmptype="Form" class="d3form formBackground"
     caption="Form2">
<!--
@args
   openD3Form('#templates/json', true, {width: 800, height: 600});
-->
<cmpScript>
  <![CDATA[
    Form.runSaveJson= function() {
        let jsonObj = [{aa:11}, {aa: 22}, {aa: 33}, {aa: 44}];
        setVar("jsonStr", JSON.stringify(jsonObj));
        executeAction('saveJson');
    };
  ]]>
</cmpScript>

<cmpAction name="saveJson">
    <![CDATA[
    begin
      apex_json.parse(:JSON_STR);
      for i in 1..apex_json.get_count(p_path => '.') loop
         :OUT := APEX_JSON.get_varchar2(p_path => '['|| i ||'].aa', p0 => i);
      end loop;
    end;
    ]]>
    <cmpActionVar name="LPU"      src="LPU"     srctype="session"/>
    <cmpActionVar name="JSON_STR" src="jsonStr" srctype="var" get=""/>
    <cmpActionVar name="OUT"      src="OUT"     srctype="var" put="" len="17"/>
</cmpAction>
<cmpButton caption="запуск JSON" onclick="Form.runSaveJson();"/>
</div>

---------------------------------------------------------------------------------------------------
Парсинг JSON колекция в запросе

    setVar('jsonArr', ["111;2222;3333", "444;555;666"]);
    <cmpAction name="OksCaseTreatment.saveToRecommendations">
        <![CDATA[
        declare
          cJSON                   D_CL_STR := :psJSON_ARRAY;
          xCL                     D_CL_STR;
          pnNEW_RECOMMENDATION_ID number(17);
        begin
          for nI in coalesce(cJSON.FIRST, 1) .. coalesce(cJSON.LAST, -1)
          loop
            xCL := D_PKG_TOOLS.STR_SEPARATE(cJSON(nI));
            D_PKG_OKS_RECOMMENDATIONS.ADD(pnD_INSERT_ID    => pnNEW_RECOMMENDATION_ID,
                                          pnLPU            => :pnLPU,
                                          pnPID            => xCL(3),   -- Нозологические регистры: пациенты
                                          pnOKS_CASE       => xCL(5),   -- ОКС: Эпизод заболевания
                                          pnRECOMMEND      => xCL(2),   -- Рекомендации
                                          pnRECOMEND_STAGE => xCL(4),   -- Рекомендован этап реабилитации
                                          psNOTE           => '',       -- Комментарий
                                          pdDATE_REG       => sysdate); -- Дата заполнения
          end loop;
        end;
        ]]>
        <cmpActionVar name="pnLPU"        src="LPU"     srctype="session"/>
        <cmpActionVar name="psJSON_ARRAY" src="jsonArr" srctype="var" type="collection" tdo="D_CL_STR"/>
    </cmpAction>
-------------------------------------------------------------------
declare
  c d_cl_str := d_cl_str('qwe;rty','asd;fgh');
  b d_cl_str;
  s varchar2(4000);
begin
  s := c(c.first);
  dbms_output.put_line(s);
  s:=c(c.next(1));
  dbms_output.put_line(s);
  dbms_output.put_line(c.count);
  
  dbms_output.put_line(c(1));
  dbms_output.put_line(c(2));
  
  dbms_output.put_line('--');
  
  b:=d_pkg_tools.STR_SEPARATE(c(1));
  dbms_output.put_line(b(1));
  
/*
  for x in 
  c.first..c.last
  loop
    null;-- dbms_output.put_line(x);
  end loop;
*/
end;
---------------------------------------------------------------------------------------------------
группировка запросов

                beginRequest();
                    executeAction('OksCaseTreatment.Select');
                    refreshDataSet('DsOksReasonThromb');
                    refreshDataSet('DsOksMedication');
                    executeAction('OksCaseTreatment.GetLpudict');
                endRequest(null, null, function() {
                    refreshDataSet('DsContAspirin');
                });
---------------------------------------------------------------------------------------------------