Bunchee
Back to Blog

แก้ปัญหา Custom? Always True เมื่อสร้าง DocType ใน Frappe 16

วิธีแก้ไขปัญหา Custom checkbox ติดอยู่ตลอดเมื่อสร้าง DocType ใหม่ใน Frappe 16 แม้เปิด Developer Mode แล้ว - ต้องใช้ bench set-config แทนการแก้ไข JSON

แก้ปัญหา Custom? Always True เมื่อสร้าง DocType ใน Frappe 16

เมื่อสร้าง DocType ใหม่ใน Frappe 16 แล้วพบว่า checkbox "Custom?" ติดเลือกอยู่ตลอดและไม่สามารถยกเลิกได้ แม้จะเปิด Developer Mode แล้วก็ตาม บทความนี้จะอธิบายสาเหตุและวิธีแก้ไขที่ถูกต้อง

ปัญหา (Problem)

เมื่อคลิก "Create New DocType" ใน Frappe 16 จะพบว่า checkbox "Custom?" ถูกเลือกไว้และไม่สามารถยกเลิกได้ (read-only) แม้ว่าจะตั้งค่า developer_mode: 1 ใน site_config.json แล้วก็ตาม

Custom checkbox ติดอยู่ตลอดแม้เปิด Developer Mode

ตรวจสอบ site_config.json

{
  "db_name": "_139d3e8086da46e7",
  "developer_mode": 1,
  "maintenance_mode": 0
}

แม้จะตั้งค่า developer_mode: 1 แล้ว แต่ปัญหายังคงอยู่

สาเหตุ (Root Cause)

ใน Frappe 16 มีการตรวจสอบ 2 เงื่อนไขก่อนอนุญาตให้สร้าง Standard DocType (non-custom):

// จาก frappe/core/doctype/doctype/doctype_list.js
let non_developer = frappe.session.user !== "Administrator" || !frappe.boot.developer_mode;

เงื่อนไขคือ:

  1. User ต้องเป็น "Administrator" - ไม่ใช่แค่ System Manager role
  2. frappe.boot.developer_mode ต้องเป็น true

ปัญหาที่แท้จริง

เมื่อแก้ไข site_config.json โดยตรง (manual edit) ค่า config จะถูก cache ไว้ใน Redis และไม่ถูก update ทำให้ frappe.boot.developer_mode ยังคงเป็น 0 หรือ undefined

วิธีแก้ไข (Solution)

วิธีที่ถูกต้อง: ใช้ bench set-config

# ตั้งค่า developer_mode ผ่าน CLI
bench set-config -g developer_mode 1

คำสั่งนี้จะ:

  1. อัพเดท site_config.json
  2. Clear cache โดยอัตโนมัติ
  3. ทำให้ frappe.boot.developer_mode ถูกตั้งค่าอย่างถูกต้อง

ถ้าแก้ไข JSON แล้ว ต้อง Clear Cache

หากแก้ไข JSON โดยตรงไปแล้ว ให้ clear cache:

bench --site [sitename] clear-cache

ตรวจสอบว่า Developer Mode ทำงาน

bench --site [sitename] console
>>> frappe.conf.developer_mode
1

สิ่งที่ควรระวัง (Gotchas)

  • อย่าแก้ไข JSON โดยตรง - ใช้ bench set-config เสมอ
  • Login เป็น Administrator - ไม่ใช่แค่ user ที่มี System Manager role
  • common_site_config.json - ถ้ามีการตั้ง developer_mode: 0 ใน common config อาจ override site config ได้

ตรวจสอบ common_site_config.json

cat ~/frappe-bench/sites/common_site_config.json | grep developer

ถ้าพบ "developer_mode": 0 ให้แก้ไขด้วย:

bench set-config -g developer_mode 1

สรุป (Summary)

บทความนี้ได้แสดงวิธีแก้ปัญหา "Custom?" checkbox ที่ติดอยู่ตลอดใน Frappe 16:

  • สาเหตุ: การแก้ไข site_config.json โดยตรงไม่ได้ clear cache ทำให้ frappe.boot.developer_mode ไม่ถูก update
  • วิธีแก้: ใช้ bench set-config -g developer_mode 1 แทนการแก้ไข JSON
  • ข้อควรจำ: ต้อง login เป็น Administrator (ไม่ใช่แค่ System Manager) ถึงจะสร้าง Standard DocType ได้

อ้างอิง (References)