
المحتويات
- الفرز: من العَرَض إلى أول فحص
- ما الذي تغيّر في BTP من 2024 إلى 2026
- المشكلة 1: خطأ 401 غير مصرّح مع بيانات اعتماد مفتاح الخدمة
- المشكلة 2: أخطاء Internal Server Error عند فتح Integration Suite
- المشكلة 3: التنقل المعطل والروابط الميتة
- المشكلة 4: إخفاقات الوجهات في تطبيقات CAP
- المشكلة 5: تطبيقات تتوقف بين ليلة وضحاها في الحساب التجريبي والفئة المجانية
- الأسئلة الشائعة
إذا كان SAP BTP Cockpit يرمي إليك الأخطاء، فالسبب على الأرجح واحد من خمسة أمور. خطأ 401 من مفتاح خدمة يكون في الغالب بسبب طلب OAuth لا بيانات الاعتماد. وخطأ Internal Server Error في Integration Suite يعني عادةً مجموعات أدوار ناقصة أو جلسة قديمة. وتأتي الروابط المعطلة من Booster أُعدّ قبل أن يتغير الحساب الفرعي. أما إخفاقات وجهات CAP فعادةً ما تكون عدم تطابق في الاسم أو ربطاً مفقوداً. والتطبيق الذي عمل أمس على حساب تجريبي قد يكون فقد قاعدة بياناته بين ليلة وضحاها. هذا الدليل موجّه إلى المطورين ومستشاري التكامل العاملين في حسابات Cloud Foundry الفرعية. ويخبرك جدول الفرز أدناه بما ينبغي فحصه أولاً.
في أول مرة رأيت فيها شريط الخطأ الأحمر في SAP BTP Cockpit، افترضت أنني ارتكبت خطأً ما. رابط خاطئ، أو جلسة منتهية.
وبعد المرة الثالثة أو الرابعة، اتضح أن الأمر لا يخصني وحدي.
وخلال الأسابيع التالية احتفظت بدفتر دوّنت فيه كل مرة يتعطل فيها شيء. أخطاء Internal Server Error عند فتح Integration Suite. وجهات تبدو سليمة وترفض الاتصال. وتطبيقات عملت أمس وتجمّدت اليوم. ظهرت أنماط. قليل منها موثّق في مكان مفيد، وCockpit نفسه لا يعطيك تقريباً ما تعمل به.
| العَرَض | السبب الأرجح | افحص أولاً |
|---|---|---|
| 401 Unauthorized عند استدعاء API بمفتاح خدمة | نوع منح أو عنوان رمز خاطئ أو صلاحيات ناقصة | فكّ ترميز الرمز واقرأ aud وscope |
| Internal Server Error عند فتح Integration Suite | مجموعات أدوار ناقصة أو جلسة قديمة | مجموعات الأدوار على مستخدمك، ثم تسجيل خروج كامل |
| يفتح Booster أو Tile صفحة فارغة أو خاطئة | تغيّر الحساب الفرعي بعد تشغيل Booster | تنقّل عبر شجرة Cockpit بدلاً من ذلك |
| تطبيق CAP: «destination not found» أو أخطاء مصادقة | عدم تطابق الاسم أو ربط مفقود أو نوع OData خاطئ | cds.requires وxs-app.json مقابل الاسم في Cockpit |
| التطبيق عمل أمس ويتجمد اليوم (حساب تجريبي) | توقفت نسخة HANA Cloud بين ليلة وضحاها | حالة نسخة قاعدة البيانات في SAP HANA Cloud Central |
تعمل بيئات Cloud Foundry وKyma وABAP على أساس SAP متعدد السحب، وهو الافتراضي للعملاء الجدد منذ 2020. أما بيئة Neo الأقدم فتتلقى تحديثات الأمن والامتثال فقط، وحددت SAP موعد إنهائها في 31 ديسمبر 2028. وتقريباً كل مشكلة أدناه هي مشكلة في Cloud Foundry.
وهناك تغييران في الأسماء لا يزالان يربكان قارئي الأدلة الأقدم. فقد صارت خدمة SAP Launchpad هي SAP Build Work Zone، الإصدار القياسي، في يناير 2023. وأُعيد بناء كثير من Tile وBooster مع نمو SAP Build، فكثيراً ما لا تطابق لقطات الشاشة من 2022 ما تراه الآن.
وفي RISE with SAP، يصل BTP عادةً استحقاقاً قائماً على الأرصدة داخل العقد. وCockpit هو نفسه. أما المختلف فهو من يتحكم في الحساب العام (global account) داخل مؤسستك، فاعثر على ذلك الشخص قبل أن تحتاج إلى استحقاق جديد.
تنشئ نسخة خدمة، وتولّد مفتاح خدمة، وتنسخ معرّف العميل والسر إلى Postman، وتضيف عنوان الرمز وترسل الطلب. 401. دون أي تفصيل.
تنسخ السر مرة أخرى. لا يزال يفشل. الخدمة سليمة. أما تدفق OAuth فلا.
ما ينبغي فحصه، بالترتيب:
- نوع المنح. يستخدم الوصول التقني إلى معظم واجهات خدمات BTP نوع
client_credentials. اضبطه صراحةً في Postman. لا تثق بالقيمة الافتراضية. - عنوان الرمز. خذه من مفتاح الخدمة. بعض المفاتيح تعطي
tokenurl؛ وأخرى تعطيurlالخاص بـ XSUAA، وتُلحق به/oauth/token. لا تستعر عنواناً من حساب فرعي آخر أبداً. - الترويسات. في استدعاء الرمز المباشر، أرسل
Content-Type: application/x-www-form-urlencodedوAuthorization: Basic <base64(clientid:clientsecret)>. - الصلاحيات. مع client credentials، يحمل الرمز فقط النطاقات الممنوحة لنسخة الخدمة تلك. وإذا كانت واجهة API تحتاج دوراً لا تملكه النسخة، فستحصل على رمز، وستظل الواجهة ترفض. أصلح ذلك في معاملات النسخة (مثل الأدوار في نسخة خطة API في Integration Suite)، لا في الطلب.
- الجمهور (Audience). إذا كان لديك رمز ورفضته الواجهة، فكّ ترميزه واقرأ المطالبة
aud. فإن لم تطابق الواجهة التي تستدعيها، فأنت تستخدم مفتاحاً من نسخة خدمة خاطئة.
تفتح Integration Suite وتظهر لك لافتة حمراء «Internal Server Error». لا سجل. تعيد التحميل، وتجرب متصفحاً آخر، والنتيجة نفسها.
يحدث ذلك عادةً بعد أن تُترك الخدمة دون استخدام لفترة: تُفتح صباحاً، وتُترك ساعات، ثم تُستخدم لاحقاً. وتشير نقاشات مجتمع SAP وقاعدة معارفها إلى سببين معتادين: مجموعات الأدوار الناقصة والجلسات القديمة.
ما يحلها عادةً:
- افحص مجموعات الأدوار. يحتاج مستخدمك إلى
Integration_Provisionerلإعداد المستأجر (tenant)، ومجموعات الأدوارPI_ذات الصلة (المسؤول ومطور التكامل وخبير الأعمال) للعمل فيه. عيّنها في الحساب الفرعي ضمن Security. - سجّل الخروج تماماً. لا تصل تغييرات الأدوار إلى جلستك إلا بعد تسجيل دخول جديد. أغلق كل تبويبات BTP وIntegration Suite، وسجّل الخروج، ثم سجّل الدخول من جديد.
- امسح ملفات تعريف الارتباط لنطاقات BTP إذا بقي الخطأ بعد تسجيل دخول جديد. فقد يعيش ملف تعريف ارتباط الجلسة القديمة أطول من الجلسة.
- استخدم جلسة Cockpit واحدة. تسبب التبويبات أو ملفات تعريف المتصفح المتعددة على الحساب الفرعي نفسه تضارباً في الجلسات يبدو تماماً كهذا الخطأ.
المشكلة الحقيقية هي الرؤية. فـ Cockpit لا يخبرك بشيء عما فشل، فينتهي بك الأمر إلى التخمين. اعمل على القائمة بالترتيب بدلاً من ذلك. ولنظرة أوسع على أسباب تعثر برامج التكامل، راجع مقالتي عن تأخيرات تسليم SAP Integration Suite.
تنقر «Go to Application» فتظهر شاشة فارغة أو صفحة هبوط عامة أو إعادة توجيه لا معنى لها.
وهي تتبع أنماطاً:
- تنكسر روابط Booster حين يتغير إعداد الحساب الفرعي بعد تشغيل Booster. فتشير إعادة التوجيه إلى موضع لم يعد موجوداً.
- تعمل Tile الخاصة بـ Integration Suite أحياناً، وتخطئ أحياناً، وتنتهي مهلتها أحياناً، عادةً لأسباب الجلسات المذكورة أعلاه.
- تُظهر روابط SAP Build Work Zone «connection denied» حين يكون الاشتراك موجوداً لكن مستخدمك يفتقر إلى مجموعة الأدوار الخاصة بالموقع.
- تفتح التبويبات أو ملفات تعريف المتصفح المتعددة الروابط في سياقات منتهية.
ما ينجح: تنقّل عبر شجرة Cockpit (الحساب الفرعي، ثم Services، ثم Instances وSubscriptions)، وضع علامات مرجعية على العناوين المباشرة لـ Integration Suite والوجهات وWork Zone. استخدم جلسة واحدة في ملف تعريف متصفح نظيف. فحين يفشل رابط في كل مرة ثالثة، تتوقف عن الوثوق بالمنصة وتبدأ ببناء حلول التفافية. والعلامات المرجعية أرخص حل التفافي موجود. وإذا كنت لا تزال تتلمس طريقك، فإن شرحي لـ BTP Cockpit يغطي التنقل الأساسي.
تنشر تطبيق CAP، وتهيّئ وجهة في Cockpit، ولا تزال الطلبات تفشل بـ «destination not found» أو بأخطاء المصادقة. الوجهة مدرجة. والتطبيق يعمل. ورسائل الخطأ لا تشير إلى شيء مفيد.
توثيق CAP لدى SAP واضح في كيفية ربط ذلك: تُعلن الخدمة البعيدة ضمن cds.requires في package.json (أو .cdsrc.json) مع kind، ويوضع اسم الوجهة تحت credentials.destination. ويحتاج التطبيق أيضاً إلى ارتباطات بخدمة Destination وXSUAA معاً. ومعظم الإخفاقات انقطاع في مكان ما من هذه السلسلة.
- cds.requiresيعلن الخدمة البعيدة ونوعها واسم الوجهة
- ملف Productionيحمل بيانات اعتماد الوجهة بعد النشر
- ارتباطات الخدماتالتطبيق مرتبط بـ Destination وXSUAA
- الوجهة في Cockpitالاسم نفسه في cds.requires وxs-app.json، بما في ذلك حالة الأحرف
- الخدمة البعيدةodata-v2 لخدمة V2 وodata لـ V4
تصل الطلبات إلى الخدمة البعيدة
| العَرَض | الحل |
|---|---|
| الوجهة مدرجة لكن التطبيق لا يجدها | قارن الاسم في cds.requires ومسارات xs-app.json بالاسم في Cockpit، حرفاً بحرف، بما في ذلك حالة الأحرف |
| يعمل محلياً ويفشل بعد النشر | تحقق من أن ملف [production] يحمل فعلاً بيانات اعتماد الوجهة، وأن التطبيق مرتبط بـ Destination وXSUAA |
| خدمة OData V2 بعيدة تعيد أخطاء | اضبط kind على odata-v2 لخدمة V2 وعلى odata لـ V4. واستخدم V4 حيثما سمح الطرفان |
| تطبيق UI5 يحتاج V2 لكن خدمة CAP لديك V4 | أضف الإضافة @cap-js-community/odata-v2-adapter. أما @sap/cds-odata-v2-adapter-proxy الأقدم فقد أُوقف العمل به |
| تفشل المصادقة مع بيانات اعتماد صحيحة | ابدأ بـ OAuth2ClientCredentials أو BasicAuthentication. ولا تستخدم SAML أو نشر الهوية (principal propagation) إلا حين يتطلبها السيناريو |
| لست متأكداً من إمكان الوصول إلى الهدف أصلاً | استخدم «Check Connection» على الوجهة في Cockpit قبل أن تتتبع أخطاء التطبيق |
الفرق التي تتعامل مع هذا جيداً تحتفظ بقائمة تحقق قصيرة للوجهات لكل تطبيق. ليس لأن الإعداد معقد. بل لأن افتراضاً خاطئاً واحداً حول الاسم أو الربط أو نوع OData يفشل بصمت ويستغرق اكتشافه وقتاً أطول بكثير من منعه.
يقدّم SAP BTP Cockpit ملاحظات قليلة جداً حين يتعطل شيء. ومعظم تتبّع الأخطاء يجري بالتجربة والخطأ. ومعرفة الأنماط توفر الساعات.
تطبيق CAP عمل أمس صار يتجمد. لا خطأ. يعرضه Cockpit قيد التشغيل. تعيد تشغيله. لا شيء.
افحص قاعدة البيانات أولاً. فـالدليل التعليمي لـ HANA Cloud التجريبي من SAP نفسها ينص على أن نسخ الفئة المجانية تتوقف كل ليلة ويجب إعادة تشغيلها في كل يوم تعمل فيه. ويدوم الحساب التجريبي نفسه حتى 90 يوماً إذا سجّلت الدخول بانتظام. تطبيقك سليم. أما قاعدة بياناته فنائمة.
ما يفيد:
- أعد تشغيل نسخة HANA Cloud من SAP HANA Cloud Central قبل أن تبدأ تتبع الشيفرة.
- استخدم واجهة سطر الأوامر (
cf appsوcf services) لرؤية استهلاك الذاكرة والخدمات. فواجهة Cockpit تعرض أقل بكثير. - احذف نسخ الخدمات غير المستخدمة قبل إنشاء نسخ جديدة. فحصص الحساب التجريبي تنطبق على الحساب كله لا على تطبيق واحد.
- أبقِ أعمال العروض التوضيحية والاختبار في حسابات فرعية منفصلة.
وإذا كنت تحتاج إلى أكثر من تطبيق وقاعدة بيانات واحدة تعملان بموثوقية، أو إلى وقت تشغيل مستقر للعروض، فانتقل إلى حساب إنتاجي. يمكن ترقية خطط الفئة المجانية في الحساب الإنتاجي إلى مدفوعة دون فقدان عملك، وهو ما لا يتيحه الحساب التجريبي.
لماذا أحصل على خطأ 401 مع بيانات اعتماد مفتاح خدمة SAP BTP حتى عندما تبدو صحيحة؟
في الغالب بسبب طلب OAuth لا بيانات الاعتماد. والأسباب المعتادة هي نوع المنح الخاطئ (استخدم client_credentials للوصول التقني)، أو عنوان رمز لا يطابق مفتاح الخدمة، أو ترويسات خاطئة في استدعاء الرمز.
وإذا حصلت على رمز وما زالت الواجهة ترفضه، ففكّ ترميزه. تحقق من أن المطالبة aud تطابق الواجهة، وافحص النطاقات. ومع client credentials تأتي النطاقات من الصلاحيات الممنوحة لنسخة الخدمة، فأصلح الأدوار الناقصة في معاملات النسخة.
ما سبب أخطاء Internal Server Error عند فتح Integration Suite في BTP Cockpit؟
في الغالب مجموعات أدوار ناقصة أو جلسة قديمة. تأكد من أن مستخدمك يملك Integration_Provisioner ومجموعات الأدوار PI_ التي تحتاجها. ثم أغلق كل تبويبات BTP وسجّل الخروج وأعد الدخول، لأن الأدوار الجديدة لا تسري إلا بعد تسجيل دخول جديد.
وإذا استمر الخطأ، فامسح ملفات تعريف الارتباط لنطاقات BTP والتزم بجلسة Cockpit واحدة. فالتبويبات المتعددة على الحساب الفرعي نفسه تثير الخطأ ذاته.
لماذا يفشل تطبيق CAP في الاتصال بوجهة تظهر صحيحة في Cockpit؟
عادةً بسبب عدم تطابق في التسمية. يجب أن يطابق اسم الوجهة في cds.requires وفي مسارات xs-app.json ما في Cockpit تماماً، بما في ذلك حالة الأحرف.
وإذا كان الاسم صحيحاً، فتحقق من أن التطبيق مرتبط بخدمة Destination وXSUAA معاً، وأن ملف [production] يحمل بيانات الاعتماد، وأن kind يطابق الخدمة البعيدة: odata-v2 لـ V2 وodata لـ V4. واستخدم «Check Connection» في Cockpit للتأكد من إمكان الوصول إلى الهدف.
لماذا يتوقف تطبيق SAP BTP التجريبي عن العمل بين ليلة وضحاها؟
في الخطط التجريبية وخطط الفئة المجانية، تُوقَف نسخ SAP HANA Cloud كل ليلة لتوفير الموارد. يواصل تطبيقك العمل لكنه لا يستطيع الوصول إلى قاعدة بياناته. أعد تشغيل النسخة في SAP HANA Cloud Central كل يوم قبل أن تبدأ العمل.
واستخدم cf apps وcf services لفحص استهلاك الذاكرة والخدمات، لأن حصص الحساب التجريبي يصعب رؤيتها في Cockpit. واحذف النسخ غير المستخدمة قبل إنشاء نسخ جديدة.
لماذا تؤدي الروابط داخل Booster وTile إلى صفحات فارغة؟
تنكسر روابط Booster حين يتغير هيكل الحساب الفرعي بعد تشغيل Booster. فتشير إعادة التوجيه إلى موضع لم يعد موجوداً أو لم يُهيَّأ بالكامل قط.
تنقّل عبر شجرة Cockpit بدلاً من ذلك، وضع علامات مرجعية على العناوين المباشرة لـ Integration Suite والوجهات وSAP Build Work Zone. ولا تعتمد على التنقل الذي يولّده Booster في أي شيء تستخدمه يومياً.
متى ينبغي أن أنتقل من حساب BTP تجريبي إلى خطة مدفوعة؟
حين تبدأ القيود في إهدار وقتك. فإذا كنت تشغّل أكثر من تطبيق أو قاعدة بيانات، أو تحتاج وقت تشغيل مستقراً للعروض أو الاختبار، فإن الحساب التجريبي يسبب احتكاكاً أكثر مما يوفر.
والمكاسب الرئيسية هي الاستقرار ووضوح رؤية الموارد، لا ميزات جديدة. والحساب الإنتاجي بخطط الفئة المجانية خطوة وسطى جيدة: يمكنك ترقية تلك الخطط إلى مدفوعة لاحقاً دون إعادة بناء أي شيء.
الخطوة التالية
هل تدير برنامج ERP الآن؟
إذا مسّ هذا المقال برنامجاً أنت في خضمه الآن، فإن حديثاً مدته 30 دقيقة يوصلك عادةً أبعد من أسبوع آخر من التحليل الداخلي.




