From f705cd11b9ad38254797673204a46dd8c588237e Mon Sep 17 00:00:00 2001 From: skidus Date: Fri, 10 Apr 2026 12:56:04 +0700 Subject: [PATCH] feat: implement advanced bidirectional field referencing and cross-module path resolution MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Core Logic Enhancements: - Implement bidirectional field referencing between , , and 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 (). - Enhance deep recursive search for fields/sections within nested tags like
, , and . - 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. --- .../coroutines-javaagent-legacy.jar | Bin 270 -> 270 bytes .intellijPlatform/self-update.lock | 2 +- DevResources/dynform-exam.frml | 397 +++++++++ .../full-examples/bdgt04/defs/ajax.xml | 201 +++++ .../full-examples/bdgt04/view/bgt0401010.jsp | 20 + .../bdgt04/view/bgt0401020-budget.jsp | 20 + .../full-examples/bdgt04/view/bgt0401020.jsp | 20 + .../bdgt04/view/bgt0401030-budget.jsp | 20 + .../full-examples/bdgt04/view/bgt0401030.jsp | 20 + .../bdgt04/view/bgt0403010-general.jsp | 51 ++ .../bdgt04/view/bgt0403010-project-budget.jsp | 20 + .../bdgt04/view/bgt0403010-project.jsp | 35 + .../full-examples/bdgt04/view/bgt0403010.jsp | 25 + .../bdgt04/view/bgt0403020-general.jsp | 51 ++ .../bdgt04/view/bgt0403020-project-budget.jsp | 20 + .../bdgt04/view/bgt0403020-project.jsp | 35 + .../full-examples/bdgt04/view/bgt0403020.jsp | 21 + .../bdgt04/view/frm/bdgt-0401010.frml | 249 ++++++ .../bdgt04/view/frm/bdgt-0401020-budget.frml | 316 ++++++++ .../bdgt04/view/frm/bdgt-0401020.frml | 694 ++++++++++++++++ .../bdgt04/view/frm/bdgt-0401030-budget.frml | 316 ++++++++ .../bdgt04/view/frm/bdgt-0401030.frml | 680 ++++++++++++++++ .../bdgt04/view/frm/bdgt-0403010.frml | 112 +++ .../view/frm/bdgt-0403010/construct.frml | 324 ++++++++ .../bdgt04/view/frm/bdgt-0403010/equipt.frml | 340 ++++++++ .../bdgt04/view/frm/bdgt-0403010/general.frml | 255 ++++++ .../bdgt04/view/frm/bdgt-0403010/manage.frml | 253 ++++++ .../view/frm/bdgt-0403010/project-budget.frml | 343 ++++++++ .../bdgt04/view/frm/bdgt-0403010/project.frml | 644 +++++++++++++++ .../bdgt04/view/frm/bdgt-0403010/routine.frml | 256 ++++++ .../bdgt04/view/frm/bdgt-0403020.frml | 114 +++ .../view/frm/bdgt-0403020/construct.frml | 297 +++++++ .../bdgt04/view/frm/bdgt-0403020/equipt.frml | 314 +++++++ .../bdgt04/view/frm/bdgt-0403020/general.frml | 265 ++++++ .../bdgt04/view/frm/bdgt-0403020/manage.frml | 227 ++++++ .../view/frm/bdgt-0403020/project-budget.frml | 321 ++++++++ .../bdgt04/view/frm/bdgt-0403020/project.frml | 621 ++++++++++++++ .../bdgt04/view/frm/bdgt-0403020/routine.frml | 230 ++++++ .../view/frm/grids/grid-construct-budget.frml | 263 ++++++ .../view/frm/grids/grid-equipt-budget.frml | 231 ++++++ .../view/frm/grids/grid-manage-budget.frml | 222 +++++ .../view/frm/grids/grid-proj-budget.frml | 272 +++++++ .../view/frm/grids/grid-routine-budget.frml | 222 +++++ .../view/frm/grids/grid-stratigy-item.frml | 86 ++ .../bdgt04/view/frm/grids/grid-stratigy.frml | 75 ++ .../view/frm/grids/grid-work-budget.frml | 174 ++++ .../full-examples/bdgt05/defs/ajax.xml | 201 +++++ .../bdgt05/view/bgt0501010-general.jsp | 51 ++ .../full-examples/bdgt05/view/bgt0501010.jsp | 20 + .../bdgt05/view/bgt0501020-budget.jsp | 20 + .../full-examples/bdgt05/view/bgt0501020.jsp | 20 + .../bdgt05/view/bgt0501030-budget.jsp | 20 + .../full-examples/bdgt05/view/bgt0501030.jsp | 20 + .../bdgt05/view/frm/bdgt-0501010.frml | 93 +++ .../view/frm/bdgt-0501010/construct.frml | 338 ++++++++ .../bdgt05/view/frm/bdgt-0501010/equipt.frml | 356 ++++++++ .../bdgt05/view/frm/bdgt-0501010/general.frml | 259 ++++++ .../bdgt05/view/frm/bdgt-0501010/manage.frml | 268 ++++++ .../bdgt05/view/frm/bdgt-0501010/routine.frml | 271 +++++++ .../bdgt05/view/frm/bdgt-0501020-budget.frml | 346 ++++++++ .../bdgt05/view/frm/bdgt-0501020.frml | 766 ++++++++++++++++++ .../bdgt05/view/frm/bdgt-0501030-budget.frml | 346 ++++++++ .../bdgt05/view/frm/bdgt-0501030.frml | 766 ++++++++++++++++++ .../view/frm/grids/grid-construct-budget.frml | 260 ++++++ .../view/frm/grids/grid-equipt-budget.frml | 231 ++++++ .../view/frm/grids/grid-manage-budget.frml | 222 +++++ .../view/frm/grids/grid-proj-budget.frml | 213 +++++ .../view/frm/grids/grid-routine-budget.frml | 222 +++++ .../view/frm/grids/grid-stratigy-item.frml | 86 ++ .../bdgt05/view/frm/grids/grid-stratigy.frml | 75 ++ .../view/frm/grids/grid-work-budget.frml | 174 ++++ .../full-examples/bdgt06/defs/ajax.xml | 201 +++++ .../bdgt06/view/bgt0601010-general.jsp | 51 ++ .../full-examples/bdgt06/view/bgt0601010.jsp | 20 + .../bdgt06/view/bgt0601020-budget.jsp | 20 + .../full-examples/bdgt06/view/bgt0601020.jsp | 20 + .../bdgt06/view/frm/bdgt-0601010.frml | 100 +++ .../view/frm/bdgt-0601010/construct.frml | 322 ++++++++ .../bdgt06/view/frm/bdgt-0601010/equipt.frml | 340 ++++++++ .../bdgt06/view/frm/bdgt-0601010/general.frml | 267 ++++++ .../bdgt06/view/frm/bdgt-0601010/manage.frml | 253 ++++++ .../bdgt06/view/frm/bdgt-0601010/routine.frml | 259 ++++++ .../bdgt06/view/frm/bdgt-0601020-budget.frml | 315 +++++++ .../bdgt06/view/frm/bdgt-0601020.frml | 758 +++++++++++++++++ .../view/frm/grids/grid-construct-budget.frml | 260 ++++++ .../view/frm/grids/grid-equipt-budget.frml | 231 ++++++ .../view/frm/grids/grid-manage-budget.frml | 222 +++++ .../view/frm/grids/grid-proj-budget.frml | 213 +++++ .../view/frm/grids/grid-routine-budget.frml | 222 +++++ .../view/frm/grids/grid-stratigy-item.frml | 86 ++ .../bdgt06/view/frm/grids/grid-stratigy.frml | 75 ++ .../view/frm/grids/grid-work-budget.frml | 174 ++++ build.gradle.kts | 2 +- entities.json | 6 + mempalace.yaml | 10 + .../helper/DynFormCompletionContributor.java | 194 ++++- .../tools/helper/DynFormPathUtils.java | 68 +- .../helper/DynFormReferenceContributor.java | 370 ++++++++- src/main/resources/META-INF/pluginIcon.svg | 32 +- 99 files changed, 20379 insertions(+), 30 deletions(-) create mode 100644 DevResources/dynform-exam.frml create mode 100644 DevResources/full-examples/bdgt04/defs/ajax.xml create mode 100644 DevResources/full-examples/bdgt04/view/bgt0401010.jsp create mode 100644 DevResources/full-examples/bdgt04/view/bgt0401020-budget.jsp create mode 100644 DevResources/full-examples/bdgt04/view/bgt0401020.jsp create mode 100644 DevResources/full-examples/bdgt04/view/bgt0401030-budget.jsp create mode 100644 DevResources/full-examples/bdgt04/view/bgt0401030.jsp create mode 100644 DevResources/full-examples/bdgt04/view/bgt0403010-general.jsp create mode 100644 DevResources/full-examples/bdgt04/view/bgt0403010-project-budget.jsp create mode 100644 DevResources/full-examples/bdgt04/view/bgt0403010-project.jsp create mode 100644 DevResources/full-examples/bdgt04/view/bgt0403010.jsp create mode 100644 DevResources/full-examples/bdgt04/view/bgt0403020-general.jsp create mode 100644 DevResources/full-examples/bdgt04/view/bgt0403020-project-budget.jsp create mode 100644 DevResources/full-examples/bdgt04/view/bgt0403020-project.jsp create mode 100644 DevResources/full-examples/bdgt04/view/bgt0403020.jsp create mode 100644 DevResources/full-examples/bdgt04/view/frm/bdgt-0401010.frml create mode 100644 DevResources/full-examples/bdgt04/view/frm/bdgt-0401020-budget.frml create mode 100644 DevResources/full-examples/bdgt04/view/frm/bdgt-0401020.frml create mode 100644 DevResources/full-examples/bdgt04/view/frm/bdgt-0401030-budget.frml create mode 100644 DevResources/full-examples/bdgt04/view/frm/bdgt-0401030.frml create mode 100644 DevResources/full-examples/bdgt04/view/frm/bdgt-0403010.frml create mode 100644 DevResources/full-examples/bdgt04/view/frm/bdgt-0403010/construct.frml create mode 100644 DevResources/full-examples/bdgt04/view/frm/bdgt-0403010/equipt.frml create mode 100644 DevResources/full-examples/bdgt04/view/frm/bdgt-0403010/general.frml create mode 100644 DevResources/full-examples/bdgt04/view/frm/bdgt-0403010/manage.frml create mode 100644 DevResources/full-examples/bdgt04/view/frm/bdgt-0403010/project-budget.frml create mode 100644 DevResources/full-examples/bdgt04/view/frm/bdgt-0403010/project.frml create mode 100644 DevResources/full-examples/bdgt04/view/frm/bdgt-0403010/routine.frml create mode 100644 DevResources/full-examples/bdgt04/view/frm/bdgt-0403020.frml create mode 100644 DevResources/full-examples/bdgt04/view/frm/bdgt-0403020/construct.frml create mode 100644 DevResources/full-examples/bdgt04/view/frm/bdgt-0403020/equipt.frml create mode 100644 DevResources/full-examples/bdgt04/view/frm/bdgt-0403020/general.frml create mode 100644 DevResources/full-examples/bdgt04/view/frm/bdgt-0403020/manage.frml create mode 100644 DevResources/full-examples/bdgt04/view/frm/bdgt-0403020/project-budget.frml create mode 100644 DevResources/full-examples/bdgt04/view/frm/bdgt-0403020/project.frml create mode 100644 DevResources/full-examples/bdgt04/view/frm/bdgt-0403020/routine.frml create mode 100644 DevResources/full-examples/bdgt04/view/frm/grids/grid-construct-budget.frml create mode 100644 DevResources/full-examples/bdgt04/view/frm/grids/grid-equipt-budget.frml create mode 100644 DevResources/full-examples/bdgt04/view/frm/grids/grid-manage-budget.frml create mode 100644 DevResources/full-examples/bdgt04/view/frm/grids/grid-proj-budget.frml create mode 100644 DevResources/full-examples/bdgt04/view/frm/grids/grid-routine-budget.frml create mode 100644 DevResources/full-examples/bdgt04/view/frm/grids/grid-stratigy-item.frml create mode 100644 DevResources/full-examples/bdgt04/view/frm/grids/grid-stratigy.frml create mode 100644 DevResources/full-examples/bdgt04/view/frm/grids/grid-work-budget.frml create mode 100644 DevResources/full-examples/bdgt05/defs/ajax.xml create mode 100644 DevResources/full-examples/bdgt05/view/bgt0501010-general.jsp create mode 100644 DevResources/full-examples/bdgt05/view/bgt0501010.jsp create mode 100644 DevResources/full-examples/bdgt05/view/bgt0501020-budget.jsp create mode 100644 DevResources/full-examples/bdgt05/view/bgt0501020.jsp create mode 100644 DevResources/full-examples/bdgt05/view/bgt0501030-budget.jsp create mode 100644 DevResources/full-examples/bdgt05/view/bgt0501030.jsp create mode 100644 DevResources/full-examples/bdgt05/view/frm/bdgt-0501010.frml create mode 100644 DevResources/full-examples/bdgt05/view/frm/bdgt-0501010/construct.frml create mode 100644 DevResources/full-examples/bdgt05/view/frm/bdgt-0501010/equipt.frml create mode 100644 DevResources/full-examples/bdgt05/view/frm/bdgt-0501010/general.frml create mode 100644 DevResources/full-examples/bdgt05/view/frm/bdgt-0501010/manage.frml create mode 100644 DevResources/full-examples/bdgt05/view/frm/bdgt-0501010/routine.frml create mode 100644 DevResources/full-examples/bdgt05/view/frm/bdgt-0501020-budget.frml create mode 100644 DevResources/full-examples/bdgt05/view/frm/bdgt-0501020.frml create mode 100644 DevResources/full-examples/bdgt05/view/frm/bdgt-0501030-budget.frml create mode 100644 DevResources/full-examples/bdgt05/view/frm/bdgt-0501030.frml create mode 100644 DevResources/full-examples/bdgt05/view/frm/grids/grid-construct-budget.frml create mode 100644 DevResources/full-examples/bdgt05/view/frm/grids/grid-equipt-budget.frml create mode 100644 DevResources/full-examples/bdgt05/view/frm/grids/grid-manage-budget.frml create mode 100644 DevResources/full-examples/bdgt05/view/frm/grids/grid-proj-budget.frml create mode 100644 DevResources/full-examples/bdgt05/view/frm/grids/grid-routine-budget.frml create mode 100644 DevResources/full-examples/bdgt05/view/frm/grids/grid-stratigy-item.frml create mode 100644 DevResources/full-examples/bdgt05/view/frm/grids/grid-stratigy.frml create mode 100644 DevResources/full-examples/bdgt05/view/frm/grids/grid-work-budget.frml create mode 100644 DevResources/full-examples/bdgt06/defs/ajax.xml create mode 100644 DevResources/full-examples/bdgt06/view/bgt0601010-general.jsp create mode 100644 DevResources/full-examples/bdgt06/view/bgt0601010.jsp create mode 100644 DevResources/full-examples/bdgt06/view/bgt0601020-budget.jsp create mode 100644 DevResources/full-examples/bdgt06/view/bgt0601020.jsp create mode 100644 DevResources/full-examples/bdgt06/view/frm/bdgt-0601010.frml create mode 100644 DevResources/full-examples/bdgt06/view/frm/bdgt-0601010/construct.frml create mode 100644 DevResources/full-examples/bdgt06/view/frm/bdgt-0601010/equipt.frml create mode 100644 DevResources/full-examples/bdgt06/view/frm/bdgt-0601010/general.frml create mode 100644 DevResources/full-examples/bdgt06/view/frm/bdgt-0601010/manage.frml create mode 100644 DevResources/full-examples/bdgt06/view/frm/bdgt-0601010/routine.frml create mode 100644 DevResources/full-examples/bdgt06/view/frm/bdgt-0601020-budget.frml create mode 100644 DevResources/full-examples/bdgt06/view/frm/bdgt-0601020.frml create mode 100644 DevResources/full-examples/bdgt06/view/frm/grids/grid-construct-budget.frml create mode 100644 DevResources/full-examples/bdgt06/view/frm/grids/grid-equipt-budget.frml create mode 100644 DevResources/full-examples/bdgt06/view/frm/grids/grid-manage-budget.frml create mode 100644 DevResources/full-examples/bdgt06/view/frm/grids/grid-proj-budget.frml create mode 100644 DevResources/full-examples/bdgt06/view/frm/grids/grid-routine-budget.frml create mode 100644 DevResources/full-examples/bdgt06/view/frm/grids/grid-stratigy-item.frml create mode 100644 DevResources/full-examples/bdgt06/view/frm/grids/grid-stratigy.frml create mode 100644 DevResources/full-examples/bdgt06/view/frm/grids/grid-work-budget.frml create mode 100644 entities.json create mode 100644 mempalace.yaml diff --git a/.intellijPlatform/coroutines-javaagent-legacy.jar b/.intellijPlatform/coroutines-javaagent-legacy.jar index 06fd3bdedd0d70127c35d1d71c58a4f3ee806ee9..4ec9da5a88a2b71dde8d35119f41e665c94604ea 100644 GIT binary patch delta 28 hcmeBU>SN*!@MdNaVc_84U`R^pn#jA68AKiQ1prm~2Z;ax delta 28 hcmeBU>SN*!@MdNaVc_84V0gNzeIoBhW)OAI7XW0{2`K;o diff --git a/.intellijPlatform/self-update.lock b/.intellijPlatform/self-update.lock index 42345ef..01ad1ac 100644 --- a/.intellijPlatform/self-update.lock +++ b/.intellijPlatform/self-update.lock @@ -1 +1 @@ -2026-04-07 \ No newline at end of file +2026-04-10 \ No newline at end of file diff --git a/DevResources/dynform-exam.frml b/DevResources/dynform-exam.frml new file mode 100644 index 0000000..09eace5 --- /dev/null +++ b/DevResources/dynform-exam.frml @@ -0,0 +1,397 @@ + + + + + APP + V_ACTIVITY_TREE + PROJ_ID,ACM_CODE + + + + FROM BGT.V_ACTIVITY_TREE ACTT + INNER JOIN ( SELECT DISTINCT ACM.ACM_CODE + FROM BUD.ACTIVITY_M ACM + INNER JOIN BUD.ACTIVITY_CTRL_H ACH ON ACM.ACM_CODE = ACH.ACH_CODE + START WITH ACM.ACM_CODE IN (SELECT ACM_CODE FROM PROJECT_BUDGETS PJBD WHERE PROJ_ID = :PROJ_ID) + CONNECT BY PRIOR ACH.ACH_CTRL_CODE = ACH.ACH_CODE) FLTR ON FLTR.ACM_CODE = ACTT.ACM_CODE + LEFT OUTER JOIN PROJECT_BUDGETS PJBG ON PJBG.PROJ_ID=:PROJ_ID AND PJBG.ACM_CODE = ACTT.ACM_CODE + + ORDER BY ACTT.ACM_SEQ + + + + + APP + PROJECT_BUDGETS + PROJ_ID,ACM_CODE + + + FROM PROJECT_BUDGETS + ORDER BY PROJ_ID,PBDG_ID + + + + + + + + + + + + APP + PROJECT_TARGETS + PROJ_ID,ACM_CODE + + + FROM PROJECT_TARGETS + ORDER BY PROJ_ID,ACM_CODE + + + + + + + + + + + + + + + + + + + + + + + APP + ATTACH_FILES + PROJ_ID,ATFI_SEQ,ACM_CODE + + + FROM ATTACH_FILES + ORDER BY PROJ_ID,ATFI_SEQ,ACM_CODE + + + + + + + + + + + + + + + + +
+ +
+ 0 + + + + + {return $(`
${value}
`);}]]> +
+
+ + + {return $(`
${value}
`);}]]> +
+
+ + + { return (row["node_type"]==="C")?value:""} + ]]> + + + + + + {return row["node_type"] !== "C"}]]> + {return row["node_type"] !== "C"}]]> + {return row["node_type"] !== "C"}]]> + + +
+ + + + + + + + + + + + + + + + + +