2013-04-06 46 views
5

Đây là kịch bản. Một người dùng tải lên một tệp Excel và điều này bắt đầu một luồng công việc xác nhận tệp, chuyển đổi nó thành một vài tệp khác nhau, sau đó thực hiện cập nhật cơ sở dữ liệu dựa trên các biến đổi. Sau khi tải lên, kết quả cần được xem xét bởi thành viên nhóm trước khi luồng có thể tiếp tục.Sử dụng Bộ hẹn giờ/Tín hiệu để cho phép can thiệp của con người vào AWS SWF Quy trình làm việc

Tôi đang sử dụng Ruby và đã phát hiện ra rằng Tín hiệu và Bộ hẹn giờ là cách để đạt được điều này trong SWF. Tuy nhiên, các ví dụ Ruby thiếu hoặc không tồn tại và tôi cần một chút trợ giúp để hiểu cách thức này sẽ hoạt động bằng cách sử dụng Ruby.

Hiểu biết Ny cho đến nay là hoạt động hẹn giờ được lên lịch về cơ bản tạm dừng luồng cho đến khi hẹn giờ hết hạn (tại thời điểm này tôi có thể hủy luồng công việc hoặc gửi email cho nhân viên và đặt hẹn giờ khác) hoặc tín hiệu được gửi đến quy trình làm việc để bắt đầu bước tiếp theo. Người quyết định sẽ xử lý tín hiệu và sau đó khởi động hoạt động thích hợp.

Bất kỳ suy nghĩ hoặc hướng nào đến các nguồn khác sẽ được đánh giá cao.

Cảm ơn, Thomas

Trả lời

3

Hơi khó để cung cấp "câu trả lời", vì bạn đã không thực sự đặt câu hỏi cụ thể. Tôi đồng ý với bạn rằng việc sử dụng Bộ hẹn giờ và Tín hiệu là những gì bạn muốn.

Bạn không chỉ định cách nhóm được thông báo về đánh giá. Tôi sẽ giả định rằng bạn thông báo cho họ qua email và hướng dẫn họ đến một số trang web nơi họ có thể xem xét các thay đổi và sau đó nhấp vào liên kết để Phê duyệt hoặc Không chấp thuận. Nhấp vào liên kết để Phê duyệt sẽ gửi yêu cầu đến một máy chủ web sẽ "báo hiệu" SWF mà đánh giá đã được phê duyệt. Nhấp vào liên kết để Không phê duyệt sẽ "báo hiệu" SWF rằng bài đánh giá chưa được phê duyệt. Bạn đề cập rằng bạn muốn đổi tên nhóm (hoặc có thể leo thang cho người quản lý) nếu không có ai thực hiện hành động trong bài đánh giá. Giả sử sự đổi mới này xảy ra sau 48 giờ. Sau khi đổi tên, bạn cấp cho họ 72 giờ trước khi giả sử Không chấp thuận.

Sau đây là cách công việc của bạn trông giống như với tôi:

tập tin
  1. cập người dùng và khởi động một tiến trình công việc
  2. người quyết định nhiệm vụ lịch "TransformActivity"
  3. TransformActivity chạy, biến đổi dữ liệu vào các tập tin khác nhau, và hoàn thành thành công
  4. Quyết định Lịch biểu tác vụ "UpdateDatabaseActivity"
  5. UpdateDatabaseActivity chạy, cập nhật cơ sở dữ liệu và hoàn tất thành công
  6. người quyết định nhiệm vụ lịch "EmailTeamActivity"
  7. EmailTeamActivity chạy, gửi email cho nhóm, và hoàn thành công
  8. người quyết định nhiệm vụ lịch một Timer trong 48 giờ.

Nếu một tín hiệu cho thấy Phê duyệt hoặc không chấp nhận được trong vòng 48 giờ:

  1. lịch trình người quyết định nhiệm vụ là "RecordFinalDecisionActivity"
  2. RecordFinalDecisionActivity sẽ chạy, ghi lại Thỏa thuận (hoặc Do not Phê duyệt) vào cơ sở dữ liệu và hoàn tất thành công.
  3. Tác vụ quyết định sau đó sẽ đóng luồng công việc vì hoàn thành công việc.

Nếu không có tín hiệu nhận được và các đám cháy hẹn giờ (sau 48 giờ):

  1. lịch trình người quyết định nhiệm vụ là "EmailTeamAndManagerActivity"
  2. EmailTeamAndManagerActivity chạy, gửi email cho nhóm và quản lý, và hoàn tất thành công.
  3. Công cụ quyết định lên lịch hẹn giờ khác trong 72 giờ.

Nếu một tín hiệu cho thấy Phê duyệt hoặc không chấp nhận được trong thêm 72 giờ đưa ra:

  1. Lặp lại cùng một logic như phần "Nếu một tín hiệu cho thấy Phê duyệt hoặc không chấp nhận là nhận được trong vòng 48 giờ ".

