โหมดมืด
สิทธิ์และการเปิดเมนู
Flow Modules / Flow User Access — ตัวที่กำหนดว่าใครเห็นเมนูอะไร และมันไม่ใช่ตัวให้สิทธิ์
การเปิดเมนูไม่ใช่การให้สิทธิ์
เมนูใน Flow เป็นแค่ทางเข้า สิทธิ์จริงยังตัดสินโดย Role และ User Permission ของ ERP เปิดเมนูให้คนที่ไม่มีสิทธิ์อ่าน doctype นั้น เขาจะเห็นหน้าเปล่า ไม่ใช่เห็นข้อมูล และการปิดเมนูก็ไม่ได้ ตัดสิทธิ์เขาจากช่องทางอื่น ถ้าต้องการตัดสิทธิ์จริงต้องทำที่ ERP
Flow Modules — นิยามเมนูหนึ่งอัน
| ฟิลด์ | ชนิด | คำอธิบาย |
|---|---|---|
flow_feature | Data | ชื่อเมนูที่ผู้ใช้เห็น |
main_menu | Select | กลุ่มที่เมนูนี้ไปอยู่: Production, Warehouse & QC, Sales & Billing, Operations |
erpnext_module | Link → Module Def | โมดูล ERP ต้นทาง |
document_type | Link → DocType | เอกสารที่เมนูนี้ทำงานด้วย — ว่างได้ถ้าเป็นหน้าจอเฉพาะทาง เช่น หน้าขายหน้าร้าน |
route | Data | เส้นทางของหน้ารายการในแอป |
detail_route | Data | เส้นทางของหน้ารายละเอียด ใช้ประกอบลิงก์ในข้อความแจ้งเตือน |
icon / color / sequence | Data / Data / Int | หน้าตาและลำดับบนหน้าแรก |
allow | Select | มิติที่ใช้กรองข้อมูลตามหน่วยงาน: Department, Cost Center, TAS C1 Department |
allow ทำงานยังไง
ช่องนี้เป็นสวิตช์ ไม่ใช่ตัวกรองในตัวเอง เมื่อตั้งค่าไว้ Flow จะกรองรายการตาม User Permission ของมิตินั้น
⚠️ สองข้อที่ทำให้เข้าใจผิดบ่อย
- User Permission กรองได้เฉพาะ doctype ที่มีช่อง Link ชี้ไปหามิตินั้นจริง ๆ — ถ้าเอกสารไม่มีช่อง Department ก็กรองตาม Department ไม่ได้ ไม่ว่าจะตั้ง
allowไว้อย่างไร - ไม่มี User Permission = เห็นทั้งหมด ไม่ใช่เห็นศูนย์ ตั้ง
allowแล้วต้องไปตั้ง User Permission ให้ผู้ใช้ด้วย มิฉะนั้นไม่มีอะไรเปลี่ยน
⚠️ เมนูรายงานในเวิร์กสเปซ (Workspace Link)
เมนูฝั่งเดสก์ที่ชี้ไปหารายงานเป็นคนละเรื่องกับ Flow Modules แต่มีกับดักที่ทำให้เมนูพังเงียบ ๆ
Workspace Link.is_query_report เป็นตัวตัดสินว่า Frappe จะสร้าง URL แบบไหน
| ค่า | URL ที่ได้ | ใช้กับ |
|---|---|---|
0 | /app/<doctype>/view/report/<ชื่อ> | Report Builder — อ่านค่าจากฟิลด์ Report.json |
1 | /app/query-report/<ชื่อ> | Query Report และ Script Report |
Query Report ไม่มีค่าใน Report.json เส้นทางแรกจึงทำ JSON.parse(undefined) แล้วตาย ก่อนจะยิงคำขอข้อมูลด้วยซ้ำ — ผู้ใช้เห็นหน้าขาว ไม่มี error ฝั่งเซิร์ฟเวอร์ ใน console ของเบราว์เซอร์ ขึ้น SyntaxError: "undefined" is not valid JSON at report_view.js:31
สร้าง Workspace Link ด้วยโค้ดต้องตั้งค่านี้เสมอ
ค่าดีฟอลต์คือ 0 — เมนูรายงานที่สร้างด้วยสคริปต์แล้วไม่ได้ตั้ง จะกดไม่ขึ้นทั้งหมดโดยไม่มีอะไรฟ้อง เคยทำให้เมนูรายงาน 34 รายการบน sacl ใช้ไม่ได้ และไม่มีใครรู้จนมีคนมาแจ้ง
ตรวจทั้งไซต์ในคำสั่งเดียว:
sql
select wl.parent, wl.label, wl.link_to, wl.is_query_report, r.report_type
from `tabWorkspace Link` wl join `tabReport` r on r.name = wl.link_to
where wl.link_type = 'Report'
and (r.report_type in ('Query Report','Script Report')) != (wl.is_query_report = 1);แก้ด้วย frappe.db.set_value("Workspace Link", <name>, "is_query_report", 1) แล้ว frappe.clear_cache() ไม่ต้อง restart
⚠️ เวิร์กสเปซมาตรฐานของ frappe/erpnext/hrms อย่าไปแก้ — bench migrate sync ค่าพวกนั้นมาจาก ไฟล์ในแอป แก้ไปก็โดนทับรอบหน้า
Flow User Access — เปิด/ปิดเมนูรายคน
| ฟิลด์ | ชนิด | คำอธิบาย |
|---|---|---|
user | Link → User | ผู้ใช้หนึ่งคน หนึ่งเอกสารต่อหนึ่งคน |
accesses | Table → Flow Access | รายการเมนูของคนนี้ |
Flow Access (ตารางย่อย) มีสองช่อง: flow_feature (Link → Flow Modules) และ is_enable (Check)
Flow Notification — กติกาการแจ้งเตือน
| ฟิลด์ | ชนิด | คำอธิบาย |
|---|---|---|
enabled | Check | เปิด/ปิดกติกานี้ |
reference_doctype | Link → DocType | เอกสารที่เฝ้าดู |
purpose | Data | ชื่อกติกาไว้ให้คนอ่านเข้าใจ |
state_type | Select | ดูจาก Workflow State หรือ Status |
state_value | Select | ค่าที่ทำให้ยิงแจ้งเตือน |
title / message | Data / Small Text | ข้อความที่ส่ง |
recipient_type | Select | All Subscribers, Workflow Approvers, Role, Assigned Users, Document Owner |
recipient_role | Link → Role | ใช้เมื่อ recipient_type = Role |
flow_modules | Link → Flow Modules | เมนูที่ลิงก์ในข้อความจะพาไป |
ดูภาพรวมการทำงานที่ การแจ้งเตือน
FCM Token — เครื่องที่ลงทะเบียนรับแจ้งเตือน
user, platform, device_name, token — สร้างอัตโนมัติเมื่อผู้ใช้อนุญาตการแจ้งเตือนบนเครื่องนั้น หนึ่งคนมีหลายเครื่องได้ ไม่ต้องแก้ด้วยมือ ลบทิ้งได้ถ้าเครื่องหาย
หมายเหตุความเข้ากันได้
ฟิลด์ในหน้านี้เป็นของ Flow เอง ส่วนชื่อ doctype และชื่อฟิลด์ที่อ้างถึง (document_type, reference_doctype) เป็นของ ERP — อัปเกรด ERP แล้วควรตรวจว่ายังชี้ถูกอยู่