Mise en œuvre des choix exclusifs avec Amazon Simple Workflow Service - Amazon Simple Workflow Service

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Mise en œuvre des choix exclusifs avec Amazon Simple Workflow Service

Dans certains scénarios, vous souhaitez peut-être planifier un autre ensemble d'activités en fonction des résultats d'une activité précédente. Ce modèle de choix exclusif vous permet de créer des flux de travail flexibles qui répondent aux exigences complexes de votre application.

Amazon Simple Workflow Service (Amazon SWF) ne dispose pas d'une action spécifique pour les choix exclusifs. Pour utiliser le choix exclusif, il suffit d'écrire la logique du décideur de sorte qu'il prenne des décisions différentes en fonction des résultats de l'activité précédente. Voici certaines utilisations possibles avec les choix exclusifs :

  • Exécution d'activités de nettoyage, si les résultats d'une activité précédente ont échoué

  • Planification de différentes activités selon que le client a acheté un plan de base ou avancé

  • Exécution de différentes activités d'authentification en fonction de l'historique de commande du client

Dans l'exemple de commerce en ligne, vous pouvez utiliser le choix exclusif pour expédier ou annuler une commande sur la base des résultats du débit de la carte de crédit. Dans la figure suivante, le décideur planifie les tâches d'activité d'envoi de commande et de consignation de l'achèvement de la tâche si le débit a fonctionné. Sinon, il planifie les tâches d'activité d'annulation de commande et d'envoi d'e-mail au client.

Diagramme du flux de travail d'une commande client

Le décideur planifie l'activité ShipOrder si la carte de crédit est débitée avec succès. Sinon, le décideur planifie l'activité CancelOrder.

Dans ce cas, programmez le décideur pour qu'il interprète l'historique et pour déterminer si la carte de crédit a été débitée avec succès. Pour ce faire, vous pouvez utiliser une logique similaire à celle-ci :

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

Si la carte de crédit a été débitée avec succès, le décideur doit répondre avec RespondDecisionTaskCompleted pour planifier l'activité 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" } } ] }

Si la carte de crédit n'a pas été débitée avec succès, le décideur doit répondre avec RespondDecisionTaskCompleted pour planifier l'activité 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" } } ] }

Si Amazon SWF est en mesure de valider les données duRespondDecisionTaskCompletedAmazon SWF renvoie une réponse HTTP positive similaire à ce qui suit.

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