Khắc phục sự cố

Ngay cả nhà phát triển có kinh nghiệm nhất cũng hiếm khi viết mã chính xác trên của chúng tôi, khiến việc khắc phục sự cố trở thành một phần quan trọng trong quá trình phát triển. Ngang bằng trong phần này, chúng ta sẽ đề cập đến một số kỹ thuật có thể giúp bạn tìm, hiểu và gỡ lỗi trong tập lệnh của bạn.

Thông báo lỗi

Khi tập lệnh của bạn gặp lỗi, thông báo lỗi sẽ xuất hiện. Tin nhắn có kèm theo số dòng dùng để khắc phục sự cố. Có hai kỹ thuật cơ bản các loại lỗi được hiển thị như sau: lỗi cú pháplỗi thời gian chạy.

Lỗi cú pháp

Lỗi cú pháp do mã không tuân theo JavaScript ngữ pháp và lỗi được phát hiện ngay khi bạn cố gắng lưu tập lệnh. Ví dụ: đoạn mã sau đây chứa lỗi cú pháp:

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);
}

Vấn đề cú pháp ở đây là thiếu ký tự ) ở cuối ký tự thứ tư . Khi cố gắng lưu tập lệnh, bạn sẽ gặp lỗi sau:

Thiếu ) sau danh sách đối số. (dòng 4)

Những loại lỗi này thường dễ khắc phục sự cố vì chúng được tìm thấy ngay lập tức và thường có nguyên nhân đơn giản. Bạn không thể lưu tệp chứa lỗi cú pháp, nghĩa là chỉ mã hợp lệ mới được lưu vào dự án của bạn.

Lỗi thời gian chạy

Những lỗi này là do sử dụng hàm hoặc lớp không đúng cách và chỉ có thể khi tập lệnh đã được chạy. Ví dụ: mã sau đây gây ra lỗi thời gian chạy:

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);
}

Mã này được định dạng đúng, nhưng chúng tôi đang chuyển giá trị "john" cho địa chỉ email khi gọi MailApp.sendEmail. Vì đây không phải là địa chỉ email hợp lệ, lỗi sau sẽ xảy ra khi chạy tập lệnh:

Email không hợp lệ: john (dòng 5)

Điều khiến những lỗi này khó khắc phục hơn là thông thường dữ liệu bạn đang truyền vào một hàm không được viết trong mã mà thay vào đó được kéo từ một bảng tính, biểu mẫu hoặc nguồn dữ liệu bên ngoài khác. Sử dụng tính năng gỡ lỗi dưới đây có thể giúp bạn xác định nguyên nhân gây ra những lỗi này.

Lỗi phổ biến

Dưới đây là danh sách các lỗi thường gặp và nguyên nhân gây ra các lỗi đó.

Dịch vụ đã gọi quá nhiều lần: <action name>

Lỗi này cho biết rằng bạn đã vượt quá hạn mức hằng ngày cho một hành động nhất định. Ví dụ: bạn có thể gặp phải lỗi này nếu gửi quá nhiều email trong một một ngày. Hạn mức được đặt ở các mức khác nhau cho người tiêu dùng, miền và và có thể thay đổi bất cứ lúc nào mà không có của Google. Bạn có thể xem hạn mức cho nhiều thao tác trong Tài liệu về hạn mức của Apps Script.

Máy chủ không hoạt động. hoặc Đã xảy ra lỗi máy chủ, vui lòng thử lại.

Dưới đây là một vài nguyên nhân có thể dẫn đến những lỗi này:

  • Máy chủ hoặc hệ thống của Google tạm thời không khả dụng. Vui lòng đợi trong giây lát rồi thử chạy lại tập lệnh.
  • Có một lỗi trong tập lệnh không có lỗi tương ứng . Hãy thử gỡ lỗi tập lệnh của bạn và xem liệu bạn có thể tách biệt vấn đề hay không.
  • Có lỗi trong Google Apps Script gây ra lỗi này. Cho hướng dẫn về cách tìm kiếm và gửi báo cáo lỗi, hãy xem Lỗi. Trước khi báo lỗi mới, hãy tìm kiếm để xem người khác đã báo cáo chưa.

