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:
@@ -0,0 +1,314 @@
|
||||
<?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-MASTER">
|
||||
<SCHEMA>APP</SCHEMA>
|
||||
<TABLENAME>PROJECT_BUDGETS</TABLENAME>
|
||||
<KEYFIELDS>PROJ_ID,ACM_CODE</KEYFIELDS>
|
||||
<SQL>
|
||||
<SELECT>SELECT PBDG.PROJ_ID
|
||||
, PBDG.PBDG_ID
|
||||
, PBDG.ACM_CODE
|
||||
, BUD.GET_ACTIVITY(PBDG.ACM_CODE) ACM_NAME
|
||||
, PBDG.PBDG_TOTAL
|
||||
, PBDG.PBDG_COUNT
|
||||
, PBDG.PBDG_ASSET_TYPE
|
||||
, PBDG.PBDG_REASON
|
||||
, PMAS.PROJ_YEAR
|
||||
, PMAS.STM_CODE
|
||||
, PMAS.PROJ_YEAR||'/'||PMAS.STM_CODE||'/'||PBDG.PROJ_ID FILEPATH
|
||||
</SELECT>
|
||||
<FROM>FROM PROJECT_BUDGETS PBDG
|
||||
INNER JOIN PROJECTS PMAS ON PMAS.PROJ_ID = PBDG.PROJ_ID
|
||||
</FROM>
|
||||
<ORDER>ORDER BY PROJ_ID,PBDG_ID</ORDER>
|
||||
</SQL>
|
||||
<FIELDS>
|
||||
<FIELD NAME="PROJ_ID" TYPE="TEXT" LABEL="รหัสอ้างอิงโครงการ" WIDTH="32" ORIGIN="PBDG.PROJ_ID"/>
|
||||
<FIELD NAME="PBDG_ID" TYPE="TEXT" LABEL="รหัสงบประมาณโครงการ" WIDTH="32" ORIGIN="PBDG.PROJ_ID"/>
|
||||
<FIELD NAME="ACM_CODE" TYPE="TEXT" LABEL="รหัสกิจกรรม" WIDTH="20" ORIGIN="PBDG.ACM_CODE"/>
|
||||
<FIELD NAME="PBDG_TOTAL" TYPE="NUMBER" LABEL="ยอดรวม" WIDTH="15"/>
|
||||
<FIELD NAME="PBDG_COUNT" TYPE="NUMBER" LABEL="จำนวนกิจกรรม" WIDTH="15"/>
|
||||
<FIELD NAME="PBDG_ASSET_TYPE" TYPE="TEXT" LABEL="ประเภทครุภัณฑ์" WIDTH="25"/>
|
||||
<FIELD NAME="PBDG_REASON" TYPE="TEXT" LABEL="เหตุผลในการจัดหา" WIDTH="2000"/>
|
||||
</FIELDS>
|
||||
</DATASET>
|
||||
|
||||
<DATASET ID="DS-PROJECT-TARGETS">
|
||||
<SCHEMA>APP</SCHEMA>
|
||||
<TABLENAME>PROJECT_TARGETS</TABLENAME>
|
||||
<KEYFIELDS>PROJ_ID,ACM_CODE</KEYFIELDS>
|
||||
<SQL>
|
||||
<SELECT>SELECT PROJ_ID
|
||||
, ACM_CODE
|
||||
, PWMT_UNIT
|
||||
, PTGT_QT_0101
|
||||
, PTGT_QT_0102
|
||||
, PTGT_QT_0201
|
||||
, PTGT_QT_0202
|
||||
, PTGT_QT_0301
|
||||
, PTGT_QT_0302
|
||||
, PTGT_QT_0401
|
||||
, PTGT_QT_0402
|
||||
</SELECT>
|
||||
<FROM>FROM PROJECT_TARGETS</FROM>
|
||||
<ORDER>ORDER BY PROJ_ID,ACM_CODE</ORDER>
|
||||
</SQL>
|
||||
<FIELDS>
|
||||
<FIELD NAME="PROJ_ID" TYPE="TEXT" LABEL="รหัสอ้างอิงโครงการ" WIDTH="32"/>
|
||||
<FIELD NAME="ACM_CODE" TYPE="TEXT" LABEL="รหัสกิจกรรม" WIDTH="33"/>
|
||||
<FIELD NAME="PWMT_UNIT" TYPE="TEXT" LABEL="หน่วยนับ" WIDTH="32"/>
|
||||
<FIELD NAME="PTGT_QT_0101" TYPE="NUMBER" LABEL="เป้าหมายไตรมาส 1 (แผน)" WIDTH="15"/>
|
||||
<FIELD NAME="PTGT_QT_0102" TYPE="NUMBER" LABEL="เป้าหมายไตรมาส 1 (ผล)" WIDTH="15"/>
|
||||
<FIELD NAME="PTGT_QT_0201" TYPE="NUMBER" LABEL="เป้าหมายไตรมาส 2 (แผน)" WIDTH="15"/>
|
||||
<FIELD NAME="PTGT_QT_0202" TYPE="NUMBER" LABEL="เป้าหมายไตรมาส 2 (ผล)" WIDTH="15"/>
|
||||
<FIELD NAME="PTGT_QT_0301" TYPE="NUMBER" LABEL="เป้าหมายไตรมาส 3 (แผน)" WIDTH="15"/>
|
||||
<FIELD NAME="PTGT_QT_0302" TYPE="NUMBER" LABEL="เป้าหมายไตรมาส 3 (ผล)" WIDTH="15"/>
|
||||
<FIELD NAME="PTGT_QT_0401" TYPE="NUMBER" LABEL="เป้าหมายไตรมาส 4 (แผน)" WIDTH="15"/>
|
||||
<FIELD NAME="PTGT_QT_0402" TYPE="NUMBER" LABEL="เป้าหมายไตรมาส 4 (ผล)" WIDTH="15"/>
|
||||
<FIELD NAME="CREATE_BY" TYPE="TEXT" LABEL="ผู้สร้างรายการ" WIDTH="50"/>
|
||||
<FIELD NAME="CREATE_TIME" TYPE="DATE" LABEL="เวลาที่สร้างรายการ" WIDTH="0"/>
|
||||
<FIELD NAME="UPDATE_BY" TYPE="TEXT" LABEL="ผู้แก้ไขรายการล่าสุด" WIDTH="50"/>
|
||||
<FIELD NAME="UPDATE_TIME" TYPE="DATE" LABEL="เวลาที่แก้ไขรายการล่าสุด" WIDTH="0"/>
|
||||
</FIELDS>
|
||||
<MASTER-DATA DATASET-ID="DS-MASTER" MASTER-FIELDS="PROJ_ID,ACM_CODE" DETAIL-FIELDS="PROJ_ID,ACM_CODE"/>
|
||||
</DATASET>
|
||||
|
||||
<DATASET ID="DS-BUDGET-ITEMS">
|
||||
<SCHEMA>APP</SCHEMA>
|
||||
<TABLENAME>PROJECT_BUDGET_ITEMS</TABLENAME>
|
||||
<KEYFIELDS>PROJ_ID,BGM_CODE,PBDG_ID</KEYFIELDS>
|
||||
<SQL>
|
||||
<SELECT>SELECT PROJ_ID
|
||||
, PBDG_ID
|
||||
, BGM_CODE
|
||||
, PBGI_QT_01
|
||||
, PBGI_QT_02
|
||||
, PBGI_QT_03
|
||||
, PBGI_QT_04
|
||||
, PBGI_QTY
|
||||
, PBGI_COST
|
||||
, PBGI_FREQ
|
||||
, PBGI_ASSET_TYPE
|
||||
, PBGI_REPLACE
|
||||
, PBGI_ADDITION
|
||||
, PBGI_ACQUIRE
|
||||
, PBGI_TOTAL
|
||||
, PBGI_REASON
|
||||
</SELECT>
|
||||
<FROM>FROM PROJECT_BUDGET_ITEMS</FROM>
|
||||
<ORDER>ORDER BY PROJ_ID,BGM_CODE,PBDG_ID</ORDER>
|
||||
</SQL>
|
||||
<FIELDS>
|
||||
<FIELD NAME="PROJ_ID" TYPE="TEXT" LABEL="pbgi.id" WIDTH="32"/>
|
||||
<FIELD NAME="PBDG_ID" TYPE="TEXT" LABEL="pbgi.pbdg_id" WIDTH="32"/>
|
||||
<FIELD NAME="BGM_CODE" TYPE="TEXT" LABEL="pbgi.bgm_code" WIDTH="20"/>
|
||||
<FIELD NAME="PBGI_QT_01" TYPE="NUMBER" LABEL="pwbg.quotr_01" WIDTH="15"/>
|
||||
<FIELD NAME="PBGI_QT_02" TYPE="NUMBER" LABEL="pwbg.quotr_02" WIDTH="15"/>
|
||||
<FIELD NAME="PBGI_QT_03" TYPE="NUMBER" LABEL="pwbg.quotr_03" WIDTH="15"/>
|
||||
<FIELD NAME="PBGI_QT_04" TYPE="NUMBER" LABEL="pwbg.quotr_04" WIDTH="15"/>
|
||||
<FIELD NAME="PBGI_QTY" TYPE="NUMBER" LABEL="pbgi.qty" WIDTH="10"/>
|
||||
<FIELD NAME="PBGI_COST" TYPE="NUMBER" LABEL="pbgi.cost" WIDTH="15"/>
|
||||
<FIELD NAME="PBGI_FREQ" TYPE="NUMBER" LABEL="pbgi.freq" WIDTH="10"/>
|
||||
<FIELD NAME="PBGI_ASSET_TYPE" TYPE="TEXT" LABEL="pbgi.asset_type" WIDTH="10"/>
|
||||
<FIELD NAME="PBGI_REPLACE" TYPE="NUMBER" LABEL="pbgi.replace" WIDTH="10"/>
|
||||
<FIELD NAME="PBGI_ADDITION" TYPE="NUMBER" LABEL="pbgi.addition" WIDTH="10"/>
|
||||
<FIELD NAME="PBGI_ACQUIRE" TYPE="NUMBER" LABEL="pbgi.acquire" WIDTH="10"/>
|
||||
<FIELD NAME="PBGI_TOTAL" TYPE="NUMBER" LABEL="pbgi.total" WIDTH="15"/>
|
||||
<FIELD NAME="PBGI_REASON" TYPE="TEXT" LABEL="pbgi.reason" WIDTH="4000"/>
|
||||
<FIELD NAME="CREATE_BY" TYPE="TEXT" LABEL="sys.create_by" WIDTH="50"/>
|
||||
<FIELD NAME="CREATE_TIME" TYPE="DATE" LABEL="sys.create_time" WIDTH="0"/>
|
||||
<FIELD NAME="UPDATE_BY" TYPE="TEXT" LABEL="sys.update_by" WIDTH="50"/>
|
||||
<FIELD NAME="UPDATE_TIME" TYPE="DATE" LABEL="sys.update_time" WIDTH="0"/>
|
||||
</FIELDS>
|
||||
<MASTER-DATA DATASET-ID="DS-MASTER" MASTER-FIELDS="PROJ_ID,PBDG_ID" DETAIL-FIELDS="PROJ_ID,PBDG_ID"/>
|
||||
</DATASET>
|
||||
</DATASETS>
|
||||
|
||||
<FORM>
|
||||
<FORM_ENTRY DATAID="DS-MASTER" SAVE="Y" RETURN="Y">
|
||||
<FIELDS>
|
||||
<FIELD NAME="PROJ_ID" INPUTTYPE="HIDDEN"/>
|
||||
<FIELD NAME="PBDG_ID" INPUTTYPE="HIDDEN"/>
|
||||
<FIELD NAME="ACM_CODE" CAPTION="project.equipt_code" INPUTTYPE="TEXT" REQUIRE="Y" READONLY="Y"/>
|
||||
<FIELD NAME="ACM_NAME" CAPTION="project.equipt_name" INPUTTYPE="TEXT" REQUIRE="Y" READONLY="Y"/>
|
||||
<FIELD NAME="PROJ_YEAR" CAPTION="project.year" INPUTTYPE="TEXT" REQUIRE="Y" READONLY="Y"/>
|
||||
<FIELD NAME="PBDG_ASSET_TYPE" CAPTION="pbge.asset_type" INPUTTYPE="COMBOBOX" REQUIRE="Y">
|
||||
<LIST-OPTION TABLE="REFER_CODE" TEXT="RFC_DESC" VALUE="RFC_CODE" ORDER="RFC_ORDER" FILTER="RFG_GRP='ASSET-TYPE'" FIRSTLIST="@{CAPTION}"/>
|
||||
</FIELD>
|
||||
<FIELD NAME="PBDG_REASON" CAPTION="pbge.reason" INPUTTYPE="TEXT" />
|
||||
|
||||
<FIELD NAME="FILE_BOX_01" CAPTION="pbge.quotaion_file 1" INPUTTYPE="FILE-BOX" DATATYPE="TEXT">
|
||||
<FILE-BOX FILE-TYPE="budget" FILE-ACCEPTS="pdf,docx,xlsx,jpeg,jpg,png"
|
||||
UPLOAD-URL="/file-upload.jbx" FILE-URL="/get-file.jbx"
|
||||
DEFAULT-NAME="@{filepath}/@{acm_code}/file-01"/>
|
||||
</FIELD>
|
||||
<FIELD NAME="FILE_BOX_02" CAPTION="pbge.quotaion_file 2" INPUTTYPE="FILE-BOX">
|
||||
<FILE-BOX FILE-TYPE="budget" FILE-ACCEPTS="pdf,docx,xlsx,jpeg,jpg,png"
|
||||
UPLOAD-URL="/file-upload.jbx" FILE-URL="/get-file.jbx"
|
||||
DEFAULT-NAME="@{filepath}/@{acm_code}/file-02"/>
|
||||
</FIELD>
|
||||
<FIELD NAME="FILE_BOX_03" CAPTION="pbge.quotaion_file 3" INPUTTYPE="FILE-BOX">
|
||||
<FILE-BOX FILE-TYPE="budget" FILE-ACCEPTS="pdf,docx,xlsx,jpeg,jpg,png"
|
||||
UPLOAD-URL="/file-upload.jbx" FILE-URL="/get-file.jbx"
|
||||
DEFAULT-NAME="@{filepath}/@{acm_code}/file-03"/>
|
||||
</FIELD>
|
||||
|
||||
<SECTION ID="SECT-PROJECT-TARGET">
|
||||
<FIELD NAME="PBDG_TOTAL" INPUTTYPE="HIDDEN"/>
|
||||
<FIELD NAME="PBDG_COUNT" INPUTTYPE="HIDDEN"/>
|
||||
<FIELD NAME="PWMT_UNIT" CAPTION="project.unit" INPUTTYPE="TEXT" READONLY="Y"></FIELD>
|
||||
<FIELD NAME="PTGT_QT_0101" INPUTTYPE="TEXT" DATATYPE="NUMBER" CAPTION="project.quoter 1"/>
|
||||
<FIELD NAME="PTGT_QT_0201" INPUTTYPE="TEXT" DATATYPE="NUMBER" CAPTION="project.quoter 2"/>
|
||||
<FIELD NAME="PTGT_QT_0301" INPUTTYPE="TEXT" DATATYPE="NUMBER" CAPTION="project.quoter 3"/>
|
||||
<FIELD NAME="PTGT_QT_0401" INPUTTYPE="TEXT" DATATYPE="NUMBER" CAPTION="project.quoter 4"/>
|
||||
<FIELD NAME="QT_TOTAL_01" INPUTTYPE="TEXT" DATATYPE="NUMBER" CAPTION="project.total" READONLY="Y"/>
|
||||
</SECTION>
|
||||
|
||||
<SECTION ID="SECT-BUDGET-ITEMS">
|
||||
<FIELD NAME="VBGM_CODE" CAPTION="pwbg.bgm_code" INPUTTYPE="TEXT" READONLY="Y"/>
|
||||
<FIELD NAME="BGM_CODE" CAPTION="pwbg.bgm_name" INPUTTYPE="COMBOBOX" REQUIRE="Y">
|
||||
<AJAX-OPTION URL="/api-data.jbx" DATASET="DS-EQUIPT-BUDGET" VALUE-FIELD="BGM_CODE" TEXT-FIELD="BGM_NAME">
|
||||
<UPDATE-FIELDS>
|
||||
<FIELD SRC="BGM_CODE" TARGET="VBGM_CODE"></FIELD>
|
||||
<FIELD SRC="BGM_NAME" TARGET="BGM_NAME"></FIELD>
|
||||
</UPDATE-FIELDS>
|
||||
</AJAX-OPTION>
|
||||
<LIST-OPTION>
|
||||
<FORMATTER><![CDATA[
|
||||
(data) => {
|
||||
console.log("call formater with ", data);
|
||||
return $(`<div><label class="offset-${data.node_level}">[${data.bgm_code}]</label> : <label>${data.bgm_name}</label></div>`);
|
||||
}
|
||||
]]></FORMATTER>
|
||||
</LIST-OPTION>
|
||||
</FIELD>
|
||||
|
||||
<FIELD NAME="PBGI_QT_01" CAPTION="pbge.origin" INPUTTYPE="TEXT" DATATYPE="NUMBER"/>
|
||||
|
||||
<FIELD NAME="PBGI_REPLACE" CAPTION="pbge.replace" INPUTTYPE="TEXT" DATATYPE="NUMBER" CLASS-NAME="equipt-qty equipt-item"/>
|
||||
<FIELD NAME="PBGI_ADDITION" CAPTION="pbge.addition" INPUTTYPE="TEXT" DATATYPE="NUMBER" CLASS-NAME="equipt-qty equipt-item"/>
|
||||
<FIELD NAME="PBGI_ACQUIRE" CAPTION="pbge.acquire" INPUTTYPE="TEXT" DATATYPE="NUMBER" CLASS-NAME="equipt-qty equipt-item"/>
|
||||
<FIELD NAME="PBGI_QTY" CAPTION="pbge.qty" INPUTTYPE="TEXT" DATATYPE="NUMBER" READONLY="Y" CLASS-NAME="equipt-item"/>
|
||||
|
||||
<FIELD NAME="PBGI_COST" CAPTION="pbge.cost" INPUTTYPE="TEXT" DATATYPE="NUMBER" CLASS-NAME=" equipt-item"/>
|
||||
<FIELD NAME="PBGI_TOTAL" CAPTION="pbge.total" INPUTTYPE="TEXT" DATATYPE="NUMBER" READONLY="Y"/>
|
||||
</SECTION>
|
||||
|
||||
|
||||
</FIELDS>
|
||||
|
||||
<LAYOUT CLASS="block-layout-form">
|
||||
<SECTION ID="SECT-MAIN">
|
||||
<ROW>
|
||||
<FIELD NAME="PROJ_YEAR" LAYOUT_WIDTH="6" OFFSET="4"/>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<FIELD NAME="ACM_CODE" LAYOUT_WIDTH="4"/>
|
||||
<FIELD NAME="ACM_NAME" LAYOUT_WIDTH="18"/>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<FIELD NAME="PBDG_ASSET_TYPE" LAYOUT_WIDTH="4"/>
|
||||
<FIELD NAME="PBDG_REASON" LAYOUT_WIDTH="18"/>
|
||||
</ROW>
|
||||
</SECTION>
|
||||
|
||||
<SECTION ID="SECT-PROJECT-BUTGET" TYPE="DATA-SECTION" DATASET="DS-BUDGET-ITEMS">
|
||||
<ROW ID="ROW-BUDGET-DATA">
|
||||
<FIELD NAME="PBGI_QT_01" LAYOUT_WIDTH="4"/>
|
||||
<FIELD NAME="PBGI_REPLACE" LAYOUT_WIDTH="3"/>
|
||||
<FIELD NAME="PBGI_ADDITION" LAYOUT_WIDTH="3"/>
|
||||
<FIELD NAME="PBGI_ACQUIRE" LAYOUT_WIDTH="3"/>
|
||||
<FIELD NAME="PBGI_QTY" LAYOUT_WIDTH="3"/>
|
||||
<FIELD NAME="PBGI_COST" LAYOUT_WIDTH="3"/>
|
||||
<FIELD NAME="PBGI_TOTAL" LAYOUT_WIDTH="3"/>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<FIELD NAME="VBGM_CODE" LAYOUT_WIDTH="4" OFFSET="4"/>
|
||||
<FIELD NAME="BGM_CODE" LAYOUT_WIDTH="14"/>
|
||||
</ROW>
|
||||
</SECTION>
|
||||
|
||||
<SECTION ID="SECT-PROJECT-TARGET" TYPE="DATA-SECTION" DATASET="DS-PROJECT-TARGETS">
|
||||
<HEADER CLASS="col-24 mg-b-n30 mg-t-16 border-top-1">
|
||||
<![CDATA[<h4 class="ml-3 col-24">@M{project.target}</h4>]]>
|
||||
</HEADER>
|
||||
<ROW>
|
||||
<FIELD NAME="PTGT_QT_0101" LAYOUT_WIDTH="3" OFFSET="4"/>
|
||||
<FIELD NAME="PTGT_QT_0201" LAYOUT_WIDTH="3"/>
|
||||
<FIELD NAME="PTGT_QT_0301" LAYOUT_WIDTH="3"/>
|
||||
<FIELD NAME="PTGT_QT_0401" LAYOUT_WIDTH="3"/>
|
||||
<FIELD NAME="QT_TOTAL_01" LAYOUT_WIDTH="3"/>
|
||||
<FIELD NAME="PWMT_UNIT" LAYOUT_WIDTH="3"/>
|
||||
</ROW>
|
||||
</SECTION>
|
||||
|
||||
<SECTION ID="SECT-QUOTATION-FILE">
|
||||
<HEADER CLASS="col-24 mg-b-n30 mg-t-16 border-top-1">
|
||||
<![CDATA[<h4 class="ml-3 col-24">@M{pbge.quotaion_file}</h4>]]>
|
||||
</HEADER>
|
||||
<ROW>
|
||||
<FIELD NAME="FILE_BOX_01" LAYOUT_WIDTH="12" OFFSET="4"/>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<FIELD NAME="FILE_BOX_02" LAYOUT_WIDTH="12" OFFSET="4"/>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<FIELD NAME="FILE_BOX_03" LAYOUT_WIDTH="12" OFFSET="4"/>
|
||||
</ROW>
|
||||
</SECTION>
|
||||
</LAYOUT>
|
||||
|
||||
<SCRIPT>
|
||||
<DECLARATION>
|
||||
const equiptQty = $$(".equipt-qty");
|
||||
const equiptItem = $$(".equipt-item");
|
||||
const txtEquiptQty = $$("PBGI_QTY");
|
||||
const txtEquiptCost = $$("PBGI_COST");
|
||||
const txtEquiptTotal = $$("PBGI_TOTAL");
|
||||
</DECLARATION>
|
||||
|
||||
<EVENTS>
|
||||
<BEFORE-SAVE><![CDATA[
|
||||
({form, data}) => {
|
||||
console.log("before save data");
|
||||
if ($PageCtx.$action === "add") {
|
||||
let $data = $PageCtx.main.pageData;
|
||||
let budgetId = $$("VACM_CODE").val();
|
||||
$$("PBDG_ID").val(budgetId);
|
||||
}
|
||||
|
||||
$$("PBDG_COUNT").val(txtEquiptQty.number());
|
||||
$$("PBDG_TOTAL").val(txtEquiptTotal.number());
|
||||
|
||||
Object.assign(data, form.mainForm.jsonData());
|
||||
}
|
||||
]]></BEFORE-SAVE>
|
||||
</EVENTS>
|
||||
|
||||
<INITIALIZE>
|
||||
<![CDATA[
|
||||
const quoterSum = () => {
|
||||
let summary = 0;
|
||||
for (let qt = 1; qt <= 4; qt++) {
|
||||
summary += $$(`PTGT_QT_0${qt}01`).number();
|
||||
}
|
||||
$$(`QT_TOTAL_01`).val(formatNumber(summary));
|
||||
}
|
||||
|
||||
$$("^PTGT_QT_").on("change", quoterSum);
|
||||
|
||||
const equiptSum = ()=>{
|
||||
let sumEquipt = equiptQty.sum();
|
||||
txtEquiptQty.val(formatNumber(sumEquipt));
|
||||
let equiptCost = txtEquiptCost.number();
|
||||
txtEquiptTotal.val(formatNumber(sumEquipt*equiptCost));
|
||||
}
|
||||
equiptItem.on("change",equiptSum);
|
||||
|
||||
]]>
|
||||
</INITIALIZE>
|
||||
</SCRIPT>
|
||||
</FORM_ENTRY>
|
||||
</FORM>
|
||||
</FORMS>
|
||||
Reference in New Issue
Block a user