public static async Task <IActionResult> Run( [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "Approval")] HttpRequestMessage req, [OrchestrationClient] DurableOrchestrationClient starter, Microsoft.Extensions.Logging.ILogger logger) { logger.UseSerilog(); var payload = await req.Content.ReadAsAsync <Payload>(); await starter.RaiseEventAsync(payload.InstanceId, "Approve", payload.Result); return(new AcceptedResult()); }
public static async Task Run( [OrchestrationTrigger] DurableOrchestrationContext context, [Table("ApprovaOrdineCliente")] CloudTable approvaOrdineTables, Microsoft.Extensions.Logging.ILogger logger) { logger.UseSerilog(); Log.Information($"SubOrchestrator Instance: {context.InstanceId}"); OrdiniAcquistoModel ordineAcquisto = context.GetInput <OrdiniAcquistoModel>(); Log.Information($"Pending Order {ordineAcquisto.IdOrdine}"); await SendMail(context, ordineAcquisto); string status = string.Empty; using (var timeoutCts = new CancellationTokenSource()) { DateTime dueTime = context.CurrentUtcDateTime.AddHours(5); Task durableTimeout = context.CreateTimer(dueTime, timeoutCts.Token); Task <bool> approvalTask = context.WaitForExternalEvent <bool>(Workflow.EventoApprova); //Attendo un evento o un timer if (approvalTask == await Task.WhenAny(approvalTask, durableTimeout)) { timeoutCts.Cancel(); if (await approvalTask) { status = "Approvato"; } } else { timeoutCts.Cancel(); status = "TempoScaduto"; } Log.Warning(status); } var approvaOrdine = new ApprovaOrdineTable { PartitionKey = context.InstanceId, RowKey = "PendingApproval", OrdineId = ordineAcquisto.IdOrdine, IdConfirmation = context.InstanceId, Status = status }; TableOperation insertOperation = TableOperation.InsertOrReplace(approvaOrdine); await approvaOrdineTables.ExecuteAsync(insertOperation); }
public static async Task <IActionResult> Run( [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "ApprovaOrdine")] HttpRequest req, [OrchestrationClient] DurableOrchestrationClient starter, Microsoft.Extensions.Logging.ILogger logger) { logger.UseSerilog(); string ordineId = req.GetQueryParameterDictionary().First(x => x.Key == "ordineId").Value; Log.Information($"Approva Ordine {ordineId}"); await starter.RaiseEventAsync(ordineId, Workflow.EventoApprova, true); return(new AcceptedResult()); }
public static async Task <HttpResponseMessage> Run( [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "Pending")] HttpRequestMessage req, [OrchestrationClient] DurableOrchestrationClient starter, Microsoft.Extensions.Logging.ILogger logger) { // Registrazione del tracewriter su Serilog logger.UseSerilog(); string instanceId = await starter.StartNewAsync("BudgetApproval", null); // Verifica completamento lavoro... Log.Information($"Inizio Orchestratore con ID = '{instanceId}'."); var res = starter.CreateCheckStatusResponse(req, instanceId); return(res); }
public static async Task <HttpResponseMessage> Run( [HttpTrigger(AuthorizationLevel.Anonymous, methods: "post", Route = "OrdineCliente")] HttpRequestMessage req, [OrchestrationClient] DurableOrchestrationClient starter, Microsoft.Extensions.Logging.ILogger logger) { // Registrazione del tracewriter su Serilog logger.UseSerilog(); OrdiniAcquistoModel ordiniAcquisto = await req.Content.ReadAsAsync <OrdiniAcquistoModel>(); string instanceId = await starter.StartNewAsync(Workflow.OrdineClienteManager, ordiniAcquisto); // Verifica completamento lavoro... Log.Information($"Inizio Orchestratore con ID = '{instanceId}'."); var res = starter.CreateCheckStatusResponse(req, instanceId); res.Headers.RetryAfter = new RetryConditionHeaderValue(TimeSpan.FromMinutes(10)); return(res); }
public static async Task <ApproveTable> Run( [OrchestrationTrigger] DurableOrchestrationContext context, Microsoft.Extensions.Logging.ILogger logger) { logger.UseSerilog(); Log.Information($"Instance: {context.InstanceId}"); string status = ""; using (var timeoutCts = new CancellationTokenSource()) { DateTime dueTime = context.CurrentUtcDateTime.AddMinutes(1); Task durableTimeout = context.CreateTimer(dueTime, timeoutCts.Token); Task <bool> approvalEvent = context.WaitForExternalEvent <bool>("Approve"); //Attendo un evento o un timer if (approvalEvent == await Task.WhenAny(approvalEvent, durableTimeout)) { timeoutCts.Cancel(); if (await approvalEvent) { status = "Approvato"; } else { status = "NonApprovato"; } } else { status = "TempoScaduto"; } Log.Information(status); } return(new ApproveTable { PartitionKey = "PendingApproval", RowKey = context.InstanceId, Status = status }); }