PlusMagi's Blog By Pitt Phunsanit Database joGet: Pending Process Activity and Assignees

joGet: Pending Process Activity and Assignees

ในฐานะ System Specialist และ Senior Architect การบริหารจัดการกระบวนการทางธุรกิจ (BPM) ในระบบ joGet จำเป็นต้องมีการติดตามสถานะของ Workflow หรือ Process Activity ที่กำลังรอการดำเนินการ (Pending) อย่างแม่นยำ แม้ว่าระบบจะมี User Interface (UI) สำหรับตรวจสอบสถานะ แต่การเข้าถึงข้อมูลดิบผ่านการเขียน Query ภาษา SQL โดยเฉพาะอย่างยิ่งเมื่อใช้พลังของ PostgreSQL จะช่วยให้เราสามารถสร้าง Dashboard หรือ Utility Tool ที่มีความยืดหยุ่น ประสิทธิภาพ และความสามารถในการวิเคราะห์ที่เหนือกว่ามาก

⚙️ หลักการทำงาน: การระบุ Pending Activity ด้วย PostgreSQL

หัวใจสำคัญของการดึงข้อมูลกิจกรรมที่รอดำเนินการคือการเชื่อมโยงข้อมูลจากตารางหลักของเอกสาร (เช่น app_fd_hr_expense_claim) เข้ากับตารางกิจกรรม (SHKActivities) และตารางสถานะกิจกรรม (SHKActivityStates) เราต้องกำหนดเงื่อนไขที่ชัดเจนว่า Process นั้นอยู่ในสถานะที่บ่งชี้ว่ายังไม่เสร็จสมบูรณ์ เช่น Open หรือ Not Started

เนื่องจาก PostgreSQL มีความสามารถในการจัดการข้อมูลเชิงโครงสร้างและกึ่งโครงสร้าง (Semi-structured data) ได้อย่างยอดเยี่ยม เราจึงใช้ฟังก์ชันขั้นสูงอย่าง STRING_AGG เพื่อรวมรายชื่อผู้รับผิดชอบ (Assignees) หลายคนให้เป็นรูปแบบข้อความเดียว และใช้การกำหนด Type Casting เพื่อให้ได้ผลลัพธ์ที่สมบูรณ์พร้อมสำหรับการนำไปใช้งานต่อ

💡 ตัวอย่าง PostgreSQL Query สำหรับดึงรายการกิจกรรมที่รอดำเนินการ

Query นี้ถูกออกแบบมาเพื่อดึงข้อมูลกิจกรรมที่ยังไม่เสร็จสิ้น พร้อมรวบรวมรายชื่อผู้รับผิดชอบทั้งหมดในรูปแบบที่พร้อมนำไปแสดงผล (Comma-separated list) โดยมีการ Join ตารางที่เกี่ยวข้องทั้งหมดเข้าด้วยกัน:

SQL

SQL

SELECT
    t1.doc_id, 
    t1.doc_type, 
    t2.activity_name, 
    t3.status_name, 
    STRING_AGG(DISTINCT t2.assignee_name, ', ') AS assignees_list
FROM
    app_fd_hr_expense_claim t1
JOIN
    SHKActivities t2 ON t1.doc_id = t2.doc_id
JOIN
    SHKActivityStates t3 ON t2.activity_id = t3.activity_id
WHERE
    t3.status_name IN ('Open', 'Not Started')
GROUP BY
    t1.doc_id, t1.doc_type, t2.activity_name, t3.status_name
ORDER BY
    t1.doc_id, t2.activity_name;

🚀 ประสิทธิภาพและความยืดหยุ่นในการใช้งาน

การใช้ PostgreSQL Query ในลักษณะนี้ไม่เพียงแต่ช่วยให้เราทราบว่ากิจกรรมใดที่รอดำเนินการเท่านั้น แต่ยังช่วยให้เราสามารถคำนวณเมตริกสำคัญทางธุรกิจได้ด้วย เช่น จำนวนวันเฉลี่ยที่เอกสารค้างอยู่ในสถานะ Pending, หรือการระบุผู้รับผิดชอบที่ทำงานล่าช้าที่สุด

ด้วยการเข้าถึงข้อมูลระดับฐานข้อมูลโดยตรง ทำให้เราสามารถสร้างระบบแจ้งเตือน (Notification System) หรือ Dashboard ที่ปรับแต่งได้ตามความต้องการทางธุรกิจได้อย่างสมบูรณ์แบบ ซึ่งเป็นสิ่งที่ UI มาตรฐานของระบบ BPM ทั่วไปไม่สามารถทำได้

✅ บทสรุป

การเข้าใจโครงสร้างข้อมูลของระบบ joGet และการใช้ความสามารถขั้นสูงของ PostgreSQL เช่น STRING_AGG ทำให้เราสามารถเปลี่ยนข้อมูลดิบที่ซับซ้อนให้กลายเป็นข้อมูลเชิงลึกที่พร้อมนำไปใช้ในการตัดสินใจทางธุรกิจ การใช้ Query ที่ถูกต้องและมีประสิทธิภาพเช่นนี้คือหัวใจสำคัญของการเป็น System Specialist ระดับ Senior Architect ในการเพิ่มประสิทธิภาพของกระบวนการทางธุรกิจโดยรวม