تحديد المشاكل وحلّها

حتى المطور الأكثر خبرة نادرًا ما يكتب التعليمات البرمجية بشكل صحيح عند المحاولة الأولى، مما يجعل استكشاف الأخطاء وإصلاحها جزءًا مهمًا من عملية التطوير. وسنتناول في هذا القسم بعض الأساليب التي يمكن أن تساعدك في العثور على الأخطاء في النصوص البرمجية وفهمها وتصحيحها.

رسائل الخطأ

عندما يواجه النص البرمجي خطأً، تظهر رسالة خطأ. تكون الرسالة مصحوبة برقم سطر يُستخدم لتحديد المشاكل وحلّها. وهناك نوعان أساسيان من الأخطاء التي يتم عرضها بهذه الطريقة: أخطاء البنية وأخطاء وقت التشغيل.

أخطاء في البنية

تحدث أخطاء البنية بسبب كتابة رمز برمجي لا يتبع القواعد النحوية في JavaScript، ويتم اكتشاف الأخطاء فور محاولة حفظ النص البرمجي. على سبيل المثال، يحتوي مقتطف الرمز التالي على خطأ في البنية:

function emailDataRow(rowNumber) {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var rowData = data[rowNumber-1].join(" ";
  MailApp.sendEmail('john@example.com',
                    'Data in row ' + rowNumber,
                    rowData);
}

مشكلة البنية هذه هي عدم توفّر حرف ) في نهاية السطر الرابع. عند محاولة حفظ النص البرمجي، سيظهر لك الخطأ التالي:

لا يمكن العثور على ) بعد قائمة الوسيطات. (السطر 4)

عادةً ما يكون من السهل استكشاف أخطاء هذه الأنواع من الأخطاء وإصلاحها، نظرًا لأنها توجد على الفور وعادةً ما تكون لها أسباب بسيطة. لا يمكنك حفظ ملف يحتوي على أخطاء في بناء الجملة، مما يعني أنه يتم حفظ التعليمات البرمجية الصالحة فقط في مشروعك.

أخطاء بيئة التشغيل

تحدث هذه الأخطاء عن طريق استخدام دالة أو فئة بشكل غير صحيح، ولا يمكن اكتشافها إلا بعد تشغيل النص البرمجي. على سبيل المثال، تؤدي الكود التالي إلى حدوث خطأ في بيئة التشغيل:

function emailDataRow(rowNumber) {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var rowData = data[rowNumber-1].join(" ");
  MailApp.sendEmail('john',
                    'Data in row ' + rowNumber,
                    rowData);
}

تم تنسيق الرمز بشكلٍ صحيح، لكننا نمرر القيمة "john" لعنوان البريد الإلكتروني عند الاتصال بـ MailApp.sendEmail. نظرًا لأن هذا ليس عنوان بريد إلكتروني صالحًا، يتم عرض الخطأ التالي عند تشغيل النص البرمجي:

البريد الإلكتروني غير صالح: هاني (السطر 5)

ما يجعل هذه الأخطاء أكثر صعوبة في استكشاف الأخطاء وإصلاحها هو أنه غالبًا ما لا تتم كتابة البيانات التي تدخلها إلى دالة في التعليمات البرمجية، ولكن يتم سحبها بدلاً من ذلك من جدول بيانات أو نموذج أو مصدر بيانات خارجي آخر. يمكن أن يساعدك استخدام أساليب تصحيح الأخطاء أدناه في تحديد سبب هذه الأخطاء.

الأخطاء الشائعة

في ما يلي قائمة بالأخطاء الشائعة وأسبابها.

تم الاتصال بالخدمة لعدد كبير جدًا من المرات: <action name>

يشير هذا الخطأ إلى أنك تجاوزت حصتك اليومية لإجراء معين. على سبيل المثال، قد تواجه هذا الخطأ إذا كنت ترسل عددًا كبيرًا جدًا من رسائل البريد الإلكتروني في يوم واحد. يتم تحديد الحصص على مستويات مختلفة لحسابات المستهلكين والنطاق والحسابات المميزة، وهي عرضة للتغيير في أي وقت دون إعلان مسبق من Google. يمكنك الاطّلاع على الحصص المسموح بها لإجراءات مختلفة في مستندات حصة "برمجة تطبيقات Google".