Bạn cần được uỷ quyền để thực hiện thao tác đó.

Lỗi này cho biết tập lệnh thiếu sự cho phép cần thiết để chạy. Khi một tập lệnh được chạy trong Trình chỉnh sửa tập lệnh hoặc từ một mục trong trình đơn tuỳ chỉnh hộp thoại uỷ quyền hiển thị cho người dùng. Tuy nhiên, khi một tập lệnh được chạy từ một trình kích hoạt, được nhúng bằng trang Google Sites hoặc chạy dưới dạng dịch vụ, không thể hiển thị hộp thoại và lỗi này xuất hiện.

Để cho phép tập lệnh, hãy mở Trình chỉnh sửa tập lệnh rồi chạy bất kỳ hàm nào. Chiến lược phát hành đĩa đơn sẽ xuất hiện để bạn có thể cấp quyền cho dự án tập lệnh. Nếu tập lệnh chứa các dịch vụ trái phép mới, bạn phải ủy quyền lại tập lệnh.

Lỗi này thường do điều kiện kích hoạt đang kích hoạt trước khi người dùng đã uỷ quyền. Nếu bạn không có quyền truy cập vào dự án tập lệnh (vì lỗi này xảy ra với tiện ích bổ sung mà bạn sử dụng), thường thì bạn có thể ủy quyền tập lệnh bằng cách sử dụng tiện ích bổ sung một lần nữa. Nếu một trình kích hoạt tiếp tục kích hoạt và gây ra lỗi này, bạn có thể xoá bằng cách làm như sau:

  1. Ở bên trái của dự án Apps Script, hãy nhấp vào biểu tượng Trình kích hoạt .
  2. Ở bên phải điều kiện kích hoạt mà bạn muốn xoá, hãy nhấp vào biểu tượng Tuỳ chọn khác &gt; Xoá điều kiện kích hoạt.

Bạn cũng có thể xoá các trình kích hoạt tiện ích bổ sung có vấn đề bằng cách gỡ cài đặt tiện ích bổ sung.

Quyền truy cập bị từ chối: DriveApp hoặc Chính sách miền đã vô hiệu hoá các ứng dụng Drive của bên thứ ba

Quản trị viên của Google Workspace miền có quyền có thể vô hiệu hoá API Drive cho miền của họ để ngăn người dùng của họ cài đặt và dùng các ứng dụng dành cho Google Drive. Chế độ cài đặt này cũng ngăn người dùng không thể sử dụng tiện ích bổ sung Apps Script sử dụng Dịch vụ lái xe hoặc Dịch vụ Drive nâng cao (ngay cả khi tập lệnh đã được uỷ quyền trước khi quản trị viên vô hiệu hoá API Drive).

Tuy nhiên, nếu một tiện ích bổ sung hoặc ứng dụng web dùng dịch vụ Drive được xuất bản cho cài đặt trên toàn miền và được quản trị viên cài đặt cho một số hoặc tất cả người dùng trong miền, các chức năng của tập lệnh cho những người dùng đó ngay cả khi API Drive bị tắt trong miền.

Tập lệnh không có quyền lấy danh tính của người dùng đang hoạt động.

Cho biết rằng danh tính và email của người dùng đang hoạt động không được cung cấp cho tập lệnh. Cảnh báo này xuất phát từ cuộc gọi đến Session.getActiveUser(). Việc này cũng có thể là kết quả của cuộc gọi đến Session.getEffectiveUser() nếu tập lệnh đang chạy ở chế độ uỷ quyền khác với AuthMode.FULL. Nếu cảnh báo này được báo hiệu, các lệnh gọi tiếp theo đến User.getEmail() chỉ trả về "".

