: / หน้าหลัก / ฐานความรู้ / ERPNext Frappe Document Controller

>ERPNext Frappe Document Controller

Created :2024-09-10

ใน 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

อ้างอิง

อยากได้คนช่วยคิดและลงมือทำ?เราพร้อมช่วยคุณวางแผนและลงมือทำให้ง่าย และรวดเร็ว
จ้างเรา