View a markdown version of this page

Menerapkan pilihan eksklusif dengan Amazon SWF - Amazon Simple Workflow Service

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menerapkan pilihan eksklusif dengan Amazon SWF

Dalam beberapa skenario, Anda mungkin ingin menjadwalkan rangkaian aktivitas yang berbeda berdasarkan hasil aktivitas sebelumnya. Dengan pola pilihan eksklusif, Anda dapat membuat alur kerja fleksibel yang memenuhi persyaratan kompleks aplikasi Anda.

Amazon SWF tidak memiliki tindakan pilihan eksklusif tertentu. Untuk menerapkan pilihan eksklusif, Anda harus menulis logika penentu Anda untuk membuat keputusan berdasarkan hasil aktivitas sebelumnya. Beberapa aplikasi untuk pilihan eksklusif meliputi:

  • Melakukan kegiatan pembersihan jika hasil aktivitas sebelumnya tidak berhasil

  • Menjadwalkan aktivitas yang berbeda berdasarkan apakah pelanggan membeli paket dasar atau lanjutan

  • Melakukan aktivitas autentikasi pelanggan yang berbeda berdasarkan riwayat pemesanan pelanggan

Dalam contoh perdagangan elektronik, Anda dapat menggunakan pilihan eksklusif untuk mengirim atau membatalkan pesanan berdasarkan hasil penagihan kartu kredit. Pada gambar berikut, pengambil keputusan menjadwalkan tugas aktivitas Ship Order and Record Completion (Pengiriman Pesanan dan Penyelesaian Catatan) jika kartu kredit berhasil ditagih. Jika tidak, prosesnya akan menjadwalkan tugas aktivitas Cancel Order and Email Customer (Batalkan Pesanan dan Email Pelanggan).

Diagram alur kerja pesanan pelanggan

Pengambil keputusan menjadwalkan aktivitas ShipOrder jika kartu kredit berhasil ditagih. Jika tidak, pengambil keputusan menjadwalkan aktivitas CancelOrder.

Dalam hal ini, programkan pengambil keputusan untuk menafsirkan riwayat dan menentukan apakah kartu kredit berhasil ditagih. Untuk melakukan ini, Anda mungkin memiliki logika yang mirip dengan berikut:

IF lastEvent = "WorkflowExecutionStarted" addToDecisions ScheduleActivityTask(ActivityType = "VerifyOrderActivity") ELSIF lastEvent = "ActivityTaskCompleted" AND ActivityType = "VerifyOrderActivity" addToDecisions ScheduleActivityTask(ActivityType = "ChargeCreditCardActivity") #Successful Credit Card Charge Activities ELSIF lastEvent = "ActivityTaskCompleted" AND ActivityType = "ChargeCreditCardActivity" addToDecisions ScheduleActivityTask(ActivityType = "ShipOrderActivity") ELSIF lastEvent = "ActivityTaskCompleted" AND ActivityType = "ShipOrderActivity" addToDecisions ScheduleActivityTask(ActivityType = "RecordOrderCompletionActivity") ELSIF lastEvent = "ActivityTaskCompleted" AND ActivityType = "RecordOrderCompletionActivity" addToDecisions CompleteWorkflowExecution #Unsuccessful Credit Card Charge Activities ELSIF lastEvent = "ActivityTaskFailed" AND ActivityType = "ChargeCreditCardActivity" addToDecisions ScheduleActivityTask(ActivityType = "CancelOrderActivity") ELSIF lastEvent = "ActivityTaskCompleted" AND ActivityType = "CancelOrderActivity" addToDecisions ScheduleActivityTask(ActivityType = "EmailCustomerActivity") ELSIF lastEvent = "ActivityTaskCompleted" AND ActivityType = "EmailCustomerActivity" addToDecisions CompleteWorkflowExecution ENDIF

Jika kartu kredit berhasil ditagih, pengambil keputusan harus merespons dengan RespondDecisionTaskCompleted untuk menjadwalkan aktivitas ShipOrder.

https://swf.us-east-1.amazonaws.com RespondDecisionTaskCompleted { "taskToken": "12342e17-80f6-FAKE-TASK-TOKEN32f0223", "decisions":[ { "decisionType":"ScheduleActivityTask", "scheduleActivityTaskDecisionAttributes":{ "control":"OPTIONAL_DATA_FOR_DECIDER", "activityType":{ "name":"ShipOrder", "version":"2.4" }, "activityId":"3e2e6e55-e7c4-fee-deed-aa815722b7be", "scheduleToCloseTimeout":"3600", "taskList":{ "name":"SHIPPING" }, "scheduleToStartTimeout":"600", "startToCloseTimeout":"3600", "heartbeatTimeout":"300", "input": "123 Main Street, Anytown, United States" } } ] }

Jika kartu kredit tidak berhasil ditagih, pengambil keputusan harus merespons dengan RespondDecisionTaskCompleted untuk menjadwalkan aktivitas CancelOrder.

https://swf.us-east-1.amazonaws.com RespondDecisionTaskCompleted { "taskToken": "12342e17-80f6-FAKE-TASK-TOKEN32f0223", "decisions":[ { "decisionType":"ScheduleActivityTask", "scheduleActivityTaskDecisionAttributes":{ "control":"OPTIONAL_DATA_FOR_DECIDER", "activityType":{ "name":"CancelOrder", "version":"2.4" }, "activityId":"3e2e6e55-e7c4-fee-deed-aa815722b7be", "scheduleToCloseTimeout":"3600", "taskList":{ "name":"CANCELLATIONS" }, "scheduleToStartTimeout":"600", "startToCloseTimeout":"3600", "heartbeatTimeout":"300", "input": "Out of Stock" } } ] }

Jika Amazon SWF dapat memvalidasi data dalam tindakan RespondDecisionTaskCompleted, Amazon SWF mengembalikan respons HTTP yang berhasil serupa dengan berikut ini.

HTTP/1.1 200 OK Content-Length: 11 Content-Type: application/json x-amzn-RequestId: 93cec6f7-0747-11e1-b533-79b402604df1