Có một số cách để khắc phục sự cố này, tuỳ thuộc vào chế độ uỷ quyền mà tập lệnh đang chạy. Chế độ uỷ quyền là được hiển thị trong các hàm được kích hoạt dưới dạng Thuộc tính authMode của e thông số sự kiện.

  • Trong AuthMode.FULL, hãy cân nhắc sử dụng Session.getEffectiveUser() thay thế.
  • Trong AuthMode.LIMITED, hãy đảm bảo rằng chủ sở hữu đã uỷ quyền tập lệnh.
  • Trong các chế độ uỷ quyền khác, hãy tránh gọi một trong hai phương thức.
  • Nếu bạn là Google Workspace khách hàng mới gặp phải cảnh báo này từ một điều kiện kích hoạt có thể cài đặt, hãy đảm bảo rằng điều kiện kích hoạt đang chạy với tư cách là người dùng trong tổ chức của bạn.

Thiếu thư viện

Nếu bạn thêm thư viện phổ biến vào tập lệnh của mình, bạn có thể nhận được thông báo lỗi cho biết thư viện này bị thiếu, mặc dù thư viện này được liệt kê là phần phụ thuộc của tập lệnh của bạn. Có thể là do có quá nhiều người truy cập vào thư viện . Để tránh lỗi này, hãy thử một trong các giải pháp sau:

  • Sao chép và dán mã của thư viện vào tập lệnh của bạn và xóa thư viện phần phụ thuộc.
  • Sao chép tập lệnh thư viện và triển khai tập lệnh đó dưới dạng thư viện từ tài khoản của bạn. Đảm bảo để cập nhật phần phụ thuộc trong tập lệnh gốc vào thư viện mới thay vì báo cáo công khai.

Đã xảy ra lỗi do thiếu một phiên bản thư viện hoặc phiên bản triển khai. Mã lỗi Not_Found

Thông báo lỗi này cho biết một trong những điều sau:

  • Đã xoá phiên bản triển khai của tập lệnh. Để cập nhật các giá trị đã triển khai phiên bản của tập lệnh, hãy xem phần Chỉnh sửa phiên bản triển khai.
  • Phiên bản thư viện mà tập lệnh sử dụng đã bị xoá. Để kiểm tra xem thiếu thư viện, bên cạnh tên thư viện, nhấp vào Thêm &gt; Mở trong thẻ mới. Thư viện bị thiếu đưa ra một thông báo lỗi. Sau khi tìm thấy thư viện mà bạn cần cập nhật, hãy lấy một trong các thao tác sau:
    • Hãy cập nhật thư viện để sử dụng một phiên bản khác. Hãy xem phần Cập nhật thư viện.
    • Xoá thư viện đã xoá khỏi dự án tập lệnh và mã của bạn. Xem Xoá thư viện.
  • Tập lệnh của thư viện mà tập lệnh của bạn sử dụng bao gồm một tập lệnh khác sử dụng phiên bản đã xoá. Hãy thực hiện một trong các thao tác sau:
    • Nếu bạn có quyền chỉnh sửa thư viện mà tập lệnh của bạn sử dụng, hãy cập nhật thư viện phụ trong tập lệnh đó sang phiên bản hiện có.
    • Hãy cập nhật thư viện để sử dụng một phiên bản khác. Hãy xem phần Cập nhật thư viện.
    • Xoá thư viện khỏi dự án tập lệnh và mã của bạn. Xem Xoá thư viện.

Lỗi 400: invalid_scope khi gọi API Google Chat bằng dịch vụ nâng cao

