Joget DX 8 Stable Released
The stable release for Joget DX 8 is now available, with a focus on UX and Governance.
How can we create a final row that displays aggregated values of the rest of the rows? This is especially important when it comes to reporting. One can design the form such that it serves as a report rather than a means of data entry.
The final row is not a mere record row but serves as a summary of the record rows.
เราจะสร้างแถวสุดท้ายที่แสดงมูลค่ารวมของแถวที่เหลือได้อย่างไร สิ่งนี้สำคัญเป็นอย่างยิ่งเมื่อพูดถึงการรายงาน หนึ่งสามารถออกแบบแบบฟอร์มที่ทำหน้าที่เป็นรายงานแทนที่จะเป็นค่าเฉลี่ยของการป้อนข้อมูล
แถวสุดท้ายไม่ใช่แถวระเบียนเพียง แต่ทำหน้าที่เป็นบทสรุปของแถวระเบียน
For this to happen, there are many ways to do it but we will focus on the dataset data loaded from its binder. First, we can inspect how data is constructed.
สำหรับสิ่งนี้เกิดขึ้นมีหลายวิธีที่จะทำ แต่เราจะมุ่งเน้นไปที่ชุดข้อมูลที่โหลดจากสารยึดเกาะของมัน อันดับแรกเราสามารถตรวจสอบวิธีการสร้างข้อมูล
The element in question here is a basic grid, let's click into it.
องค์ประกอบที่เป็นปัญหาในที่นี้คือกริดพื้นฐานลองคลิกเข้าไปดู
The grid is using a pair of identical load and store binder (which makes sense most of the time so that data is stored and loaded from the same source). We can opt to use JDBC Binder as the load binder so that we can gain full control on how dataset is returned and constructed.
With the ability to define our own SQL query, we can then compose a query that will always return the last row as an aggregated values row.
กริดใช้คู่โหลดที่เหมือนกันและที่เก็บสารยึดเกาะ (ซึ่งใช้เวลาส่วนใหญ่ในการเก็บและโหลดข้อมูลจากแหล่งเดียวกัน) เราสามารถเลือกใช้ JDBC Binder เป็น load binder เพื่อให้เราสามารถควบคุมได้อย่างเต็มที่ว่าชุดข้อมูลจะถูกส่งคืนและสร้างอย่างไร
ด้วยความสามารถในการกำหนดแบบสอบถาม SQL ของเราเองเราสามารถสร้างแบบสอบถามที่จะกลับแถวสุดท้ายเป็นแถวค่ารวม
select c_name, c_quantity, c_price, c_parent_id from app_fd_purchase_items where c_parent_id = ? union select "SUM", sum(c_quantity), sum(c_price), c_parent_id from app_fd_purchase_items where c_parent_id = ?
And this is a sample result by running them on a command line interface.
และนี่คือผลลัพธ์ตัวอย่างโดยการรันบนอินเตอร์เฟสบรรทัดคำสั่ง
+--------+------------+---------+---------------------------------+ | c_name | c_quantity | c_price | c_parent_id | +--------+------------+---------+---------------------------------+ | pen | 1 | 10 | 1177_purchaseRequition_purchase | | pencil | 2 | 20 | 1177_purchaseRequition_purchase | | SUM | 3 | 30 | 1177_purchaseRequition_purchase | +--------+------------+---------+---------------------------------+
However, it does not actually play out well with the JDBC Binder as it is only expecting one parameter in the query. Our union query has 2 parameters.
In order to overcome this, we can create a stored procedure in the database instead.
อย่างไรก็ตามมันไม่ได้เล่นได้ดีกับ JDBC Binder เนื่องจากมันคาดหวังเพียงหนึ่งพารามิเตอร์ในแบบสอบถาม แบบสอบถามแบบร่วมของเรามี 2 พารามิเตอร์
เพื่อเอาชนะสิ่งนี้เราสามารถสร้างโพรซีเดอร์ที่เก็บไว้ในฐานข้อมูลแทน
DELIMITER // CREATE PROCEDURE purchase_items_dataset (IN recordId CHAR(255)) BEGIN select c_name, c_quantity, c_price, c_parent_id from app_fd_purchase_items where c_parent_id = recordId union select "SUM", sum(c_quantity), sum(c_price), c_parent_id from app_fd_purchase_items where c_parent_id = recordId; END // DELIMITER ;
With the stored procedure to return the appropriate dataset that we need, we will just need to call it from the JDBC Binder.
ด้วยโพรซีเดอร์ที่เก็บไว้เพื่อส่งคืนชุดข้อมูลที่เหมาะสมที่เราต้องการเราจะต้องเรียกมันจาก JDBC Binder
This is the outcome.
นี่คือผลลัพธ์