الخادم غير متاح. أو حدث خطأ في الخادم، يُرجى إعادة المحاولة.

هناك بضعة أسباب محتملة لهذه الأخطاء:

  • عدم إتاحة خادم أو نظام Google مؤقتًا انتظر بضع لحظات وجرب تشغيل النص البرمجي مرة أخرى.
  • هناك خطأ في النص البرمجي لا يتضمن رسالة خطأ مقابلة. جرِّب تصحيح أخطاء النص البرمجي ومعرفة ما إذا كان بإمكانك عزل المشكلة.
  • هناك خطأ في "برمجة تطبيقات Google" يتسبّب في حدوث هذا الخطأ. للحصول على تعليمات حول البحث عن تقارير الأخطاء وتقديمها، راجِع الأخطاء. قبل تقديم خطأ جديد، ابحث لمعرفة ما إذا كان الآخرون قد أبلغوا عنه بالفعل.

يجب الحصول على إذن لتنفيذ هذا الإجراء.

يشير هذا الخطأ إلى أنّ النص البرمجي يفتقد إلى التفويض اللازم للتشغيل. عند تشغيل نص برمجي في "محرِّر النصوص البرمجية" أو من عنصر قائمة مخصَّصة، يتم عرض مربّع حوار للتفويض للمستخدم. ومع ذلك، عند تشغيل نص برمجي من مشغِّل، أو مضمّن في صفحة "مواقع Google"، أو عند تشغيله كخدمة، لا يمكن عرض مربّع الحوار ويتم عرض هذا الخطأ.

للسماح بالنص البرمجي، افتح "محرِّر النصوص البرمجية" وشغِّل أي دالة. يظهر طلب التفويض حتى تتمكن من تفويض مشروع النص البرمجي. إذا كان النص البرمجي يحتوي على خدمات جديدة غير مصرَّح بها، عليك إعادة تفويض النص البرمجي.

غالبًا ما يحدث هذا الخطأ بسبب العوامل المُشغِّلة التي يتم تنشيطها قبل أن يسمح المستخدم لها. إذا لم يكن بإمكانك الوصول إلى مشروع النص البرمجي (لأنّ الخطأ يحدث عند إضافة تستخدمها مثلاً)، يمكنك عادةً تفويض النص البرمجي باستخدام الإضافة مرة أخرى. إذا استمرّ تنشيط العامل المشغِّل وتسبب هذا الخطأ، يمكنك إزالة المشغلات عن طريق تنفيذ ما يلي:

  1. على يمين مشروع "برمجة التطبيقات"، انقر على رمز العوامل المشغِّلة .
  2. على يسار المشغِّل الذي تريد إزالته، انقر على رمز المزيد > حذف المشغِّل.

يمكنك أيضًا إزالة مشغِّلات الإضافات المسببة للمشاكل عن طريق إلغاء تثبيت الإضافة.

تم رفض الوصول: DriveApp أو أوقفت سياسة النطاق تطبيقات Drive التابعة لجهات خارجية

بإمكان مشرفي Google Workspace النطاقات إيقاف Drive API لنطاقاتهم، ما يمنع المستخدمين من تثبيت تطبيقات Google Drive واستخدامها. يمنع هذا الإعداد أيضًا المستخدمين من استخدام إضافات "برمجة تطبيقات Google" التي تستخدم خدمة Drive أو خدمة Drive المتقدّمة (حتى إذا تم السماح بالنص البرمجي قبل إيقاف المشرف لواجهة برمجة تطبيقات Drive).

ومع ذلك، إذا تم نشر إضافة أو تطبيق ويب يستخدم خدمة Drive للتثبيت على مستوى النطاق وتم تثبيته من قِبل المشرف لبعض المستخدمين أو جميعهم في النطاق، سيعمل النص البرمجي لهؤلاء المستخدمين حتى إذا كانت واجهة برمجة تطبيقات Drive غير مفعّلة في النطاق.

