Xử lý lỗi và thông báo cho Trình kết nối cộng đồng

Để mang lại trải nghiệm tốt cho người dùng, đoạn mã của bạn phải xử lý lỗi một cách chính xác. Đưa ra cho người dùng các thông báo lỗi có thể xử lý, trong đó nêu rõ các bước khắc phục để giải quyết vấn đề.

Tài liệu này mô tả các lỗi có thể xảy ra với trình kết nối, cách hoạt động của thông báo lỗi và cách xử lý đúng cách lỗi trình kết nối.

Thông tin: Để tìm hiểu thêm về cách xử lý các trường hợp ngoại lệ trong JavaScript, hãy xem câu lệnh try...catch.

Các loại lỗi

Các loại và nguyên nhân gây ra lỗi mà người dùng có thể gặp phải khi sử dụng trình kết nối thường thuộc một trong ba loại sau đây:

  1. lỗi nội bộ của trình kết nối
  2. lỗi bên ngoài của trình kết nối
  3. Lỗi trong Looker Studio

Các lỗi nội bộ và lỗi bên ngoài của trình kết nối phải do nhà phát triển trình kết nối xử lý. Những lỗi này xảy ra do mã của nhà phát triển.

Lỗi nội bộ của trình kết nối

Lỗi nội bộ của trình kết nối xảy ra trong quá trình thực thi trình kết nối. Ví dụ: nếu trình kết nối không thể phân tích cú pháp phản hồi của API trong quá trình thực thi getData(). Những lỗi này nên được lường trước và xử lý bằng nội dung giải thích thân thiện với người dùng (nếu có).

Để biết thêm thông tin về cách xử lý lỗi nội bộ của trình kết nối, hãy xem Các phương pháp hay nhất để xử lý lỗi trình kết nối.

Lỗi bên ngoài của trình kết nối

Lỗi bên ngoài của trình kết nối xảy ra sau khi thực thi trình kết nối. Ví dụ: khi một yêu cầu getData() cho 3 trường chỉ trả về dữ liệu cho 2 trường. Mặc dù trình kết nối đã hoàn tất quá trình thực thi, nhưng trình kết nối đó không đáp ứng yêu cầu từ Looker Studio. Việc kiểm thử kỹ lưỡng có thể giúp tránh được những lỗi này.

Thường thì bạn có thể sửa lỗi bên ngoài của trình kết nối bằng cách xem lại thông tin chi tiết về lỗi (nếu có) và gỡ lỗi mã để xác định vấn đề. Để biết thêm thông tin về cách gỡ lỗi trình kết nối, hãy xem phần Gỡ lỗi mã của bạn.

Lỗi Looker Studio

Lỗi trong Looker Studio là các lỗi không liên quan đến mã trình kết nối của bạn. Ví dụ: nếu người dùng cố gắng sử dụng biểu đồ chuỗi thời gian với một nguồn dữ liệu không có phương diện ngày/giờ.

Nếu lỗi không liên quan trực tiếp đến trình kết nối thì nhà phát triển trình kết nối không cần làm gì. Người dùng có thể tìm thêm sự trợ giúp bằng cách truy cập vào Trung tâm trợ giúp Looker Studio.

Đang hiển thị thông báo lỗi

Hiện thông tin chi tiết về lỗi dựa trên trạng thái của quản trị viên

Khi trình kết nối báo lỗi, Looker Studio sẽ hiển thị thông báo lỗi tuỳ thuộc vào trạng thái quản trị của người dùng.

  • Nếu người dùng là người dùng quản trị thì họ sẽ thấy tất cả thông tin chi tiết. Phần này bao gồm thông báo lỗi, loại lỗi và dấu vết ngăn xếp.
  • Nếu người dùng không phải là người dùng quản trị, họ sẽ chỉ nhìn thấy thông tin chi tiết nếu lỗi có một thông báo thân thiện với người dùng. Để tìm hiểu thêm về cách hiển thị thông báo lỗi cho người dùng không phải quản trị viên, hãy xem phần Đưa ra lỗi mà người dùng gặp phải.