Nếu không có tín hiệu nhận được và các đám cháy hẹn giờ (sau 72 giờ bổ sung):

  1. Tại thời điểm này, các công việc có thể giả định đó là một Đừng Phê duyệt, sắp xếp các "RecordFinalDecisionActivity" và đóng luồng công việc sau khi hoạt động đó hoàn tất.

Lý do bạn không muốn có hoạt động "đánh giá" là do nhiệm vụ đó được lên lịch và sau đó một số nhân viên hoạt động cần trả lời thành công. Làm thế nào mà sẽ làm việc? Khi ai đó nhấp vào liên kết Phê duyệt hoặc Không phê duyệt, yêu cầu tới máy chủ web sẽ phải kéo hoạt động xuống từ danh sách nhiệm vụ. Tuy nhiên, nếu danh sách nhiệm vụ có nhiều hoạt động, SWF chỉ đưa ra bất kỳ hoạt động nào trong số đó. Nó có thể không đúng. Bây giờ, bạn có thể lập luận rằng bạn có thể lên lịch các đánh giá khác nhau trên các danh sách nhiệm vụ khác nhau, nhưng điều đó chỉ cồng kềnh và tẻ nhạt.

Tín hiệu được thực hiện để biểu thị sự kiện "bên ngoài", điều này rất nhiều. SWF documentation on Signals thực hiện công việc tuyệt vời khi nói về Tín hiệu. Đây là SWF documentation on how to use Timers and Signals. Đối với các chi tiết về cách sử dụng SWF và Ruby, tôi thực sự không thể giúp bạn ở đó. Tôi đã chỉ sử dụng SWF với Java bằng cách sử dụng AWS Flow Framework.

+0

Cảm ơn lời giải thích tuyệt vời. Tôi nghĩ rằng các bộ hẹn giờ bạn đặt là bản sao của thời gian chờ tác vụ hoạt động. Để báo hiệu một exec, bạn cần domain + workflowId, để đáp ứng với một hoạt động, bạn chỉ cần taskToken. Quá xấu, Ruby SDK hiện tại không cho phép bạn khởi tạo tác vụ hoạt động chỉ với taskToken (bit.ly/14QOIC8). (Xin lỗi, tôi hư hỏng, tôi làm việc trực tiếp thông qua API) Vì vậy, có, bạn phải "tải xuống" tác vụ. Tôi vẫn thích hoạt động. Truy vấn exec rõ ràng cho thấy nó có một nhiệm vụ hoạt động [review]. – jmettraux

+0

Có ... lời giải thích tuyệt vời. Tôi đã thực sự tìm kiếm ý kiến ​​về luồng đề xuất của tôi để xem có cách nào khác để đạt được hay không. Và bạn đã xác nhận rằng đây là con đường để đi. Tôi đã đọc nguồn sdk và tôi đã tìm ra cách để có được những điều cơ bản của dòng chảy làm việc và sẽ đăng lại ở đây. Cảm ơn một lần nữa. –

1
  1. người dùng upload file excel, không "StartWorkflowExecution", rằng hàng đợi một nhiệm vụ quyết định
  2. quyết định dòng chảy thông báo người lao động là mới/"giai đoạn một", nó lịch trình "chuyển đổi tập tin" hoạt động tác vụ
  3. nhân viên hoạt động chọn công việc và thực hiện thao tác "chuyển đổi tệp", khi thực hiện "Trả lờiTự độngTaskCompleted" với kết quả của "biến đổi được thực hiện", xếp hàng nhiệm vụ quyết định
  4. nhân viên quyết định chọn nhiệm vụ ision, thông báo các phép biến đổi được thực hiện và lên lịch một nhiệm vụ hoạt động mới
  5. nhân viên hoạt động chọn nhiệm vụ hoạt động, thông báo cho một thành viên nhóm (theo hướng dẫn của nhân viên quyết định khi lên lịch hoạt động) được thông báo, bằng cách nào đó thực hiện hành động của mình, sau đó bằng cách nào đó thông báo cho nhân viên hoạt động sẽ trả lời "RespondActivityTaskCompleted"

Tôi không thấy cần hẹn giờ hoặc tín hiệu. Hai khái niệm này hữu ích nếu bạn muốn các sự kiện định kỳ, thời gian chờ và/hoặc làm gián đoạn luồng.

Xin lưu ý rằng bạn có thể phân biệt nhân viên hoạt động bằng cách sử dụng danh sách nhiệm vụ (ví dụ nhân viên hoạt động cho công việc tự động và nhân viên hoạt động cho người tham gia).

+0

Bạn đã chú ý đến nhân viên hoạt động ở # 5. Làm cách nào để được chỉ định, thông báo cho người dùng, chờ phản hồi (có thể mất vài ngày) và trả lời lại SWF? Sử dụng Bộ đếm thời gian và tín hiệu là cách chính xác. – alfredaday

+0

Bài đánh giá là một hoạt động. – jmettraux

+0

Nhận xét quá dài, đã viết tại đây: https://gist.github.com/anonymous/5328911 – jmettraux

Các vấn đề liên quan