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

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

رسائل الخطأ

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

أخطاء البنية

تحدث أخطاء الصياغة عندما لا يتّبع الرمز القواعد النحوية للغة 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. عند حفظ النص البرمجي، يظهر الخطأ التالي:

علامة ) غير متوفّرة بعد قائمة الوسيطات. (السطر 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" هو عنوان بريد إلكتروني غير صالح. يظهر الخطأ التالي:

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

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

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

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

تم تفعيل الخدمة مرات كثيرة جدًا: <اسم الإجراء>

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

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

تشمل الأسباب المحتملة ما يلي:

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

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

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

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

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

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

يمكنك بدلاً من ذلك إلغاء تثبيت الإضافة.

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

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

يمكن لمشرفي Google Workspace إيقاف Drive API لنطاقهم، ما يمنع المستخدمين من استخدام تطبيقات Drive أو إضافات "برمجة تطبيقات Google" التي تستخدم خدمة Drive.

إذا تم نشر إضافة أو تطبيق ويب من أجل التثبيت على مستوى النطاق وتم تثبيتهما من قِبل مشرف، ستعمل وظائف النص البرمجي حتى إذا تم إيقاف Drive API.

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

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

يمكنك تحديد المشكلة وحلّها استنادًا إلى وضع التفويض:

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

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

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

  • انسخ رمز المكتبة مباشرةً إلى النص البرمجي.
  • انسخ المكتبة ونفِّذها من حسابك.
  • إذا لم تكن المكتبة مطلوبة لكي يعمل النص البرمجي، عليك إزالة المكتبة من مشروع النص البرمجي.

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

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

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

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

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

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

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

لا يسمح المشرف في مؤسستك باستدعاءات UrlFetch لـ <URL>

يمكن لمشرفي Google Workspace استخدام قائمة مسموح بها للتحكّم في إمكانية الوصول إلى النطاقات الخارجية. يُرجى التواصل مع المشرف لإضافة عنوان URL إلى قائمة السماح.

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

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

التسجيل

تسجيل المعلومات أثناء تنفيذ البرنامج النصي باستخدام خدمة تسجيل السحابة الإلكترونية أو خدمات المسجّل ووحدة التحكّم في أداة تعديل النصوص البرمجية

Error Reporting

لاستخدام Error Reporting في Google Cloud، استخدِم مشروعًا عاديًا يديره المستخدم بدلاً من مشروع تلقائي.

عند استخدام مشروع عادي، يتم تسجيل أخطاء وقت التشغيل تلقائيًا في Google Cloud Error Reporting. عرض سجلّات Cloud وتقارير الأخطاء في Google Cloud Console

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

تسجّل "برمجة تطبيقات Google" كل عملية تنفيذ، بما في ذلك سجلّات Cloud. لعرض عمليات التنفيذ، انقر على عمليات التنفيذ .

التحقّق من حالة الخدمة

يمكنك التحقّق من انقطاع خدمات Google Workspace عن العمل من خلال لوحة بيانات حالة Google Workspace.

استخدام أداة تصحيح الأخطاء ونقاط التوقّف

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

إضافة نقطة توقّف

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

إضافة نقطة توقّف

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

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

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

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

خطأ: لا يتوفّر رمز المصدر للسطر الحالي

لا يتوفّر رمز المصدر للسطر الحالي.

يظهر هذا الخطأ عندما لا يتوفّر ملف تصحيح أخطاء نشط. لا تتيح &quot;برمجة تطبيقات Google&quot; عرض النصوص البرمجية التي يتم إنشاؤها ديناميكيًا بلغة JavaScript (JS) في أداة تعديل النصوص البرمجية، مثل النصوص التي يتم إنشاؤها باستخدام eval() وnew Function(). يتم إنشاء هذه النصوص البرمجية وتنفيذها ضمن محرك V8، ولكن لا يتم تمثيلها كملفات مستقلة في المحرر. إذا نفّذت هذه البرامج النصية خطوة بخطوة، سيظهر لك هذا الخطأ.

على سبيل المثال، فكِّر في الرمز التالي:

function myFunction() {
  eval('a=2');
}

عند استدعاء eval()، يتم التعامل مع وسيطته على أنّها رمز JS ويتم تشغيلها كنص برمجي تم إنشاؤه ديناميكيًا داخل محرّك V8. يظهر هذا الخطأ عند استخدام ميزة eval(). إذا كان النص البرمجي يتضمّن تعليقًا //# sourceURL، سيظهر اسمه في حزمة التنفيذ. وفي ما عدا ذلك، يظهر كإدخال بدون اسم.

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

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

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

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

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

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

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

يُرجى الانتقال إلى صفحة الدعم لطرح الأسئلة أو الإبلاغ عن الأخطاء.