لا يملك النص البرمجي إذنًا للحصول على هوية المستخدم النشط.

يشير إلى أنّ هوية المستخدم النشط وعنوان بريده الإلكتروني غير متاح للنص البرمجي. نتج هذا التحذير عن مكالمة إلى Session.getActiveUser(). قد ينتج أيضًا عن استدعاء Session.getEffectiveUser() إذا كان النص البرمجي قيد التشغيل في وضع تفويض غير AuthMode.FULL. في حال تمت الإشارة إلى هذا التحذير، لن تعرض المكالمات اللاحقة على User.getEmail() إلا علامة "".

تتوفر عدة طرق لتحديد مشاكل هذا التحذير وحلّها، بناءً على وضع التفويض الذي يعمل به النص البرمجي. يظهر وضع التفويض في الدوال المشغّلة باعتبارها السمة authMode eلمَعلمة الحدث.

  • في AuthMode.FULL، يمكنك استخدام Session.getEffectiveUser() بدلاً من ذلك.
  • في AuthMode.LIMITED، تأكَّد من أنّ المالك قد فوّض النص البرمجي.
  • في أوضاع التفويض الأخرى، تجنَّب استدعاء أي من الطريقتين.
  • إذا كنت من العملاء Google Workspace الذين ظهرت لهم مؤخرًا هذا التحذير من عامل تشغيل قابل للتثبيت، تأكَّد من أنّه يعمل كمستخدم داخل مؤسستك.

المكتبة غير متوفّرة

إذا أضفت مكتبة شائعة إلى النص البرمجي، قد تظهر لك رسالة خطأ تشير إلى عدم توفّرها، على الرغم من إدراج المكتبة كمكتبة تابعة لنصك البرمجي. قد يكون السبب أن عددًا كبيرًا جدًا من الأشخاص يدخلون إلى المكتبة في نفس الوقت. لتجنُّب هذا الخطأ، جرِّب أحد الحلول التالية:

  • انسخ رمز المكتبة والصقه في النص البرمجي وأزِل تبعية المكتبة.
  • انسخ النص البرمجي للمكتبة وانشره كمكتبة من حسابك. تأكد من تحديث التبعية في النص البرمجي الأصلي إلى المكتبة الجديدة بدلاً من المكتبة العامة.

حدث خطأ بسبب عدم توفّر إصدار مكتبة أو إصدار نشر. رمز الخطأ Not_Found

تشير رسالة الخطأ هذه إلى أحد ما يلي:

  • تم حذف الإصدار المنشور من النص البرمجي. لتحديث النسخة المنشورة من النص البرمجي، يُرجى الاطّلاع على تعديل عملية النشر المستندة إلى نُسخ.
  • تم حذف إصدار المكتبة الذي يستخدمه النص البرمجي. للاطّلاع على المكتبة غير المتوفّرة، انقر بجانب اسم المكتبة على المزيد > فتح في علامة تبويب جديدة. تعطي المكتبة المفقودة رسالة خطأ. بعد العثور على المكتبة التي تحتاج إلى تحديثها، اتّخِذ أحد الإجراءات التالية:
    • عليك تحديث المكتبة لاستخدام إصدار مختلف. يُرجى الاطّلاع على تحديث مكتبة.
    • أزِل المكتبة المحذوفة من مشروع النص البرمجي والرمز البرمجي. يمكنك الاطّلاع على كيفية إزالة مكتبة.
  • يتضمن النص البرمجي للمكتبة الذي يستخدمه النص البرمجي مكتبة أخرى تستخدم نسخة محذوفة. اتّخِذ أحد الإجراءات التالية:
    • إذا كانت لديك إمكانية التعديل في المكتبة التي يستخدمها النص البرمجي، عليك تعديل المكتبة الثانوية في هذا النص البرمجي إلى نسخة حالية.
    • عليك تحديث المكتبة لاستخدام إصدار مختلف. يُرجى الاطّلاع على تحديث مكتبة.
    • أزِل المكتبة من مشروع النص البرمجي والرمز البرمجي يمكنك الاطّلاع على كيفية إزالة مكتبة.

