Azure Functions

Azure Functions Architecture

using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;

namespace Invice.BCFunctions
{
    public static class BusinessCentralIntegration
    {
        [FunctionName("ProcessBusinessCentralData")]
        public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequest req,
            ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");

            string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
            dynamic data = JsonConvert.DeserializeObject(requestBody);

            // Process the data from Business Central
            // This is where you would implement your custom logic

            string responseMessage = $"Processed data successfully at {DateTime.Now}";

            return new OkObjectResult(responseMessage);
        }
    }
}

procedure CallAzureFunction(payload: JsonObject): JsonObject
var
    client: HttpClient;
    request: HttpRequestMessage;
    response: HttpResponseMessage;
    content: HttpContent;
    contentHeaders: HttpHeaders;
    result: JsonObject;
    payloadText: Text;
    resultText: Text;
begin
    // Convert payload to text
    payload.WriteTo(payloadText);
    
    // Prepare the request
    request.Method := 'POST';
    request.SetRequestUri('https://your-function-app.azurewebsites.net/api/ProcessBusinessCentralData?code=your-function-key');
    
    // Set up the content
    content.WriteFrom(payloadText);
    content.GetHeaders(contentHeaders);
    contentHeaders.Remove('Content-Type');
    contentHeaders.Add('Content-Type', 'application/json');
    request.Content := content;
    
    // Send the request
    client.Send(request, response);
    
    // Process the response
    response.Content.ReadAs(resultText);
    result.ReadFrom(resultText);
    
    exit(result);
end;