Gửi lỗi mà người dùng nhìn thấy

Theo mặc định, chỉ quản trị viên của trình kết nối mới thấy chi tiết lỗi. Điều này giúp ngăn chặn việc vô tình tiết lộ thông tin nhạy cảm, chẳng hạn như khoá API trong dấu vết ngăn xếp. Để hiển thị thông báo lỗi cho người dùng không phải quản trị viên, hãy sử dụng newUserError() từ dịch vụ Tập lệnh Apps Studio của Looker Studio.

Ví dụ:

try {
  // API request that can be malformed.
  getDataFromAPI();
} catch (e) {
  DataStudioApp.createCommunityConnector()
      .newUserError()
      .setDebugText('Error fetching data from API. Exception details: ' + e)
      .setText('There was an error communicating with the service. Try again later, or file an issue if this error persists.')
      .throwException();

}

Trong ví dụ này, setText() thiết lập văn bản sẽ hiển thị với tất cả người dùng, còn setDebugText() đặt văn bản sẽ chỉ hiển thị với người dùng quản trị.

Các phương pháp hay nhất để xử lý lỗi trình kết nối

Bạn nên cố gắng phát hiện và xử lý nhiều lỗi nhất có thể trong quá trình thực thi mã trình kết nối. Ví dụ: một số thao tác phổ biến có thể gây ra lỗi hoặc trạng thái không mong muốn bao gồm:

  • Tìm nạp URL không thành công (lỗi tạm thời, hết thời gian chờ)
  • Không có dữ liệu nào cho khoảng thời gian được yêu cầu
  • Không thể phân tích cú pháp hoặc định dạng dữ liệu từ API
  • Mã thông báo uỷ quyền đã bị thu hồi

Xử lý lỗi có thể khôi phục

Cần xử lý các điểm thực thi trình kết nối không thành công nhưng có thể khôi phục. Ví dụ: nếu một yêu cầu API không thành công vì lý do không nghiêm trọng (ví dụ: giảm tải máy chủ), thì yêu cầu này nên thử lại trước khi báo lỗi.

Bắt và gửi lỗi

Bạn nên phát hiện và gửi lại các lỗi không thể khôi phục. Lỗi được báo lại sẽ giúp người dùng hiểu lý do xảy ra lỗi. Nếu có thể khắc phục vấn đề thì bạn nên cung cấp thông tin chi tiết về biện pháp khắc phục.

Xem phần gửi lỗi mà người dùng gặp phải.

Ghi nhật ký lỗi vào Stackdriver

Sử dụng Stackdriver để ghi nhật ký lỗi và các thông báo khác. Điều này giúp hiểu lỗi, gỡ lỗi và phát hiện các trường hợp ngoại lệ chưa được xử lý.

Để tìm hiểu thêm về tính năng Báo cáo lỗi Stackdriver, cách bật tính năng ghi nhật ký ngoại lệ cho tập lệnh, cũng như cách xác định người dùng một cách an toàn cho mục đích gỡ lỗi, hãy xem phần Sử dụng tính năng ghi nhật ký Stackdriver.

KHÔNG DÙNG NỮA: Sử dụng tiền tố DS_USER: cho các thông báo lỗi an toàn

Để cung cấp thông báo lỗi thân thiện với người dùng cho người dùng không phải quản trị viên, hãy thêm tiền tố DS_USER: kèm theo thông báo lỗi. Tiền tố này dùng để xác định thông báo an toàn cho người dùng không phải quản trị viên và không được đưa vào thông báo lỗi thực tế.

Những ví dụ sau đây bao gồm trường hợp thông báo lỗi sẽ hiển thị cho người dùng không phải quản trị viên và trường hợp thông báo lỗi khác chỉ hiển thị cho người dùng quản trị:

data-studio/errors.gs
// Admin and non-admin users will see the following error.
try {
  // Code that might fail.
} catch (e) {
  throw new Error('DS_USER:This will be shown to admin & non-admin.');
}

// Only admin users will see the following error.
try {
  // Code that might fail.
} catch (e) {
  throw new Error('This message will only be shown to admin users');
}