ใน ERPNext และ Frappe Framework, hook ในวงจรของเอกสารช่วยให้นักพัฒนาสามารถควบคุมพฤติกรรมของเอกสารในขั้นตอนต่างๆ เช่น การบันทึก (save), การส่ง (submit), การยกเลิก (cancel), หรือการอัปเดต (update) ได้
ผมใช้คำว่า Hooks, Events, และ Methods สลับกันไปมา โดยทั้งหมดนี้หมายถึงแนวคิดเดียวกัน: การแทรกโค้ด (logic) เข้าไปในแต่ละช่วงเวลาของเอกสาร
แต่ละเหตุการณ์ (event) จะถูกเรียกใช้งานตาม action ที่เกิดขึ้น เช่น save
, submit
, cancel
หรือ update
⚠️ สำคัญ: หากคุณแก้ไขเอกสาร (หรือเอกสารอื่น) หลังจาก
db_insert
หรือdb_update
การเปลี่ยนแปลงเหล่านั้นจะไม่ถูกบันทึกโดยอัตโนมัติ คุณต้องเรียกfrappe.db.commit()
เอง
การใช้งาน
เอกสารที่สร้างขึ้นเอง
หากต้องการกำหนดตัวควบคุมสำหรับ DocType ที่คุณสร้างเอง ให้สืบทอดคลาสจาก Document และเขียนฟังก์ชั่นที่ต้องการ
import frappe
from frappe.model.document import Document
class Person(Document):
def validate(self):
self.mark_as_worlds_best_boss()
def mark_as_worlds_best_boss(self):
if self.name == "Michael Scott"
self.is_worlds_best_boss = True
Frappe จะเรียกใช้งาน Method validate() ตาม Flow ที่ได้ระบุไว้ด้านบน
ใช้กับเอกสารมาตรฐานของ ERPNext#
หากคุณต้องการเพิ่มโค้ดตรรกะให้กับ DocType มาตรฐานของ ERPNext (เช่น Sales Order, User, ฯลฯ) ให้ใช้ hooks.py ในแอปของคุณ
doc_events = {
"User": {
"validate": "dunder_mifflin.utils.doc_events.mark_as_worlds_best_boss",
},
}
จากนั้นสร้างฟังก์ชั่นดังนี้
def mark_as_worlds_best_boss(doc, method):
if doc.name == "Michael Scott":
doc.is_worlds_best_boss = True
อ้างอิง