public static async Task RunOrchestrator([OrchestrationTrigger] IDurableOrchestrationContext context, ILogger log) { log.LogInformation($"************** RunOrchestrator method executing ********************"); // Using tuples but could also define a class for this data var(descontoRequest, requestUri) = context.GetInput <Tuple <DescontoRequest, Uri> >(); var moderationRequest = new DescontoModeracaoRequest { DescontoRequest = descontoRequest, ApproveRequestUrl = $"{requestUri.Scheme}://{requestUri.Host}:{requestUri.Port}/api/HumanPatternExample_Approve?id={context.InstanceId}", DeclineRequestUrl = $"{requestUri.Scheme}://{requestUri.Host}:{requestUri.Port}/api/HumanPatternExample_Decline?id={context.InstanceId}", }; await context.CallActivityAsync("HumanPatternExample_RequestApproval", moderationRequest); using (var timeout = new CancellationTokenSource()) // Defino o Timeout para aprovação do workflow { DateTime moderationDeadline = context.CurrentUtcDateTime.AddSeconds(10); Task durableTimeout = context.CreateTimer(moderationDeadline, timeout.Token); Task <bool> moderatedEvent = context.WaitForExternalEvent <bool>("Moderation"); if (moderatedEvent == await Task.WhenAny(moderatedEvent, durableTimeout)) { timeout.Cancel(); bool isApproved = moderatedEvent.Result; if (isApproved) { log.LogInformation($"************** Desconto de { descontoRequest.ValorDesconto } aprovado com sucesso. ********************"); //CRIAR REGRA DE NEGOCIO PARA APROVAR } else { log.LogInformation($"************** Desconto de { descontoRequest.ValorDesconto } reprovado. ********************"); //CRIAR REGRA DE NEGOCIO PARA NEGAR DESCONTO } } else { log.LogInformation($"************** Desconto de { descontoRequest.ValorDesconto } não recebeu intervenção... ********************"); //CRIAR REGRA DE NEGOCIO QUANDO NAO RECEBER INTERVENCAO } } log.LogInformation($"************** Orchestration complete ********************"); }
public static void RequestApproval([ActivityTrigger] DescontoModeracaoRequest moderationRequest, ILogger log) { log.LogInformation($"ENVIAR MENSAGEM AO USUARIO COM OS LINKS DE APROVAÇÂO"); log.LogInformation($"=> { moderationRequest.ApproveRequestUrl }"); log.LogInformation($"=> { moderationRequest.DeclineRequestUrl }"); }