حقل القراءة فقط في أودو قد يبدو ميزة بسيطة للوهلة الأولى، لكنه أحد أدوات التحكم الجوهرية التي تحافظ على ثبات المعلومات وتمنع تغييرات غير مقصودة داخل النظام.
سواء كنت مستخدمًا عاديًا يتساءل عن سبب تعتيم حقل معين في الشاشة، أو مطوّرًا يبني تخصيصات لأودو، ستجد هنا إجابات عملية تشرح لماذا ومتى نجعل الحقول غير قابلة للتعديل.
فَهْم متى يجب قفل حقل يساعد على تصميم سير عمل موثوق، ويقلل أخطاء البيانات، ويمنح الفريق تجربة استخدام أكثر اتساقًا وأمانًا.
الدليل هذا يجمع بين منظور الأعمال والجوانب التقنية لخاصية القراءة فقط، ليُسهل عليك اتخاذ قرار بين ضبط الإعدادات سريعًا عبر واجهة أو كتابة منطق مخصص في الكود.
ما هو حقل القراءة فقط في أودو؟
حقل القراءة فقط هو حقل يُظهر قيمة للمستخدم لكنه غير معدّل من خلال واجهة المستخدم — الظاهر للعين لكنه مغلق عن التعديل.
في نموذج العرض يظهر الحقل عادة كنص ثابت بدل مربع إدخال تفاعلي، وغالبًا ما يتم تمييزه بصريًا ليُعطي إشارة أنه غير قابل للكتابة.
سلوك القراءة فقط يُطبَّق على مستويين متمايزين داخل أودو — على مستوى تعريف الحقل نفسه، أو على مستوى واجهة العرض فقط.
- على مستوى الحقل (الـ ORM/Python): القفل دائم ويشمل جميع الواجهات وسياقات النظام
- على مستوى العرض (XML): القفل ينطبق فقط في ذلك العرض أو وفق شرط معين
الفرق بين المستويين مهم: إذ إن قفل الحقل في نموذج البيانات يمنع أي تعديل عبر الواجهات أو واجهات برمجة التطبيقات، بينما قفل العرض يقيّد التعديل فقط في ذلك المشهد البصري دون أن يمنع الكتابة من جهة الخادم أو عبر API.
القراءة فقط ليست نوع حقل منفصل؛ هي ميزة يمكن إضافتها لأي نوع حقل في أودو مثل نص، رقم، علاقة Many2one، تاريخ وغيرها — طريقة قياسية للتحكم بسلوك الحقول أثناء التشغيل.
كيف يعمل حقل القراءة فقط
لفهم السلوك عمليًا، من المفيد التمييز بين منطق الـ ORM في بايثون والقيود في طبقة العرض عبر XML.
القراءة فقط على مستوى الـ ORM
عند تعريف الحقول في نموذج بايثون يمكن تحديدها كمقروءة فقط باستخدام المعامل readonly=True، وهو شائع للحسابات المحسوبة التي تعتمد على بيانات أخرى ولا يجب أن يغيّرها المستخدمون يدويًا.
هذا النوع من القفل جزء من واجهة برمجة الحقول في أودو ويُطبق عالميًا بغض النظر عن العرض المستخدم.
قفل بحسب الحالة
أسلوب شائع هو جعل الحقول غير قابلة للتعديل حسب حالة المستند: مثلاً عند تحويل وثيقة من مسودة إلى مؤكدة تُقفل الحقول لمنع تعديل بيانات نهائية.
في الإصدارات القديمة من أودو كانت تُستخدم إعدادات attrs في XML لتحقيق ذلك، أما الإصدارات الأحدث فتوفر تعابير مختصرة تُكتب مباشرة على عنصر الحقل.
النتيجة واحدة عمليًا: الحقل قابل للتعديل في المسودة ويُقفل عند انتقال المستند إلى حالة لاحقة — نمط أساسي في أي ضبط فني للحقول.
الحقول المحسوبة والقراءة فقط
الحقل المحسوب في أودو يكون مقروءًا افتراضيًا لأن قيمته تُستخلص تلقائيًا من حقول أخرى ولا يُفترض تعديلها يدويًا.
يمكنك جعل الحقل المحسوب مخزّنًا باستخدام store=True، وهذا مفيد للأداء ولإمكانية البحث والفرز على قاعدة البيانات دون إعادة حسابه في كل مرة.
جعل الحقل المحسوب قابلًا للكتابة
إذا أردت أن تسمح بإدخال يدوي على حقل محسوب، عليك توفير دالة عكسية (inverse) تبيّن كيف يُحوّل النظام القيمة اليدوية إلى الحقول الأساسية — بدونها يظل الحقل مغلقًا.
حالات استخدام عملية
تظهر حقول القراءة فقط في كل جزء من أودو؛ فيما يلي أمثلة عملية مألوفة من بيئات العمل الحقيقية.
1. إدارة العملاء (CRM): تثبيت بيانات الفرص المغلقة
في إدارة الفرص، قيم مثل الإيراد المتوقع أو تاريخ الإغلاق تكون قابلة للتعديل أثناء العمل على الفرصة، لكنها تُقفل عند وسمها مبيعات ناجحة أو خاسرة لحفظ سجل دقيق.
هذا يمنع تغيير الأرقام بأثر رجعي ويضمن تقارير مبيعات وتحليل قنوات مبيعات موثوقًا.
2. المبيعات: حماية بنود الطلبات المؤكدة
عند تأكيد طلب مبيعات تنتقل بنود الطلب إلى حالة غير قابلة للتعديل، فلا يمكن تعديل المنتج أو الكمية أو السعر بعد إرسال تأكيد للعميل.
وأي تعديل مطلوب يجب أن يتم عبر إجراءات مقصودة مثل إعادة الطلب إلى المسودة، مما يضمن أثرًا توثيقيًا واضحًا للتغييرات.
3. المخزون: تثبيت الكميات بعد التحقق
في إدارة المستودعات، بعد التحقق من شحنة أو استلام تُقفل الكميات المُنفذة لحماية قيمة المخزون ومزامنته مع الحركة الفعلية.
السماح بتعديل الكميات بعد التحقق قد يؤدي إلى أخطاء تراكمية في مستويات المخزون عبر المواقع المختلفة.
4. المحاسبة: قيود اليومية المثبتة
بمجرد ترحيل قيد محاسبي تُصبح أسطره غير قابلة للتعديل، وهذا مطلب قانوني في كثير من البلدان ومبدأ أساسي في المحاسبة المزدوجة.
فتح التعديل بعد الترحيل قد يؤدي إلى بيانات مالية غير موثوقة ومخاطر امتثال كبيرة.
5. التصنيع: تثبيت بيانات أوامر العمل المكتملة
بعد إغلاق أمر عمل تُقفل بيانات الوقت الفعلي والكميات المنتجة لحفظ سجلات إنتاج دقيقة تدخل في تحليل التكاليف والأداء.
إنشاء أو تخصيص حقل قراءة فقط
ثلاث طرق رئيسية لضبط حقول القراءة فقط في أودو: عبر Odoo Studio لنهج بلا كود، أو بتعريفات بايثون وXML للمزيد من التحكم التقني.
استخدام Odoo Studio
Odoo Studio يسهّل إضافة أو تعديل سلوك القراءة فقط دون كتابة كود؛ مناسب للمدراء والاستشاريين الذين يريدون تنفيذ قواعد بسرعة.
- افتح Odoo Studio من القائمة الرئيسية (أيقونة القلم)
- انتقل إلى نموذج العرض الذي تريد تغييره
- اضغط على الحقل الذي ترغب بتعديله
- في لوحة الخصائص الجانبية فعّل خيار "قراءة فقط"
- احفظ واخرج من Studio
يمكنك أيضًا ضبط شروط قراءة فقط في Studio باستخدام تعابير شرطية بسيطة، مثل قفل الحقل حين يكون حالة المستند محددة، دون أي سطور كود.
نهج Studio مناسب للنسخ السريعة من التعديلات الآمنة التي تبقى صالحة بعد التحديثات ولا تُكتب في ملفات الموديول التقنية.
استخدام بايثون للتخصيص الفني
للمطورين، تُحدد خاصية readonly مباشرة في تعريف الحقل داخل نموذج بايثون، وهو الأسلوب المتعارف عليه عند بناء موديولات مخصصة.
يمكنك وضع readonly=True بشكل ثابت أو استخدام معلمة states لتحديد الحالات التي يكون فيها الحقل قابلاً للكتابة أو مقفولًا.
هذا يضمن بقاء منطق الحقل مرتبطًا بنموذج البيانات مما يسهل الصيانة عندما تضيف حقول مخصصة إلى نماذج قياسية.
استخدام سمات العرض في XML
للسلوك على مستوى العرض تضيف سمة readonly إلى عنصر الحقل في ملف عرض الـ XML — طريقة معتمدة ضمن سير العمل الفني في أودو.
ميزة هذا الأسلوب هي المرونة: نفس الحقل يمكن أن يتصرف بشكل مختلف في شاشات متعددة أو تحت شروط متنوعة دون تغيير تعريفه في النموذج الأساسي.
في أودو 17 صارت تعابير شرطية للقراءة فقط أكثر نظافة وقابلة للقراءة مقارنة بصيغة attrs القديمة، لكن كلا الأسلوبين لا يزالان صالحين حسب الإصدار.
أفضل الممارسات
الاستخدام الجيد لحقول القراءة فقط يعتمد على اختيار المستوى الصحيح لتطبيق القيد والسبب الواضح لذلك — فيما يلي إرشادات عملية من منظور استشاري أودو.
1. الأفضلية لقفل العرض عندما يتغير السياق
إذا كان القفل مطلوبًا فقط في حالات معينة أو شاشات محددة فطبّق القراءة فقط على مستوى العرض للحفاظ على مرونة نموذج البيانات وللسماح للعمليات الخلفية أو التكاملات بالكتابة عند الحاجة.
2. طابق شروط القفل مع دورة حياة المستند
اجعل القفل يحدث عندما يصبح التعديل مضراً بسير العمل — سلوك متوقع يقلل الحاجة لتدريب مطوّل ويجعل النظام بديهياً للمستخدمين.
3. اختبر عبر صلاحيات المستخدمين
تأثير القراءة فقط يمكن أن يتداخل مع صلاحيات الوصول؛ اختبر دائمًا كأدمن وكـ مستخدم عادي للتأكد من السلوك الصحيح لكل دور.
4. اجمع بين القراءة فقط والحقول الإلزامية حيث يلزم
في نماذج متعددة المراحل، قد تكون بعض الحقول إلزامية في المسودة ثم تُقفل لاحقًا؛ الجمع بين السمتين في XML يضمن اكتمال البيانات قبل التقدم.
5. وثّق منطق القفل
أضف تعليقًا يشرح سبب قفل الحقل في الكود أو في إعدادات الواجهة حتى يفهم مطورو المستقبل الغرض التجاري وليس فقط التنفيذ الفني.
6. استخدم Studio للتغييرات السريعة والآمنة من ناحية التحديثات
استعن بStudio للحالات البسيطة والآمنة، واحتفظ بالبايثون للحالات المعقّدة التي تحتاج شروطًا متداخلة أو تفاعلًا مع حقول محسوبة مخصصة.
المشاكل الشائعة
حتى الخبراء يقعون أحيانًا في أخطاء متكررة عند التعامل مع حقول القراءة فقط؛ هذه المشاكل تستحق الانتباه مبكرًا.
الخلط بين قفل العرض والحدود الأمنية
قفل الحقل في العرض لا يمنع الكتابة عبر XML-RPC أو استدعاءات ORM في الخادم أو إجراءات سيرفر. إن كنت تحتاج حظرًا حقيقيًا على مستوى البيانات فعليك تطبيق ذلك في النموذج أو عبر قواعد الوصول، وليس فقط في العرض.
جعل الحقل دائمًا مقفلاً بينما الأفضل كان قفله شرطياً
غالبًا ما يكون الإغراء كبيرًا لقفل الحقل نهائيًا، لكن هذا يمنع عمليات تصحيح مشروعة مثل إعادة المستند إلى المسودة. فكر في دورة الحياة الكاملة قبل اختيار قفل دائم.
نسيان تأثير دوال onchange
دوال onchange قد تحاول كتابة قيمة إلى حقل مقفول، ما يسبب سلوكًا مربكًا أو أخطاء تبدو كأن الحقل يتغير ثم يعود. تأكد من أن لوجيك onchange يتوافق مع حقول القراءة فقط.
عدم تطبيق القفل بشكل متسق عبر جميع العروض
قد يكون الحقل مقفولًا في نموذج التفصيل لكنه قابل للتعديل في عرض القائمة أو كانبان إن لم تضف نفس القيود هناك — تحقق من كل العروض التي يظهر فيها الحقل.
آثار جانبية عند وراثة النماذج القياسية
إضافة readonly=True لحقل موجود عبر وراثة النموذج قد تؤثر على كل العروض القياسية والتخصيصات الأخرى؛ تأكد أن هذا التغيير مقصود ولا يكسر سلوكًا متوقعًا للموديولات الأخرى.
الخلاصة
حقول القراءة فقط أداة أساسية لتوجيه المستخدمين، وحماية سلامة البيانات، وفرض سياسات العمل دون الاعتماد على التدريب وحده.
المفتاح هو معرفة متى تطبق القفل في العرض مقابل النموذج والتأكد أن شروطه تتماشى مع طريقة عمل فريقك بالفعل.
سواء نفذت ذلك عبر Odoo Studio لنهج بلا كود أو عبر بايثون وXML ضمن مشروع تطوير، تبقى الفكرة نفسها: أعرض البيانات، لكن احمها من التعديلات غير المقصودة.
ربما لا تكون الأكثر إثارة للحديث عنها في تخصيص أودو، لكنها من أكثر العناصر تأثيرًا في جودة النظام واستقراره.
في Dasolo نساعد الشركات على تنفيذ وتخصيص وتحسين أودو عبر جميع الموديولات والقطاعات. إن أردت مساعدة في ضبط الحقول، تصميم مسارات عمل موثوقة، أو تحسين نموذج بيانات أودو لديك، فريقنا جاهز لدعمك. تواصل معنا وأخبرنا عن مشروعك.