Files
Dynamic-Form-Tools/DevResources/full-examples/bdgt05/view/frm/grids/grid-stratigy.frml
skidus f705cd11b9 feat: implement advanced bidirectional field referencing and cross-module path resolution
- Core Logic Enhancements:
    - Implement bidirectional field referencing between <FIELDS>, <LAYOUT>, and <TITLES> tags in .frml files, enabling seamless navigation from definitions to usages and vice versa.
    - Add robust support for AJAX-OPTION field mapping:
        - SRC attribute: Links to field definitions within defs/ajax.xml datasets.
        - TARGET attribute: Links to local field definitions within the same form.
    - Implement global grid resolution: GRID-ID now searches across the current file and all recursively included files (<INCLUDE>).
    - Enhance deep recursive search for fields/sections within nested tags like <SECTION>, <ROW>, and <FIELD-LIST>.

- Path Resolution & Helpers (DynFormPathUtils):
    - Added support for module-relative paths starting with # (mapping to view/frm/).
    - Added support for cross-module paths starting with / (mapping to WEB-INF/app/module/{module}/view/frm/).
    - Implemented auto-correction for common keyboard typos (Thai 'ิ' instead of /).
    - Added specialized helpers for locating ajax.xml and included files within the framework's structure.

- Smart Completion Enhancements:
    - Added context-aware completion for TARGET and SRC fields in AJAX update-fields.
    - Enabled global GRID-ID completion by scanning all included resources.
    - Improved dataset completion to include both local and AJAX-defined datasets.

- Test Resources:
    - Added a comprehensive set of real-world examples (bdgt04, bdgt05, bdgt06) in DevResources/full-examples/ to validate complex cross-module and master-detail scenarios.
2026-04-10 12:56:04 +07:00

76 lines
3.8 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<FORMS xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="xsd/#dynf_form_def.xsd">
<DATASETS>
<DATASET ID="DS-PROJECT-STTGYS">
<SCHEMA>APP</SCHEMA>
<TABLENAME>PROJECT_STTGYS</TABLENAME>
<KEYFIELDS>PROJ_ID,PSTG_CODE</KEYFIELDS>
<SQL>
<SELECT>
SELECT STTG.PROJ_ID
, STTG.PSTG_CODE
, RFC.RFC_DESC PSTG_DESC
, STTG.PSTG_CONCEPT
</SELECT>
<FROM>FROM PROJECT_STTGYS STTG
INNER JOIN BGT.REFER_CODE RFC ON RFC.RFG_GRP='STG-MAIN' AND RFC.RFC_CODE=STTG.PSTG_CODE
</FROM>
<ORDER>ORDER BY PSTG_CODE</ORDER>
</SQL>
<FIELDS>
<FIELD NAME="PROJ_ID" TYPE="VARCHAR" WIDTH="50" LABEL="project.id" />
<FIELD NAME="PSTG_CODE" TYPE="VARCHAR" WIDTH="20" LABEL="pstg.code" />
<FIELD NAME="PSTG_CONCEPT" TYPE="VARCHAR" WIDTH="500" LABEL="pstg.concept" />
<FIELD NAME="CREATE_BY" TYPE="VARCHAR" WIDTH="50" LABEL="sys.create_by" />
<FIELD NAME="CREATE_TIME" TYPE="DATE" WIDTH="0" LABEL="sys.create_time" />
<FIELD NAME="UPDATE_BY" TYPE="VARCHAR" WIDTH="50" LABEL="sys.update_by" />
<FIELD NAME="UPDATE_TIME" TYPE="DATE" WIDTH="0" LABEL="sys.update_time" />
</FIELDS>
</DATASET>
</DATASETS>
<DATA-GRIDS>
<DATA-GRID ID="GRID-PROJECT-STTGYS">
<MASTER-DATA DATASET-ID="DS-MASTER" MASTER-FIELDS="PROJ_ID" DETAIL-FIELDS="PROJ_ID"/>
<UNIQ-CHECK CHECK-FIELDS="PSTG_CODE" MESSAGE="pstg.code duplicate !"></UNIQ-CHECK>
<GRID-LIST DATAID="DS-PROJECT-STTGYS" EDIT="Y" DELETE="Y" ADD="Y">
<FIELDS>
<FIELD NAME="$itemno" LABEL="no" ALIGN="right" WIDTH="5em"/>
<FIELD NAME="PSTG_CODE" LABEL="pstg.code" WIDTH="12em" ALIGN="center" />
<FIELD NAME="PSTG_DESC" LABEL="pstg.desc" ALIGN="left" />
</FIELDS>
</GRID-LIST>
<GRID-EDITOR DATAID="DS-PROJECT-STTGYS">
<FIELDS>
<FIELD NAME="PROJ_ID" INPUTTYPE="HIDDEN" />
<FIELD NAME="PSTG_CODE" CAPTION="pstg.desc" INPUTTYPE="COMBOBOX" REQUIRE="Y" EDIT-READONLY="Y">
<LIST-OPTION TABLE="BGT.REFER_CODE" TEXT="#RFC_DESC" VALUE="RFC_CODE" FILTER="RFG_GRP='STG-MAIN'" FIRSTLIST="@{CAPTION}"/>
</FIELD>
<FIELD NAME="PSTG_CONCEPT" CAPTION="pstg.concept" INPUTTYPE="TEXTAREA" ROWS="2" />
<FIELD NAME="GRID-STTGYS-ITEMS" INPUTTYPE="DATA-GRID" GRID-ID="GRID-PROJECT-STTGYS-ITEMS" CAPTION="psti.header"/>
</FIELDS>
<LAYOUT CLASS="block-layout-form">
<ROW>
<FIELD NAME="PSTG_CODE" LAYOUT_WIDTH="16" OFFSET="4" />
</ROW>
<SECTION>
<HEADER CLASS="form-section-header col-24 mg-b-n30 mg-t-16 border-top-1">
<![CDATA[<h4 class="ml-3 col-24">@M{pstg.header}</h4>]]>
</HEADER>
<ROW>
<FIELD NAME="GRID-STTGYS-ITEMS" LAYOUT_WIDTH="20" OFFSET="4"/>
</ROW>
</SECTION>
<ROW>
<FIELD NAME="PSTG_CONCEPT" LAYOUT_WIDTH="16" OFFSET="4" />
</ROW>
<ROW TYPE="CONTENT">
<![CDATA[<div style="height: 200px"></div>]]>
</ROW>
</LAYOUT>
</GRID-EDITOR>
</DATA-GRID>
</DATA-GRIDS>
</FORMS>