مقدمة سريعة
خطأ Odoo JSONRPC يحدث عندما يفشل طلب مرسل إلى أودو عبر بروتوكول JSON-RPC. هذا البروتوكول هو العمود الفقري لتبادل البيانات بين واجهة الويب والواجهات الخارجية الحديثة.
على عكس XML-RPC، يُستخدم JSON-RPC بشكل واسع في:
- تفاعلات واجهة الويب
- التكاملات المخصصة مع أنظمة خارجية
- نسخ أودو الخالية من الواجهة (headless)
- مزامنة البيانات مع أنظمة خارجية
عندما يحدث خطأ أثناء استدعاء JSON-RPC، يرد أودو برد خطأ غالباً ما يظهر بصيغة:
RPC_ERROR: Odoo Server Error
أو في استجابات الـ API ككائن JSON يحتوي على حقل خطأ.
هذه المقالة تشرح معنى أخطاء JSONRPC في أودو وتعرض خطوات عملية لحلّها بشكل منهجي.
ما المقصود بـ JSON-RPC في أودو؟
JSON-RPC (استدعاء إجراءات عن بُعد مع JSON) يتيح للعميل استدعاء دوال أودو عبر HTTP باستخدام حزم بيانات بصيغة JSON.
بشكل عملي، الطلبات تحمل هيكل محدد ويحتوي على معلومات الخدمة والطريقة والمعرف لتتبع الاستجابة.
{
"jsonrpc": "2.0",
"method": "call",
"params": {
"service": "object",
"method": "execute_kw",
"args": [
"database_name",
2,
"password",
"res.partner",
"search",
[[["is_company", "=", true]]]
]
},
"id": 1
}
إذا واجه الخادم استثناءً أثناء المعالجة، يرد أودو باستجابة خطأ مفصّلة بصيغة JSON توضح نوع الاستثناء.
أسباب شائعة لظهور أخطاء JSONRPC في أودو
1. فشل المصادقة
قد تنشأ المشكلة عندما يحتوي الطلب على أي من الحالات التالية:
- بيانات اعتماد خاطئة
- قاعدة بيانات غير صحيحة
- جلسة منتهية الصلاحية
في هذه الحالات يرفض أودو تنفيذ الطلب.
قِطع الاتصال بسبب المصادقة من أكثر أسباب أخطاء JSONRPC تكراراً في التكاملات.
2. استدعاء طريقة غير صحيح
الأخطاء تظهر إذا كان الحمولة تشير إلى أي مما يلي:
- نموذج غير موجود
- دالة غير معرّفة على النموذج
- وسائط الدالة غير متوافقة أو ناقصة
في هذه الحالات يثير الخادم استثناءً يُعاد ضمن رد JSONRPC.
3. حقول مطلوبة مفقودة
عند تنفيذ عمليات إنشاء أو تعديل، وحذف حقول إجبارية، يرفع أودو خطأ تحقق يظهر في استجابة JSON.
مثال توضيحي:
{
"name": "Order 001"
}
إذا كان حقل partner_id إلزامياً ولم يُرسل → ستظهر رسالة خطأ.
4. قيود صلاحيات الوصول
إذا كان المستخدم الذي ينفذ الطلب يفتقد الصلاحية المناسبة، يرد أودو بخطأ متعلق بالصلاحيات في شكل JSON.
هذا شائع في بيئات الإنتاج حين تكون حسابات التكامل محدودة الصلاحيات.
5. معرفات علاقات غير صالحة
إرسال معرفات Many2one غير موجودة في السجلات يؤدي إلى استثناء في الخادم.
مثال توضيحي:
{
"partner_id": 99999
}
إذا لم يكن المعرف 99999 موجودًا → يُعاد خطأ JSONRPC يوضح ذلك.
6. انتهاك قيود قاعدة البيانات
أمثلة على هذه الأخطاء تتضمن:
- محاولة إدخال قيمة مكررة لحقل فريد
- فشل قيد المفتاح الأجنبي
- قيد عدم السماح بالقيم الفارغة (NOT NULL)
مثل هذه الأخطاء تظهر ضمن ردود JSONRPC عند محاولة حفظ بيانات غير مطابقة للقيود.
7. نفاد المدة أو عمليات ثقيلة
حِملات كبيرة أو عمليات دفع بيانات ضخمة قد تتجاوز حدود المهلة، خاصة في التكاملات عالية الحجم.
خطوات عملية لإصلاح خطأ JSONRPC في أودو
الخطوة 1 – فحص رد الخطأ بصيغة JSON
معظم ردود JSONRPC تتضمن عناصر مفيدة مثل:
- نوع الخطأ
- نص رسالة الخطأ
- سجل الاستدعاء (traceback) عند التوفر
اقرأ تفاصيل الاستثناء بعناية لاستخراج السبب الحقيقي للمشكلة.
الخطوة 2 – التأكد من المصادقة
تحقق من الأمور التالية:
- اسم القاعدة دقيق وصالح
- معرّف المستخدم أو رمز الجلسة ساري
- كلمة المرور أو مفتاح API صحيح
- الحساب مفعل وليس مُعطلاً
الخطوة 3 – التحقق من بنية الحمولة
قبل إرسال الطلبات:
- تأكد من وجود الحقول الإلزامية
- تحقق من صحة المعرفات المرتبطة (relational IDs)
- تجنّب إرسال قيم خالية في الحقول المطلوبة
- ضمن أنواع البيانات الصحيحة لكل حقل
التحقق الهيكلي من البيانات قبل الإرسال يمنع كثيراً من أخطاء وقت التشغيل.
الخطوة 4 – مراجعة صلاحيات المستخدم
تأكد أن حساب التكامل يمتلك الصلاحيات اللازمة مثل:
- صلاحية القراءة
- صلاحية التعديل/الكتابة
- صلاحية الإنشاء
- وصلاحية الحذف إن لزم الأمر
بحسب الإجراء المطلوب تنفيذه.
الخطوة 5 – التجربة داخل واجهة أودو
حاول تكرار نفس العملية يدوياً في واجهة أودو.
إذا فشلت العملية عبر الواجهة، فالمشكلة غالباً بياناتية أو متعلقة بالصلاحيات وليس بالبروتوكول فقط.
الخطوة 6 – الاطلاع على سجلات الخادم
إذا كان رد JSON عامّاً وغير كافٍ، اطلع على سجلات أودو في الخادم للحصول على traceback كامل وتفاصيل الخطأ.
إجراءات للوقاية من أخطاء JSONRPC
- نصائح عملية للحدّ من الأخطاء:
- استخدم حسابات API مخصصة لكل تكامل
- قم بفلترة والتحقق من البيانات قبل الإرسال
- سجل طلبات واستجابات الـ API لمراقبة الأخطاء
- طبق معالجة منظمة للأخطاء في طبقة التكامل
- تجنّب إرسال عمليات مجمّعة كبيرة في طلب واحد
اختبر سير عمل التكامل في بيئة اختبار (staging) قبل الإنتاج
كيف تُقوّي Dasolo اتصال JSONRPC
في بيئات أودو المدفوعة بالـ API، وضع طبقة وسيطة للتحقق وتحويل البيانات بين الأنظمة يخفّض كثيراً من أخطاء JSONRPC الناجمة عن جلسات غير متسقة أو طلبات مشوّهة أو منطق خادم غير محقق. لأن JSONRPC هو مسار التفاعل الرئيسي في الويب داخل أودو، أي خلل بسيط في الإعداد قد يتسبب في فشل متكرر للواجهة.
في Dasolo، نعزّز ثبات اتصال JSONRPC عبر ممارسات عملية مثل:
- التحقق المنظم من بنية الطلبات والحقول
- إدارة جلسات مُحكمة وآمنة
- أنماط واضحة لمعالجة الاستثناءات وإعادة المحاولة
- حصر النهايات المكشوفة وتأمينها
- تسجيل تفصيلي لمكالمات الـ API وتحليلات للأخطاء
توفر هذه المنهجية إطار اتصال موحّد يقلل من الأخطاء المفاجئة ويحسّن موثوقية المنصة ككل.
خاتمة موجزة
عادةً ما يظهر خطأ “JSONRPC Error” في أودو عندما يقطع استثناء في الخادم تواصل العميل والخادم. رغم أن الرسالة قد تبدو عامة، إلا أنها في الغالب تعكس مشاكل أعمق في صياغة الطلب، المصادقة، أو منطق الخادم.
بمراجعة بنى الـ API، التحقق المسبق من المدخلات، وتطبيق معالجة أخطاء متوقعة، يمكن للمطوّرين تقليل تكرار انقطاع JSONRPC. طبقة اتصال مصمّمة جيداً تضمن تفاعلاً أكثر استقراراً وكفاءة داخل بيئات أودو.