it-swarm-vi.com

Làm thế nào để đối phó với nhiều hình thức bước mà một trong các hình thức không được gửi

Giả sử bạn có một quy trình gửi yêu cầu hai hình thức. Việc nộp mẫu thứ 2 kích hoạt một email. Bạn sẽ làm gì nếu mẫu thứ hai không được gửi? Nói người dùng quên hoặc đóng cửa sổ một cách tình cờ.

Giải pháp duy nhất của tôi là cập nhật DB với một cờ từ việc gửi biểu mẫu thứ 1 xác định một email chưa được gửi. Việc gửi biểu mẫu thứ 2 sẽ kích hoạt một sự kiện để gửi email và cập nhật DB với một cờ xác định một email đã được gửi. Một công việc định kỳ sẽ chạy định kỳ để kiểm tra bất kỳ cờ nào cho các email chưa gửi, thu thập thông tin và gửi email.

Đây có phải là cách tốt nhất để giải quyết vấn đề?

Cảm ơn.

Chỉnh sửa: Rõ ràng

Mẫu 1 Người dùng gửi dữ liệu chung

Thông báo 1 Người dùng trình bày với một sự lựa chọn. Người dùng cần chọn "vượt qua" hoặc "chấp nhận". Nếu người dùng gửi biểu mẫu "chấp nhận" (Mẫu 2), một email sẽ được gửi. Nếu người dùng gửi biểu mẫu "vượt qua" (Mẫu 2), họ sẽ được trình bày với một thông báo khác với lựa chọn khác (Mẫu 3). Nếu người dùng không làm gì, lựa chọn cuối cùng được cung cấp là lựa chọn mặc định của họ, nhưng tại thời điểm này, một email vẫn cần gửi.

Tôi hy vọng điều đó rõ ràng hơn.

2
user334

Vì HTTP không trạng thái, nên cách duy nhất để theo dõi xem người dùng đã gửi biểu mẫu đầu tiên sau khi đóng trình duyệt hay chưa bằng cách sử dụng cơ chế lưu trữ lâu dài (ví dụ: cơ sở dữ liệu) giống như bạn đã làm.

Tuy nhiên, bạn có thể gặp sự cố nếu người dùng gửi biểu mẫu đầu tiên và công việc định kỳ chạy trước khi họ có cơ hội gửi biểu mẫu thứ hai. Bạn cũng có thể muốn kiểm tra xem một khoảng thời gian nhất định cũng đã trôi qua.

Về mặt lý thuyết bạn cũng có thể cố gắng phát hiện khi trình duyệt đóng và sử dụng sự kiện đó để kích hoạt một hành động, nhưng tôi khuyên mạnh mẽ chống lại nó.

0
Andy West

Nó phụ thuộc vào lý do tại sao bạn quan tâm về điều này.

Nếu mối quan tâm của bạn là về việc có dữ liệu không đầy đủ trong DB, tôi khuyên bạn chỉ nên giữ dữ liệu đã nhập trong phiên người dùng cho đến khi người dùng hoàn thành biểu mẫu thứ hai và sau đó cập nhật DB và gửi e-mail. Nếu người dùng không bận tâm điền vào biểu mẫu thứ hai, thì toàn bộ trao đổi sẽ bị lãng quên sau khi phiên của anh ta kết thúc.

Nếu mối quan tâm của bạn là về việc người dùng không nhận ra rằng họ cần phải hoàn thành biểu mẫu thứ hai, bạn nên mạnh mẽ xem xét thiết kế lại các biểu mẫu (có thể hợp nhất chúng). Đây là một vấn đề giao diện người dùng.

Có một cờ (như được thảo luận trong câu hỏi) có thể giúp xác định nếu điều này xảy ra, nhưng nó sẽ không cho bạn biết nếu nó xảy ra do lỗi người dùng hoặc đơn giản là vì người dùng mất hứng thú (trừ khi bạn có một đối tượng bị giam cầm nào đó).

Một cách khác, nếu bạn có thể kết nối khi phiên của người dùng hết hạn (điều này khá đơn giản với các trang Java, tôi không quen với tính năng này trong các công nghệ phía máy chủ khác), bạn có thể kiểm tra các giao dịch chưa hoàn tất tại đó điểm.

1
Kris

NHƯ bạn mô tả, bạn nên có state của quy trình trong cơ sở dữ liệu của bạn để xác định các bước đã được hoàn thành ..

Bây giờ, bước tiếp theo phụ thuộc vào công nghệ được sử dụng ..

Đối với ASP/ASP.NET có một sự kiện được kích hoạt ( phía máy chủ ) khi phiên hết hạn và bắt nó, bạn có thể thực hiện dọn dẹp/tự động hoàn thành thủ tục ..

Không chắc chắn nếu điều này có thể xảy ra trong môi trường PHP .. tôi cho rằng bạn có thể lưu dấu thời gian sau khi bước 1 hoàn thành và công việc định kỳ sẽ chạy định kỳ nhưng trước tiên hãy kiểm tra dấu thời gian = để xem liệu một lượng thời gian đã trôi qua trước khi tự động hoàn thành ..

0
Gabriele Petrioli