Files
Dynamic-Form-Tools/DevResources/full-examples/bdgt05/defs/ajax.xml
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

201 lines
4.6 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<DATASETS xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="xsd/ajax.xsd">
<DATASET ID="DS-PROJECT-02">
<SCHEMA>BUD</SCHEMA>
<TABLEDESC>Main Activity</TABLEDESC>
<MAXROWS>100</MAXROWS>
<SQL>
<SELECT>SELECT PJM.PJM_CODE
, PJM.PJM_NAME
, PJM.PJM_JOB_TYPE
, PJM.PJM_WORK_PLAN
, PJM.PJM_PRODUCT
, PJM.PJM_GROUP_PLAN
, PJM.PJM_JOB_PROJECT
, PJM.PJM_STRATEGY
, PJM.PJM_ACTIVE
</SELECT>
<FROM>FROM PROJECT_M PJM</FROM>
<WHERE>
WHERE (PJM.PJM_CODE LIKE '%'||:SEARCH||'%' OR PJM.PJM_NAME LIKE '%'||:SEARCH||'%')
</WHERE>
<GROUP/>
<ORDER/>
</SQL>
</DATASET>
<DATASET ID="DS-ACTIVITY-02">
<SCHEMA>BUD</SCHEMA>
<TABLEDESC>Main Activity</TABLEDESC>
<MAXROWS>100</MAXROWS>
<SQL>
<SELECT>
SELECT ACM_CODE
, ACM_NAME
, NODE_LEVEL
, MAIN_NODE
, ACM_UNIT
, ACM_START_YEAR
, ACM_END_YEAR
, STM_CODE
, JBT_CODE
, JBP_CODE
, EXP_CODE
, PJM_CODE
, STG_CODE
, NODE_TYPE
, DECODE(NODE_TYPE,'C','true','') disabled
</SELECT>
<FROM>FROM BGT.V_ACTIVITY_TREE ACM</FROM>
<WHERE>
WHERE 0=0
AND (:DV_YEAR BETWEEN ACM_START_YEAR AND ACM_END_YEAR)
-- AND (ACM.STM_CODE = '%' OR ACM.STM_CODE = :STM_CODE)
AND (ACM.ACM_CODE LIKE '%'||:SEARCH||'%' OR ACM.ACM_NAME LIKE '%'||:SEARCH||'%')
</WHERE>
<GROUP/>
<ORDER/>
</SQL>
</DATASET>
<DATASET ID="DS-BUDGET-02">
<SCHEMA>BUD</SCHEMA>
<TABLEDESC>Main Activity</TABLEDESC>
<MAXROWS>100</MAXROWS>
<SQL>
<SELECT>
SELECT BGD.BGM_CODE
, BGD.BGM_NAME
, BGD.BGM_EXPENSE_TYPE
, BGD.BGM_UNIT
, BGD.BGM_UNIT_RATE
, BGD.BGM_ACTIVE
, BGD.BGM_PREPARE
</SELECT>
<FROM>FROM BUDGET_M BGD</FROM>
<WHERE>
WHERE (BGD.BGM_CODE LIKE '%'||:SEARCH||'%' OR BGD.BGM_NAME LIKE '%'||:SEARCH||'%')
</WHERE>
<ORDER>ORDER BY BGM_CODE</ORDER>
</SQL>
</DATASET>
<DATASET ID="DS-STTGY-GROUP-02">
<SCHEMA>APP</SCHEMA>
<SQL>
<SELECT>SELECT RFG_GRP
, RFC_CODE
, RFC_DESC
, RFC_FLAG
, RFC_ORDER
</SELECT>
<FROM>FROM REFER_CODE</FROM>
<WHERE>WHERE (RFG_GRP = 'STG-ITEMS')
AND (RFC_CODE LIKE '%'||:SEARCH||'%' OR RFC_DESC LIKE '%'||:SEARCH||'%')</WHERE>
<ORDER>ORDER BY RFC_CODE</ORDER>
</SQL>
</DATASET>
<DATASET ID="DS-STTGY-ITEMS-02">
<SCHEMA>APP</SCHEMA>
<SQL>
<SELECT>SELECT RFG_GRP
, RFC_CODE
, RFC_DESC
, RFC_FLAG
, RFC_ORDER
</SELECT>
<FROM>FROM REFER_CODE</FROM>
<WHERE>WHERE (RFG_GRP = :RFG_GRP)
AND (RFC_CODE LIKE '%'||:SEARCH||'%' OR RFC_DESC LIKE '%'||:SEARCH||'%')</WHERE>
<ORDER>ORDER BY RFC_CODE</ORDER>
</SQL>
</DATASET>
<DATASET ID="DS-ACTIVITY-02-BDGT">
<SCHEMA>BUD</SCHEMA>
<TABLEDESC>Main Activity</TABLEDESC>
<MAXROWS>100</MAXROWS>
<SQL>
<SELECT>
SELECT ACM_CODE
, ACM_NAME
, NODE_LEVEL
, MAIN_NODE
, ACM_UNIT
, ACM_START_YEAR
, ACM_END_YEAR
, STM_CODE
, JBT_CODE
, JBP_CODE
, EXP_CODE
, PJM_CODE
, STG_CODE
, NODE_TYPE
, DECODE(NODE_TYPE,'C','true','') disabled
</SELECT>
<FROM>FROM BGT.V_ACTIVITY_TREE ACM</FROM>
<WHERE>
WHERE 0=0
AND (:DV_YEAR BETWEEN ACM_START_YEAR AND ACM_END_YEAR)
-- AND (ACM.STM_CODE = '%' OR ACM.STM_CODE = :STM_CODE)
AND (ACM.ACM_CODE LIKE '%'||:SEARCH||'%' OR ACM.ACM_NAME LIKE '%'||:SEARCH||'%')
</WHERE>
<GROUP/>
<ORDER/>
</SQL>
</DATASET>
<DATASET ID="DS-BUDGET-02-BDGT">
<SCHEMA>APP</SCHEMA>
<TABLEDESC>Main Activity</TABLEDESC>
<MAXROWS>100</MAXROWS>
<SQL>
<SELECT>
SELECT BGM.BGM_CODE
, BGM.BGM_NAME
, BGM.EXP_TYPE
, BGM.BGM_UNIT
, BGM.BGM_UNIT_RATE
, BGM.BGM_SEQ
, BGM.NODE_LEVEL
, BGM.MAIN_NODE
, DECODE(NODE_TYPE,'C','true','') disabled
</SELECT>
<FROM>FROM V_BUDGET_TREE BGM</FROM>
<WHERE>
WHERE (BGM.BGM_CODE LIKE '%'||:SEARCH||'%' OR BGM.BGM_NAME LIKE '%'||:SEARCH||'%')
</WHERE>
<ORDER>ORDER BY BGM_SEQ</ORDER>
</SQL>
</DATASET>
<DATASET ID="DS-EQUIPT-BUDGET">
<SCHEMA>APP</SCHEMA>
<TABLEDESC>Main Activity</TABLEDESC>
<MAXROWS>100</MAXROWS>
<SQL>
<SELECT>
SELECT BGM.BGM_CODE
, BGM.BGM_NAME
, BGM.EXP_TYPE
, BGM.BGM_UNIT
, BGM.BGM_UNIT_RATE
, BGM.BGM_SEQ
, BGM.NODE_LEVEL
, BGM.MAIN_NODE
, DECODE(NODE_TYPE,'C','true','') disabled
</SELECT>
<FROM>FROM V_BUDGET_TREE BGM</FROM>
<WHERE>
WHERE (BGM_CODE LIKE '3.1%')
AND (BGM.BGM_CODE LIKE '%'||:SEARCH||'%' OR BGM.BGM_NAME LIKE '%'||:SEARCH||'%')
</WHERE>
<ORDER>ORDER BY BGM_SEQ</ORDER>
</SQL>
</DATASET>
</DATASETS>