Error 400: invalid_scope عند طلب استخدام Google Chat API من خلال الخدمة المتقدّمة

إذا ظهرت لك رسالة الخطأ Some requested scopes cannot be shown في Error 400: invalid_scope، يعني ذلك أنّك لم تحدّد أي نطاقات أذونات في ملف appsscript.json الخاص بمشروع "برمجة تطبيقات Google". في معظم الحالات، تحدِّد "برمجة التطبيقات" تلقائيًا النطاقات التي يحتاجها النص البرمجي، ولكن عند استخدام خدمة Chat المتقدّمة، عليك إضافة نطاقات الأذونات التي يستخدمها النص البرمجي يدويًا إلى ملف بيان مشروع "برمجة تطبيقات Google". راجِع ضبط نطاقات صريحة.

لحل هذا الخطأ، أضِف نطاقات التفويض المناسبة إلى ملف appsscript.json في مشروع "برمجة تطبيقات Google" كجزء من مصفوفة oauthScopes. على سبيل المثال، لطلب إجراء spaces.messages.create، أضِف ما يلي:

"oauthScopes": [
  "https://www.googleapis.com/auth/chat.messages.create"
]

تصحيح الأخطاء

لا تؤدي بعض الأخطاء إلى عرض رسالة خطأ. قد يكون هناك خطأ أكثر دقّة حيث تكون التعليمة البرمجية صحيحة من الناحية الفنية ويمكن تنفيذها، لكن النتائج لا تتوقعها. إليك بعض الاستراتيجيات للتعامل مع مثل هذه المواقف وإجراء مزيد من التحقيق في نص برمجي لا يعمل بالشكل الذي تتوقعه.

التسجيل

في حين أنه غالبًا ما يكون من المفيد تسجيل المعلومات أثناء تنفيذ مشروع نص برمجي. تتوفر طريقتان لتسجيل المعلومات في "برمجة تطبيقات Google" وهما: خدمة تسجيل السحابة الإلكترونية وخدمات تسجيل الأدوات ووحدة التحكم الأساسية المضمّنة في محرِّر "برمجة تطبيقات Google".

اطّلِع على دليل التسجيل للحصول على المزيد من التفاصيل.

Error Reporting

يتم تلقائيًا تسجيل الاستثناءات التي تحدث بسبب أخطاء وقت التشغيل باستخدام خدمة الإبلاغ عن الأخطاء في Google Cloud. تتيح لك هذه الخدمة البحث عن رسائل الاستثناءات وفلترتها التي ينشئها مشروع النص البرمجي.

للوصول إلى صفحة "إعداد تقارير الأخطاء"، يُرجى الاطّلاع على عرض سجلات Cloud وتقارير الأخطاء في وحدة تحكُّم Google Cloud Platform.

عمليات التنفيذ

في كل مرة يتم فيها تشغيل نص برمجي، تسجّل "برمجة التطبيقات" سجلاً لعملية التنفيذ، بما في ذلك سجلات السحابة الإلكترونية. ويمكن أن تساعدك هذه السجلّات في فهم الإجراءات التي نفّذها النص البرمجي.

للاطّلاع على عمليات تنفيذ النص البرمجي في مشروع "برمجة التطبيقات"، انقر على عمليات التنفيذ على يمين الصفحة.

جارٍ التحقّق من حالة خدمة "برمجة تطبيقات Google"

على الرغم من ندرة حدوث ذلك، إلا أنّ بعض خدمات Google Workspace (مثل Gmail أو Drive) قد تواجه أحيانًا مشاكل مؤقتة يمكن أن تؤدي إلى انقطاع الخدمة. عند حدوث ذلك، قد لا تعمل مشاريع "برمجة تطبيقات Google" التي تتفاعل مع هذه الخدمات على النحو المتوقّع.

