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.
This commit is contained in:
201
DevResources/full-examples/bdgt04/defs/ajax.xml
Normal file
201
DevResources/full-examples/bdgt04/defs/ajax.xml
Normal file
@@ -0,0 +1,201 @@
|
||||
<?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>
|
||||
Reference in New Issue
Block a user