feat: comprehensive cross-file support and performance optimization (v3.3.0)

- Implemented cross-file completion, references, and validation for .frml files.
- Optimized resource discovery using IntelliJ indexing (ReferencesSearch) to fix IDE freeze.
- Refactored shared search logic into DynFormPathUtils.
- Excluded <ROW> tags from field definition requirements.
- Updated plugin version to 3.3.0.
This commit is contained in:
2026-05-14 18:27:57 +07:00
parent b6dc46d775
commit 431e51079c
35 changed files with 4693 additions and 565 deletions

View File

@@ -0,0 +1,99 @@
<?xml version="1.0" encoding="UTF-8"?>
<FORMS xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="dynf/dynf-form-def.xsd">
<DATASETS>
<DATASET ID="DS-MASTER">
<SCHEMA>APP</SCHEMA>
<TABLENAME>PROJECTS</TABLENAME>
<KEYFIELDS>PROJ_ID</KEYFIELDS>
<SQL>
<SELECT>
SELECT DISTINCT PRPS.PROP_ID
, PRPS.PROP_YEAR
, PRPS.PROP_YEAR FLOW_YEAR
, PRPS.STM_CODE STM_CODE
, BUD.GET_SECTION(PRPS.STM_CODE) STM_NAME
, PRPS.BTM_CODE BTM_CODE
, PRPS.FLOW_TYPE FLOW_TYPE
, PRPS.FLOW_STATE FLOW_STATE
, NVL(BUD.GET_PROJECT(PROJ.PJM_CODE), VPSTT.FLOW_TYPE_DESC) PROJ_NAME
, BUD.GET_ACTIVITY(PROJ.ACM_CODE) ACM_NAME
, VPSTT.FLOW_TYPE_DESC
, VPSTT.FLOW_LEVEL
, VPSTT.FLOW_STATE
, VPSTT.FLOW_STEP_DESC
, VPSTT.FLOW_STATE_DESC
, VPSTT.NEXT_STEP
, VPSTT.NEXT_STEP_DESC
, VPSTT.NEXT_STATE_DESC
, PRPS.PROP_VERSION VERSION
, PRPS.PROP_DOCNO DOCNO
, PRPS.PROP_PROVED_DATE PROVED_DATE
, JDTOT(PRPS.FLOW_DATE) STATE_DATE
</SELECT>
<FROM>
FROM PROPOSALS PRPS
INNER JOIN V_PROJECT_STATE VPSTT on PRPS.PROP_ID = VPSTT.PROP_ID
LEFT OUTER JOIN PROPS_PROJECTS PROJ ON PRPS.PROP_ID = PROJ.PROJ_ID
INNER JOIN V_PROPS_APPROVERS PAPVS ON PAPVS.PROP_ID=PRPS.PROP_ID
</FROM>
<FILTER>WHERE PRPS.FLOW_TYPE = 'PROP-GNL-01' AND PAPVS.FAPV_APPROVER = :USER_CODE</FILTER>
<ORDER>ORDER BY PRPS.PROP_ID</ORDER>
</SQL>
</DATASET>
</DATASETS>
<FORM>
<FORM_BROWSE DATAID="DS-MASTER">
<HEADER NAVI="N" EDIT="N" ADD="N" DELETE="N" VIEW="N"/>
<PAGESIZE>0</PAGESIZE>
<FIELDS>
<FIELD NAME="$itemno" LABEL="no" ALIGN="right" WIDTH="5em"/>
<FIELD NAME="STM_NAME" LABEL="props.stm_name" ALIGN="left" WIDTH="20em">
<DATA-FORMATTER>
<![CDATA[(value,row,idx)=>{return $(`<div class="col-24 text-nowrap"><div class="col offset-${+(row.node_level)-1}">${value}</div></div>`);}]]>
</DATA-FORMATTER>
</FIELD>
<FIELD NAME="FLOW_TYPE_DESC" LABEL="props.type" ALIGN="left">
<DATA-FORMATTER>
<![CDATA[(value,row,idx)=>{return $(`<div class="col-24 row"><div class="col offset-${+(row.node_level)-1}">${value}</div></div>`);}]]>
</DATA-FORMATTER>
</FIELD>
<FIELD NAME="FLOW_STATE_DESC" LABEL="props.state" ALIGN="center" WIDTH="10em">
<DATA-FORMATTER>
<![CDATA[(value,row,idx)=>{return $(`<span class="grid-badge flow-state-${row.flow_level}">${value}</span>`);}]]>
</DATA-FORMATTER>
</FIELD>
<FIELD NAME="STATE_DATE" LABEL="props.state_date" ALIGN="center" WIDTH="10em"/>
<COMMAND-BUTTONS>
<BUTTON NAME="btnApprove" CLASS="btn btn-primary btn-tracking" ICON-CLASS="bi bi-distribute-vertical white">
<EVENT ON="click"><![CDATA[
({ev,row})=>{
console.log(row);
$PageCtx.saveSessionData("general", row);
$PageCtx.saveStorageData("general#search", {prop_id: row.prop_id});
$WebNavi.goto("/bdgt05/bgt0501010-general");
}
]]></EVENT>
</BUTTON>
</COMMAND-BUTTONS>
</FIELDS>
<FILTERS AUTO-APPLY="Y" ALLOW-NO-FILTER="Y">
<FIELDS>
<FIELD NAME="PROP_YEAR" CAPTION="project.year" INPUTTYPE="COMBOBOX" SEARCH-ORIGIN="PRPS.PROP_YEAR=${VALUE}">
<LIST-OPTION TABLE="VL_YEAR" TEXT="#DV_YEAR" VALUE="DV_YEAR" ORDER="DV_YEAR" FIRSTLIST="@{NONE}"/>
</FIELD>
<FIELD NAME="STM_CODE" CAPTION="props.stm_name" INPUTTYPE="COMBOBOX" SEARCH-ORIGIN="STM_CODE=${VALUE}">
<LIST-OPTION TABLE="BUD.SECTION_M" TEXT="#STM_NAME" VALUE="STM_CODE" ORDER="STM_NAME" FIRSTLIST=""/>
</FIELD>
</FIELDS>
<LAYOUT>
<ROW>
<FIELD NAME="PROP_YEAR" VAL_WIDTH="6" CAPT_WIDTH="12" LAYOUT_WIDTH="12"/>
</ROW>
<ROW>
<FIELD NAME="STM_CODE" VAL_WIDTH="12" CAPT_WIDTH="6" LAYOUT_WIDTH="24"/>
</ROW>
</LAYOUT>
</FILTERS>
</FORM_BROWSE>
</FORM>
</FORMS>