Nếu bạn gặp Error 400: invalid_scope với thông báo lỗi Some requested scopes cannot be shown, điều đó có nghĩa là bạn chưa chỉ định bất kỳ phạm vi uỷ quyền nào trong Tệp appsscript.json của dự án Apps Script. Trong hầu hết các trường hợp, Apps Script tự động xác định phạm vi mà một tập lệnh cần, nhưng khi dùng dịch vụ Chat nâng cao, bạn phải tự thêm phạm vi uỷ quyền mà tập lệnh của bạn sử dụng cho Tệp kê khai của dự án Apps Script. Xem Đặt phạm vi rõ ràng.

Để giải quyết lỗi này, hãy thêm phạm vi uỷ quyền thích hợp vào tệp appsscript.json của dự án Apps Script như một phần của mảng oauthScopes. Ví dụ: để gọi hàm spaces.messages.create , hãy thêm đoạn mã sau:

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

Lệnh gọi UrlFetch đến <URL> không được quản trị viên của bạn cho phép

Quản trị viên Google Workspace có thể bật danh sách cho phép trong bảng điều khiển dành cho quản trị viên để kiểm soát việc bạn có thể truy cập qua những miền bên ngoài nào Apps Script.

Để khắc phục lỗi này, hãy liên hệ với quản trị viên để yêu cầu họ thêm URL vào danh sách cho phép.

Gỡ lỗi

Không phải lỗi nào cũng khiến thông báo lỗi hiển thị. Có thể có thêm lỗi nhỏ, trong đó mã chính xác về mặt kỹ thuật và có thể thực thi, nhưng kết quả không như bạn mong đợi. Dưới đây là một số chiến lược để xử lý trong nhiều tình huống và điều tra thêm một tập lệnh không chạy theo cách mà bạn như mong đợi.

Ghi nhật ký

Mặc dù gỡ lỗi, việc ghi lại thông tin dưới dạng dự án tập lệnh thường hữu ích thực thi. Google Apps Script có hai phương pháp để ghi nhật ký thông tin: Dịch vụ ghi nhật ký trên đám mâycác dịch vụ Trình ghi nhật ký và bảng điều khiển cơ bản hơn được tích hợp sẵn trong trình chỉnh sửa Apps Script.

Xem Hướng dẫn ghi nhật ký để biết thêm thông tin chi tiết.

Error Reporting

Ngoại lệ xảy ra do lỗi thời gian chạy sẽ tự động được ghi lại bằng dịch vụ Báo cáo lỗi Google Cloud. Dịch vụ này cho phép bạn tìm kiếm và lọc các thông báo ngoại lệ mà dự án tập lệnh của bạn tạo ra.

Để truy cập vào Báo cáo lỗi, hãy xem phần Xem nhật ký trên đám mây và báo cáo lỗi trong bảng điều khiển Google Cloud Platform.

Thực thi

Mỗi lần bạn chạy tập lệnh, Apps Script sẽ ghi lại quá trình thực thi, bao gồm cả nhật ký Cloud. Những bản ghi này có thể giúp bạn biết được các hành động mà tập lệnh của bạn đã thực hiện.

Để xem quá trình thực thi tập lệnh của bạn trong Dự án Apps Script, ở bên trái, hãy nhấp vào Lượt thực thi .

Kiểm tra trạng thái dịch vụ Apps Script

Mặc dù hiếm, nhưng đôi khi chỉ dùng được một số dịch vụ của Google Workspace các dịch vụ (chẳng hạn như Gmail hoặc Drive) gặp phải sự cố tạm thời có thể dẫn đến sự cố ngừng dịch vụ. Khi việc này xảy ra, các dự án Apps Script tương tác với các dịch vụ này có thể không hoạt động như mong đợi.

Bạn có thể kiểm tra xem có dịch vụ nào của Google Workspace hay không bằng cách xem Trang tổng quan trạng thái Google Workspace. Nếu tình trạng ngừng dịch vụ diễn ra đang gặp phải, bạn hãy chờ đến khi vấn đề được giải quyết hoặc tìm kiếm trợ giúp thêm trong phần Trung tâm trợ giúp của Google Workspace hoặc Các vấn đề đã biết với Google Workspace tài liệu.

