مقدمة
خانة Char تمثل أبسط أنواع الحقول في نموذج بيانات أودو وتستخدم لحفظ نص قصير. كلما شاهدت اسم جهة اتصال، رمز منتج، أو ملاحظة على طلب بيع فالمحتمل أنك رأيت قيمة مخزنة في خانة Char حتى لو لم تكن تعرف ذلك.
فهم سلوك هذا الحقل مهم سواء كنت مستخدمًا تجاريًا تعدِّل النماذج عبر Odoo Studio، مطورًا تكتب إضافات، أو مستشارًا تصمم بيئة أودو لعميل — لأنه يؤثر في كيف تظهر البيانات، كيف تُبحث، وكيف تُصدَّر وتُشارك.
يبدو الحقل بسيطًا للوهلة الأولى، لكن له خواص وعادات سلوكية مهمة يمكن أن تؤثر على جودة البيانات وتجربة المستخدم. هذا الدليل يوضح ما يخزنه الحقل وكيف يظهر في الواجهة، ومتى تستخدمه، وكيف تضيفه أو تعدله عمليًا في أودو.
ما هي خانة Char في أودو
في طبقة ORM الخاصة بأودو، خانة Char مُصممة لتخزين سلاسل نصية قصيرة. في قاعدة البيانات تُترجم إما إلى عمود من نوع VARCHAR أو TEXT في PostgreSQL بحسب ما إذا حددت حد طول أم لا.
من منظور المستخدم، تظهر خانة Char كمربع إدخال سطري واحد في نماذج العرض وتُعرض كنص عادي في قوائم السجلات. هي الاختيار الافتراضي للمسميات والأكواد والمعرفات وأي نص قصير يكفي لسطر واحد.
أمثلة التعريف البرمجي تظهر الشيفرة في ملفات البايثون، لكن الأهم فهم الخيارات التي تضبط سلوك الحقل: تسمية العرض، حد الطول، والفهرسة مثلاً.
مثال عملي لتعريف حقل في نموذج بايثون يظهر كيف تضبط الملصق، حدود الطول، وفهرسة الحقل لتسريع البحث.
معامل string يحدد التسمية الظاهرة للمستخدم. معامل size اختياري ويحد عدد الأحرف المسموح بها. معامل index ينشئ فهرس قاعدة بيانات لتسريع عمليات البحث والتصفية.
في Odoo Studio يُطلق على هذا الحقل اسم Text (سطر واحد). الحقول التي تُنشأ عبر Studio تأخذ بادئة x_studio_ تلقائيًا، أما عند الإنشاء عبر الشيفرة فأنت تختار الاسم الفني بنفسك.
كيف تعمل الخانة
أثناء تثبيت أو ترقية وحدة، إطار أودو يتولى إنشاء عمود قاعدة البيانات تلقائيًا عند تعريف خانة Char؛ لا تحتاج لكتابة هجرات SQL يدوية في العادة.
بدون حد حجم تُخزن الحقول كـ TEXT، ومع وجود size تُحفظ كـ VARCHAR(n). PostgreSQL يتعامل مع النوعين بكفاءة، لذا الفارق عمليًا يتعلق بفرض قيد طول أكثر منه بتحسن أداء كبير.
خصائص الحقل الرئيسية
فيما يلي أهم الخصائص التي تؤثر في سلوك خانة Char داخل إطار عمل أودو:
- size: أقصى عدد أحرف. إن لم تُعرّف هذا الخيار فلا يوجد تقييد على الطول عند مستوى قاعدة البيانات.
- translate: عند ضبطه True يمكن ترجمة محتوى الحقل حسب لغة الواجهة — مفيد للنصوص الموجهة للمستخدمين بلغات متعددة.
- required: يجعل الحقل إلزاميًا في الواجهة وعلى مستوى النموذج.
- default: يحدد قيمة افتراضية تُملأ عند إنشاء سجلات جديدة.
- index: ينشئ فهرسًا في قاعدة البيانات لتسريع التصفية والبحث على هذا الحقل.
- compute: يربط الحقل بدالة بايثون تحسب قيمته ديناميكيًا، مناسب للقيم المشتقة أو المجمعة.
- store: عند استخدامه مع compute يحدد ما إذا كانت القيمة المحسوبة تُخزَّن في قاعدة البيانات أم تُحسب عند الطلب.
- copy: يحدد ما إذا كان يُنسخ محتوى الحقل عند تكرار سجل؛ القيمة الافتراضية True.
كيف يظهر الحقل في الواجهات
In form views, a Char field renders as a standard <input type="text"> element. In list views, it displays as plain text. In search views, it supports filters using contains, equals, and starts-with operators out of the box.
يمكن أيضًا ربط خانة Char بويدجتات في العرض لتغيير التصرف أو المظهر؛ مثلاً ويدجت email يحول النص إلى رابط بريد قابِل للنقر، وويدجت url يجعله يفتح في تبويب جديد.
التعامل مع ORM في أودو
كمطور، قراءة وكتابة حقول Char تتم كسائر الحقول: تحصل على القيمة من كائن السجل، والإطار يتولى التحقق والتنقية حسب تعريف الحقل. لا توجد تحويلات معقدة مما يجعل الحقل عمليًا وسهل الاستخدام في التطوير اليومي.
حالات استخدام عملية
أمثلة عملية شائعة على مستوى الأعمال
CRM: أرقام مرجعية للعميل
تستخدم الشركات حقول Char لتخزين رموز تعريف داخلية للعملاء على نموذج res.partner، فتُصبح قابلة للبحث وتظهر على أوامر البيع والفواتير لتفادي الالتباس بين عملاء بأسماء متشابهة.
مبيعات: مراجع أوامر الشراء
العملاء يرسلون أحيانا أرقام PO يجب أن تظهر على الفواتير والمستندات؛ الحقل client_order_ref في sale.order هو Char وتنتقل قيمته تلقائيًا إلى الفاتورة لتقليل الاستفسارات مع العميل.
المخزون: رموز داخلية للمنتجات
default_code على product.template هو Char يُستخدم كمرجع داخلي عبر المخازن، أجهزة المسح، وطلبات الشراء. الحفاظ على تناسق هذا الحقل من أولويات جودة البيانات في إدارة المخزون.
المحاسبة: أرقام ضريبية وسجلية
أرقام الضريبة، VAT، وأرقام التسجيل تحفظ كـ Char على سجلات الشركاء لتظهر تلقائيًا على الفواتير عند الإعداد الصحيح، مما يقلل الأعمال اليدوية خاصة عند العمل عبر بلدان متعددة.
الموارد البشرية: معرفات الموظفين وكودات البطاقات
فرق الموارد البشرية تحتاج أحيانًا حفظ أرقام تعريف أو أكواد بطاقات أو معرفات من أنظمة خارجية؛ خانة Char على نموذج الموظف تسهل الربط دون الحاجة لتكامل كامل منذ البداية.
إنشاء أو تخصيص خانة Char
طرق إضافة خانة Char إلى نموذج أودو
هناك ثلاث طرق رئيسية لإضافة الحقل اعتمادًا على مستوى التقنية وطريقة النشر.
باستخدام Odoo Studio (بدون كود)
- Odoo Studio أداة تعديل منخفضة الكود مدمجة. لإضافة خانة Char بدون كتابة شيفرة:
- افتح Odoo Studio من القائمة الرئيسية.
- انتقل إلى النموذج الذي تريد إضافة الحقل إليه.
- اسحب حقل Text (سطر واحد) من الشريط الجانبي إلى النموذج.
- حدد التسمية، حالة الإلزام، وخيار حد الطول إن رغبت في خواص الحقل.
احفظ وأغلق Studio — سيُنشأ الحقل تلقائيًا ويُضاف للعرض دون حاجة لهجرات قاعدة بيانات يدوية.
باستخدام بايثون داخل وحدة مخصصة
للمطورين الذين يبنون وحدات أودو، تُعرّف حقول Char في ملفات نماذج بايثون. هذه الطريقة مفضلة عندما تحتاج التخصيص أن يكون تحت نظام تحكم بالإصدار ومطبقًا على بيئات متعددة:
مثال بايثون يبيّن تعريف حقل مع تسمية، حد طول، فهرسة، ومنع النسخ عند تكرار السجل.
بعد إضافة الحقل في النموذج تحتاج أيضًا إدراجه في ملف XML الخاص بالعرض ليظهر في الواجهة. أودو يتولى إنشاء عمود قاعدة البيانات عند تثبيت أو ترقية الوحدة.
باستخدام واجهة XML-RPC
إذا كنت تدير تعديلات أودو برمجياً كجزء من نشر أو سكربت تكوين بعيد، يمكنك إنشاء الحقول عبر XML-RPC API:
مثال تنفيذ API يوضح كيفية إنشاء حقل من نوع char وتحديد الاسم والوصف والطول وحالة الحقل كـ manual.
قيمة state: 'manual' تخبر أودو أن الحقل أنشئ يدويًا (ليس عبر وحدة)، وهذا الإعداد مناسب للحقول المضافة عبر Studio أو API في عمليات التكوين الآلية.
أفضل الممارسات
نصائح عملية — متى تحدد حجم الحقل
إذا كانت قيم الحقل محددة الطول مثل رموز الدول ISO أو أرقام الهاتف بصيغة ثابتة، عرّف size لتوضيح النية ومنع إدخالات طويلة عن طريق الخطأ — حقل مخصَّص لرمز دولي ذو حرفين لا يجب أن يستقبل 500 حرف.
أضف فهرسًا للحقل إذا كان مستخدمًا في البحث كثيرًا
عندما يُستخدم الحقل في التصفية أو البحث على جداول كبيرة، تفعيل index=True يمكن أن يحوّل استعلام يأخذ عشر ثوانٍ إلى ثانية واحدة تقريبًا.
استخدم translate=True للمحتوى متعدد اللغات
إذا كان التطبيق يخدم مستخدمين بلغات مختلفة وحقل ما يجب أن يظهر بحسب لغة المستخدم (مثل أسماء المنتجات أو المسميات الوظيفية)، فعّل الترجمة للحقل.
أعطِ الحقول أسماء فنية واضحة ومتسقة
اسم الحقل التقني في الوحدة يجب أن يكون وصفيًا (مثل x_customer_erp_id) بدلًا من أسماء عامة أو رمزية. الأسماء الفنية صعبة التغيير لاحقًا بعد تخزين البيانات، فخطط لها منذ البداية.
استخدم compute للحقول المرجعية المشتقة
يمكن حساب قيم Char ديناميكيًا من حقول أخرى (مثلاً جمع سنة ورقم تسلسلي). مع store=True تُخزن النتيجة في القاعدة وتُؤهَّل للبحث والتقارير دون إعادة حساب عند كل قراءة.
المشكلات الشائعة
أخطار ترك الحقل بدون حد طول
السماح بطول غير محدود قد يؤدي إلى لصق فقرات طويلة في حقل مرجعي؛ هذا يسبب مشاكل عند الطباعة أو مشاركة البيانات مع أنظمة خارجية تفرض قيود أحرف. حدد طولًا معقولًا عندما يهم الطول.
الغياب المبكر للفهارس على الحقول المستخدمة بكثرة
بدون فهرس تصبح عمليات التصفية على جداول كبيرة فحصًا كاملاً لكل الصفوف، وغالبًا لا يكتشف الفرق إلا بعد نمو قاعدة البيانات مما يؤدي لتأخير الأداء. إذا سيستخدم الحقل بكثرة في البحث فأنشئ الفهرس منذ البداية.
الخلط بين Char و Text
Char مُخصص لنص قصير سطري واحد؛ Text لمحتوى أطول متعدد الأسطر. استخدام Char لوصف عنوان أو ملاحظة يؤدي لتجربة تحرير سيئة لأن الحقل لن يدعم الانتقال إلى سطور جديدة أو التفاف النص. إن كان المحتوى قد يمتد لعدة جمل فاستخدم Text بدلاً منه.
نسيان تفعيل الترجمة للحقول متعددة اللغات
في شركات تعمل عبر بلدان متعددة، عدم تفعيل translate=True على حقل واجهة المستخدم يعني أن جميع المستخدمين سيرون نفس القيمة بغض النظر عن لغة الواجهة، مما يسبب ارتباكًا في المستندات الموجهة للعملاء بلغاتهم.
استخدام Char لمحتوى يجب أن يكون Selection أو علاقة
إذا كان الحقل يقبل دائمًا مجموعة محدودة من القيم (فئة، حالة، بلد)، فالأفضل استخدام Selection أو Many2one بدلًا من Char. الحقول النصية المفتوحة تدعو للأخطاء الإملائية وتباينات تمنع التجميع والتحليل الصحيح.
أسئلة متكررة
ما الفرق بين Char و Text في أودو؟
Char يخزن نصًا قصيرًا سطريًا ويظهر كمربع نص في النماذج. Text يخزن محتوى أطول متعدد الأسطر ويظهر كمربع قابل لتغيير الحجم. استخدم Char للأسماء والأكواد والمراجع، وText للوصف والملاحظات والمحتوى الذي قد يحتاج عدة جمل.
هل أستطيع تحديد عدد الأحرف في خانة Char؟
نعم — عند تعريف الحقل في بايثون استخدم size، مثلاً fields.Char(size=64). في Studio يمكنك ضبط الحد في خواص الحقل. إن لم تحدد size فالقيد غير مفروض على مستوى قاعدة البيانات.
كيف أُظهر خانة Char في شريط البحث؟
Add the field to the search view of the model. In Studio, enable the search option in the field properties. In code, add <field name="your_char_field"/> inside the <search> view definition in your XML. Once added, users can filter records by that field directly from the search bar.
هل يمكنني تخزين أرقام في Char؟
تقنياً نعم، لكن لا يُنصح بذلك للأرقام التي تحتاج عمليات حسابية أو مقارنات عددية — استخدم Integer أو Float للكميات والمبالغ. Char مناسب للأرقام التي تُعامل كنص مثل الرموز البريدية، أرقام الهواتف، أو أرقام سلاسل الإنتاج.
كيف أنشئ حقل Char محسوب ويُخزن قيمته؟
عرّف الحقل مع compute='_compute_my_field' و store=True، واكتب دالة الحسبة مع @api.depends() لتحديد الحقول التي تؤثر على النتيجة. مع store=True ستُخزن القيمة في القاعدة وتتوفر في عمليات البحث والتقارير دون إعادة حساب عند كل قراءة.
خلاصة
خانة Char تبدو بسيطة لكن لها دور كبير في تجربة المستخدم وجودة البيانات. معظم المستخدمين يتعاملون معها باستمرار دون الانتباه، لكن فهم خصائصها ومتى تُستخدم بدلًا من حقول أخرى يحسّن نموذج البيانات بشكل ملموس.
سواء أضفت مرجع عميل عبر Studio، عرّفت الحقل في وحدة بايثون، أو أنشأته برمجياً عبر API، الأنماط المذكورة هنا تساعدك على فعل الأمور صحيحة من المحاولة الأولى.
نموذج بيانات مُصمم بعناية واختيار أنواع الحقول المناسبة يعتبر أساس تنفيذ أودو ناجح؛ خانة Char هي جزء صغير من الصورة لكنها تستحق أن تُفهم جيدًا.
في Dasolo نساعد الشركات على تنفيذ وتخصيص وتحسين أودو عبر جميع الأقسام. سواء كنت بحاجة لتصميم نموذج بيانات نظيف، إضافة حقول مخصصة لسير العمل، أو بناء وحدة أودو كاملة، فريقنا جاهز للمساعدة. تواصل معنا ودعنا نتحدث عن مشروع أودو الخاص بك.