예제 #1
0
        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());
        }
예제 #2
0
        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);
        }
예제 #3
0
        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());
        }
예제 #4
0
        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);
        }
예제 #5
0
        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);
        }
예제 #6
0
        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
            });
        }