Sử dụng trình gỡ lỗi và điểm ngắt

Để xác định sự cố trong tập lệnh của mình, bạn có thể chạy tập lệnh đó ở chế độ gỡ lỗi. Khi chạy sau ở chế độ gỡ lỗi, một tập lệnh sẽ tạm dừng khi gặp điểm ngắt, đó là dòng bạn vừa được đánh dấu trong tập lệnh mà bạn cho rằng có thể có vấn đề. Khi một tập lệnh tạm dừng nó hiển thị giá trị của từng biến tại thời điểm đó, cho phép bạn kiểm tra hoạt động nội bộ của một tập lệnh mà không cần phải thêm nhiều câu lệnh ghi nhật ký.

Thêm điểm ngắt

Để thêm điểm ngắt, hãy di chuột qua số dòng của dòng bạn muốn thêm điểm ngắt đến. Ở bên trái số dòng, hãy nhấp vào vòng tròn. Dưới đây hình ảnh cho thấy ví dụ về một điểm ngắt được thêm vào tập lệnh:

Thêm điểm ngắt

Chạy tập lệnh ở chế độ gỡ lỗi

Để chạy tập lệnh ở chế độ gỡ lỗi, ở đầu trình chỉnh sửa, hãy nhấp vào Gỡ lỗi.

Trước khi tập lệnh chạy dòng có điểm ngắt, tập lệnh sẽ tạm dừng và hiển thị một bảng thông tin gỡ lỗi. Bạn có thể sử dụng bảng này để kiểm tra dữ liệu như các giá trị của tham số và thông tin được lưu trữ trong đối tượng.

Để kiểm soát cách chạy tập lệnh, ở đầu bảng Trình gỡ lỗi, sử dụng thao tác "Bước vào", "Bước qua" và "Rời khỏi" các nút. Các công cụ này cho phép bạn chạy viết tập lệnh từng dòng một và kiểm tra xem giá trị thay đổi như thế nào theo thời gian.

Vấn đề khi có nhiều Tài khoản Google

Nếu đã đăng nhập vào nhiều Tài khoản Google cùng lúc, bạn có thể gặp sự cố khi truy cập vào các tiện ích bổ sung và ứng dụng web của bạn. Đăng nhập nhiều tài khoản, hoặc đã đăng nhập vào nhiều Tài khoản Google cùng một lúc nên không được hỗ trợ đối với các ứng dụng Tập lệnh, tiện ích bổ sung hoặc ứng dụng web.

  • Nếu bạn mở trình chỉnh sửa Apps Script trong khi đăng nhập vào nhiều tài khoản, Lời nhắc của Google bạn chọn tài khoản bạn muốn tiếp tục.

  • Nếu bạn mở một ứng dụng web hoặc tiện ích bổ sung và gặp vấn đề khi đăng nhập nhiều tài khoản, hãy thử một trong những cách sau các giải pháp sau:

    • Đăng xuất khỏi tất cả Tài khoản Google và chỉ đăng nhập vào tài khoản có tiện ích bổ sung hoặc ứng dụng web mà bạn muốn truy cập.
    • Mở cửa sổ ẩn danh trong Google Chrome hoặc trình duyệt ở chế độ riêng tư tương đương cửa sổ và đăng nhập vào Tài khoản Google có ứng dụng web hoặc tiện ích bổ sung mà bạn muốn truy cập.

Nhận trợ giúp

Gỡ lỗi vấn đề bằng cách sử dụng các công cụ và kỹ thuật được liệt kê ở trên có thể giải quyết nhiều vấn đề khác nhau, nhưng có thể có những vấn đề bạn gặp phải yêu cầu trợ giúp thêm để giải quyết. Hãy xem Trang hỗ trợ của chúng tôi để biết thông tin về nơi đặt câu hỏi và báo cáo lỗi.