Việc hiểu rõ trạng thái của ứng dụng sau khi "khôi phục" (rollback) là vô cùng quan trọng để tránh các rủi ro về dữ liệu.

Dưới đây là bức tranh toàn cảnh về những gì thay đổi, những gì giữ nguyên, và cách hệ thống ghi nhận sau khi bạn bấm khôi phục về một ID cũ.

1. Dữ liệu trên Google Sheets (Data)

  • Trạng thái: Hoàn toàn KHÔNG thay đổi và KHÔNG bị mất mát.
  • Phân tích: Các bảng tính (Queue, Log, Thuvien...) hoạt động độc lập với các bản triển khai (Deployment). Việc bạn chuyển ID ứng dụng web giống như việc bạn thay đổi ổ khóa của một ngôi nhà; đồ đạc (dữ liệu) bên trong ngôi nhà vẫn giữ nguyên vị trí. Các đơn hàng, log lịch sử, hay ghi chú bạn đã lưu trước đó vẫn nằm nguyên trên Sheet.

2. Mã nguồn ứng dụng (Code)

Chỗ này chia làm 2 phần khác biệt, đây là điểm cốt lõi của Google Apps Script:

  • Code đang chạy thực tế trên Web App (Thay đổi): Khi bạn khôi phục về ID cũ (ví dụ: v1), giao diện web và các luồng xử lý sẽ chạy bằng mã nguồn của v1. Bất kỳ tính năng mới, giao diện mới, hay lỗi (bug) nào bạn vừa viết ở bản hiện tại đều không tồn tại ở v1.
  • Code trong Trình soạn thảo Apps Script (KHÔNG thay đổi): Việc khôi phục ID không ghi đè hay xóa những dòng code bạn đang viết dở trong trình soạn thảo (Extensions > Apps Script). Mã nguồn mới nhất của bạn vẫn nằm đó chờ bạn sửa xong để tạo ra một bản triển khai (ID) mới tiếp theo.

3. Đường dẫn Web App (URL)

  • Trạng thái: Thay đổi.
  • Phân tích: Hàm openWebAppPC() hoặc openWebAppMobile() của bạn lấy ID từ hệ thống lưu trữ (Sheet Config) để ghép thành một URL hoàn chỉnh: [https://script.google.com/macros/s/](https://script.google.com/macros/s/)[ID_ĐÃ_CHỌN]/exec. Khi bạn khôi phục, hệ thống chỉ đơn giản là trỏ đường dẫn này về cái ID cũ.

4. Cách hệ thống đánh dấu & nhận biết bản đang dùng

Hiện tại, hệ thống của bạn nhận biết bản đang chạy thông qua logic lưu trữ tĩnh:

1.     Cơ sở dữ liệu (Nơi lưu ID Active): Khi bấm khôi phục, hàm saveDeploymentId(idValue) sẽ ghi đè ID cũ này lên ô chứa "ID hiện tại" trong Sheet cấu hình của bạn. Bất cứ khi nào người dùng bấm mở Web App, hệ thống sẽ đọc ô này để biết cần mở ID nào.

2.     Cách bạn (Admin) nhận biết bằng mắt thường:

o    Để biết chính xác ứng dụng đang chạy bản nào, bạn hãy nhìn vào ô input nhập Ghi chú (deployNoteInput) mà chúng ta vừa thiết kế.

o    Mẹo thực chiến: Ngay khi bấm khôi phục về v1, bạn nên gõ vào ô ghi chú của v1 dòng chữ: "Đang chạy tạm bản này để fix lỗi v3". Lần sau mở Modal lên, bạn nhìn dòng ghi chú là biết ngay trạng thái hệ thống.

⚠️ Lưu ý rủi ro (Nút thắt cần nhớ sau khi khôi phục)

Dù khôi phục ID rất an toàn cho dữ liệu, nhưng có một sự cố tiềm ẩn bạn phải lường trước: Sự lệch pha cấu trúc dữ liệu.

  • Ví dụ: Ở bản v3, bạn thêm một cột mới vào Sheet "Queue" (ví dụ: Cột G - Ghi chú hủy đơn). Bạn lỡ code sai làm lỗi Web App nên khôi phục về v1.
  • Vấn đề: Bản code v1 được viết từ tháng trước, nó hoàn toàn không biết sự tồn tại của Cột G này. Do đó, dù ứng dụng chạy mượt, nhưng nó có thể ghi sai cột hoặc bỏ qua dữ liệu ở Cột G.

Kết luận: Sau khi khôi phục, ứng dụng sẽ ngay lập tức "sống lại" bằng hình hài cũ. Nhiệm vụ của bạn lúc này là âm thầm vào Trình soạn thảo (Editor) để tìm và sửa lỗi của bản code mới nhất, sau đó Deploy ra một bản mới tinh (v4) và cập nhật lại ID vào hệ thống.