يمكنك التحقّق مما إذا كان هناك انقطاع في خدمة Google Workspace من خلال الاطّلاع على لوحة بيانات حالة Google Workspace. إذا واجهت مشكلة في الوقت الحالي، يمكنك إما الانتظار إلى أن يتم حلّها أو طلب مساعدة إضافية في مركز مساعدة Google Workspace أو مستندات المشاكل المعروفة في Google Workspace.

استخدام برنامج تصحيح الأخطاء ونقاط الإيقاف

للعثور على المشاكل في النص البرمجي، يمكنك تشغيله في وضع تصحيح الأخطاء. عند التنفيذ في وضع تصحيح الأخطاء، يتوقف النص البرمجي مؤقتًا عندما يصل إلى نقطة فاصلة، وهي عبارة عن سطر ميّزته في النص البرمجي تعتقد أنّه قد يتضمّن مشكلة. عندما يتوقّف النص البرمجي مؤقتًا، فإنه يعرض قيمة كل متغير في تلك المرحلة الزمنية، ما يسمح لك بفحص الأعمال الداخلية للنص البرمجي دون الحاجة إلى إضافة الكثير من عبارات التسجيل.

إضافة نقطة إيقاف

لإضافة نقطة فاصلة، مرِّر مؤشر الماوس فوق رقم سطر السطر الذي تريد إضافته. على يمين رقم السطر، انقر على الدائرة. توضِّح الصورة أدناه مثالاً على نقطة توقّف تمت إضافتها إلى نص برمجي:

إضافة نقطة إيقاف

تنفيذ نص برمجي في وضع تصحيح الأخطاء

لتشغيل النص البرمجي في وضع تصحيح الأخطاء، انقر على تصحيح الأخطاء في أعلى المحرِّر.

قبل أن ينفِّذ النص البرمجي السطر الذي يتضمّن نقطة الإيقاف، يتوقّف مؤقتًا ويعرض جدولاً يتضمّن معلومات تصحيح الأخطاء. يمكنك استخدام هذا الجدول لفحص بيانات مثل قيم المعلَمات والمعلومات المخزَّنة في العناصر.

للتحكّم في كيفية تشغيل النص البرمجي، استخدِم أزرار "الدخول" و"التخطّي" و"الخروج" في أعلى لوحة "برنامج تصحيح الأخطاء". تتيح لك هذه الأدوات تشغيل النص البرمجي سطرًا واحدًا في كل مرة وفحص كيفية تغيّر القيم بمرور الوقت.

مشاكل في حسابات متعددة على Google

إذا كنت مسجّلاً الدخول إلى حسابات متعددة على Google في الوقت نفسه، قد تواجه مشكلة في الوصول إلى الإضافات وتطبيقات الويب. لا تتوفر إمكانية تسجيل الدخول المتعدد أو تسجيل الدخول إلى حسابات Google متعددة في الوقت نفسه لبرمجة التطبيقات أو الإضافات أو تطبيقات الويب.

  • إذا فتحت محرِّر "برمجة تطبيقات Google" أثناء تسجيل الدخول إلى أكثر من حساب واحد، ستطلب منك Google اختيار الحساب الذي تريد المتابعة باستخدامه.

  • إذا فتحت تطبيق ويب أو إضافة وواجهت مشاكل في تسجيل الدخول المتعدد، جرِّب أحد الحلول التالية:

    • سجِّل الخروج من جميع حساباتك في Google وسجِّل الدخول فقط إلى الحساب الذي يتضمن الإضافة أو تطبيق الويب الذي تريد الوصول إليه.
    • افتح نافذة التصفح المتخفي في Google Chrome، أو نافذة مكافئة للتصفح بخصوصية تامة، وسجّل الدخول إلى حساب Google الذي يتضمن الإضافة أو تطبيق الويب الذي تريد الوصول إليه.

الحصول على المساعدة

يمكن أن يؤدي تصحيح مشكلة ما باستخدام الأدوات والتقنيات المذكورة أعلاه إلى حل مجموعة متنوعة من المشكلات، ولكن قد تكون هناك مشكلات تواجهها وتتطلب مساعدة إضافية لحلها. راجع صفحة الدعم للحصول على معلومات حول أين يمكن طرح الأسئلة والإبلاغ عن الأخطاء.