public static async Task <string> Run([ActivityTrigger] DurableActivityContextBase myBlob, TraceWriter log) { //log.Info($"C# Blob trigger function Processed blob\n Name:{name} \n Size: {myBlob.Length} Bytes"); log.Info("in final step......................"); string storagePath = Environment.GetEnvironmentVariable("AzureWebJobsStorage"); CloudStorageAccount storageAccount = CloudStorageAccount.Parse(storagePath); CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); CloudBlobContainer destinationContainer = blobClient.GetContainerReference(Environment.GetEnvironmentVariable("AcceptDestinationPath")); //await cloudBlobContainer.CreateAsync(); await destinationContainer.CreateIfNotExistsAsync(); // Set the permissions so the blobs are public. BlobContainerPermissions permissions = new BlobContainerPermissions { PublicAccess = BlobContainerPublicAccessType.Blob }; await destinationContainer.SetPermissionsAsync(permissions); RequestApplication requestMetadata = myBlob.GetInput <RequestApplication>(); var sourceBlob = blobClient.GetBlobReferenceFromServerAsync(new Uri(requestMetadata.LocationUrl)).Result; // var destinationContainer = blobClient.GetContainerReference(destinationContainer); var destinationBlob = destinationContainer.GetBlobReference(sourceBlob.Name); await destinationBlob.StartCopyAsync(sourceBlob.Uri); Task.Delay(TimeSpan.FromSeconds(15)).Wait(); await sourceBlob.DeleteAsync(); return("Copied"); }
Run([ActivityTrigger] RequestApplication request, TraceWriter log) { log.Info("Sending Mail....Please wait"); var ToAddress = Environment.GetEnvironmentVariable("CustomerMail"); string storagePath = Environment.GetEnvironmentVariable("StorageaccountBaseURL") + Environment.GetEnvironmentVariable("inputStorageContainer") + request.name; string FunctionBasePath = Environment.GetEnvironmentVariable("FunctionBasePath"); string mailTemplate = Environment.GetEnvironmentVariable("MailTemplate"); string instanceid = request.InstanceId; Mail message = new Mail(); message = new Mail(); var personalization = new Personalization(); personalization.AddTo(new Email(ToAddress)); message.AddPersonalization(personalization); log.Info(request.LocationUrl + request.name + request.InstanceId); var messageContent = new Content("text/html", string.Format(mailTemplate, storagePath, FunctionBasePath, instanceid)); message.AddContent(messageContent); message.Subject = "Request for Approval"; log.Info("Mail Sent....Please chek with your admin"); return(message); }
public static async void Run([BlobTrigger("sample-items/{name}")] Stream req, [OrchestrationClient] DurableOrchestrationClient starter, string name, TraceWriter log) { log.Info("C# HTTP trigger function processed a request."); RequestApplication blobDetails = new RequestApplication(); string fileName = name; string storagePath = Environment.GetEnvironmentVariable("StorageaccountBaseURL") + Environment.GetEnvironmentVariable("inputStorageContainer") + name; blobDetails.name = fileName; blobDetails.LocationUrl = storagePath; await starter.StartNewAsync("Orchestration_Function", blobDetails); // string id = await Starter.StartNewAsync("Orchestration_Function", blobDetails); }
Orchestration_Function([OrchestrationTrigger] DurableOrchestrationContext contextBase, TraceWriter log) { log.Info("C# HTTP trigger function processed a request."); RequestApplication details = contextBase.GetInput <RequestApplication>(); details.InstanceId = contextBase.InstanceId; // await contextBase.CallActivityAsync("A_Function", details); //Function2 has this function name await contextBase.CallActivityAsync("A_SendGridEx", details); var cts = new CancellationTokenSource(); DateTime ExpirationTime = contextBase.CurrentUtcDateTime.AddMinutes(5); Task timeoutTask = contextBase.CreateTimer(ExpirationTime, cts.Token); var ApprovalTask = contextBase.WaitForExternalEvent <bool>("Approved"); Task Winner = await Task.WhenAny(ApprovalTask, timeoutTask); if (Winner == ApprovalTask) { bool isapproved = ApprovalTask.Result;//contextBase.WaitForExternalEvent<bool>("Approved").Result; if (isapproved) { await contextBase.CallActivityAsync("MoveToAcceptBlob", details); cts.Cancel(); } } else if (Winner == timeoutTask) { log.Info("File not Accepted. Admin haven't replied to the mail.Timeout"); } else { log.Info("Error Happened........................"); cts.Cancel(); } return(" "); }