{"id":1060,"date":"2023-08-11T06:55:26","date_gmt":"2023-08-11T06:55:26","guid":{"rendered":"https:\/\/fredborg.org\/?p=1060"},"modified":"2023-08-11T11:32:15","modified_gmt":"2023-08-11T11:32:15","slug":"data-is-king-part-1-send-data-from-business-central-to-azure","status":"publish","type":"post","link":"https:\/\/fredborg.org\/?p=1060","title":{"rendered":"Data is King: Part 1 Send data from Business Central to Azure"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">There is no question that in our world data is king. Still, for many of us, the problem is that we have so much data in so many different systems and different formats, that we quickly can lose track. We might therefore not get the full potential out of all our data, in this blog series, I will cover some of the tools that Microsoft has made available to us in Azure to handle data. I will also cover some of the basics of how you can structure your data so you can use it most effectively. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Sending Data from Business Central<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In this post, I will start by going through a way that we can set up a dynamic way in our Business Central to send data to Azure Blob Storage, which we will work with later on. What we are going to need for this setup is an Azure Function, an Azure storage account, and some AL code. What we are going to be creating is a way that we can set up if a field on a record is modified it will trigger a generic JSON file to be created in an Azure blob storage. This result could also be obtained using WebHooks in Business Central which you can read about <a href=\"https:\/\/fredborg.org\/?p=914\" target=\"_blank\" rel=\"noreferrer noopener\">here<\/a> but that would require us to create an API page for each record that we wish to export.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We are going to need 4 tables, the first table is a setup table where we can set up our Azure function URL and also a Boolean to turn our module on, my table and page look as follows:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\ntable 50103 &quot;DEF Data Export Setup&quot;\n{\n    Caption = &#039;Data Export Setup&#039;;\n    DataClassification = CustomerContent;\n\n    fields\n    {\n        field(1; &quot;Code&quot;; Code&#x5B;10])\n        {\n            Caption = &#039;Code&#039;;\n        }\n        field(2; &quot;Azure Function URL&quot;; Text&#x5B;250])\n        {\n            Caption = &#039;Azure Function URL&#039;;\n        }\n        field(3; &quot;Azure Function Token&quot;; Text&#x5B;250])\n        {\n            Caption = &#039;Azure Function Token&#039;;\n        }\n        field(4; &quot;Enable Send on Triggers&quot;; Boolean)\n        {\n            Caption = &#039;Enable Send on Triggers&#039;;\n        }\n    }\n    keys\n    {\n        key(PK; &quot;Code&quot;)\n        {\n            Clustered = true;\n        }\n    }\n}\n\n<\/pre><\/div>\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\npage 50101 &quot;DEF Data Export Setup&quot;\n{\n    ApplicationArea = All;\n    Caption = &#039;Data Export Setup&#039;;\n    PageType = Card;\n    SourceTable = &quot;DEF Data Export Setup&quot;;\n    UsageCategory = Administration;\n\n    layout\n    {\n        area(content)\n        {\n            group(General)\n            {\n                Caption = &#039;General&#039;;\n\n                field(&quot;Azure Function URL&quot;; Rec.&quot;Azure Function URL&quot;)\n                {\n                    ToolTip = &#039;Specifies the value of the Azure Function URL field.&#039;;\n                }\n                field(&quot;Azure Function Token&quot;; Rec.&quot;Azure Function Token&quot;)\n                {\n                    ToolTip = &#039;Specifies the value of the Azure Function Token field.&#039;;\n                }\n                field(&quot;Enable Send on Triggers&quot;; Rec.&quot;Enable Send on Triggers&quot;)\n                {\n                    ToolTip = &#039;Specifies the value of the Enable Send on Triggers field.&#039;;\n                }\n            }\n        }\n    }\n\n    trigger OnOpenPage()\n    begin\n        if not Rec.Get() then\n            Rec.Insert();\n    end;\n}\n\n<\/pre><\/div>\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"908\" height=\"272\" src=\"https:\/\/fredborg.org\/wp-content\/uploads\/2023\/07\/image-21.png\" alt=\"\" class=\"wp-image-1063\" srcset=\"https:\/\/fredborg.org\/wp-content\/uploads\/2023\/07\/image-21.png 908w, https:\/\/fredborg.org\/wp-content\/uploads\/2023\/07\/image-21-300x90.png 300w, https:\/\/fredborg.org\/wp-content\/uploads\/2023\/07\/image-21-768x230.png 768w\" sizes=\"auto, (max-width: 908px) 100vw, 908px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Next, we need a way to set up which records and which fields should trigger a data export, for this purpose I have created two tables &#8220;Data Export Mapping Header&#8221; and &#8220;Data Export Mapping Lines&#8221; <\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\ntable 50101 &quot;DEFData Export Mapping Header&quot;\n{\n    Caption = &#039;Data Export Mapping Header&#039;;\n    DataClassification = CustomerContent;\n\n    fields\n    {\n        field(1; &quot;Table No.&quot;; Integer)\n        {\n            Caption = &#039;Table No.&#039;;\n            DataClassification = CustomerContent;\n            TableRelation = AllObj.&quot;Object ID&quot; where(&quot;Object Type&quot; = const(Table));\n        }\n        field(2; &quot;Table Name&quot;; Text&#x5B;250])\n        {\n            Caption = &#039;Table Name&#039;;\n            FieldClass = FlowField;\n            CalcFormula = lookup(AllObj.&quot;Object Name&quot; where(&quot;Object ID&quot; = field(&quot;Table No.&quot;)));\n            Editable = false;\n        }\n        field(3; &quot;Json Array Name&quot;; Text&#x5B;250])\n        {\n            Caption = &#039;Json Array Name&#039;;\n            DataClassification = CustomerContent;\n        }\n        field(4; &quot;Json Object Name&quot;; Text&#x5B;250])\n        {\n            Caption = &#039;Json Object Name&#039;;\n            DataClassification = CustomerContent;\n        }\n    }\n    keys\n    {\n        key(PK; &quot;Table No.&quot;)\n        {\n            Clustered = true;\n        }\n    }\n}\n\n<\/pre><\/div>\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\ntable 50102 &quot;DEF Data Export Mapping Lines&quot;\n{\n    Caption = &#039;Data Export Mapping Lines&#039;;\n    DataClassification = CustomerContent;\n\n    fields\n    {\n        field(1; &quot;Field No.&quot;; Integer)\n        {\n            Caption = &#039;Field No.&#039;;\n            DataClassification = CustomerContent;\n            TableRelation = Field.&quot;No.&quot; where(TableNo = field(&quot;Table No.&quot;));\n        }\n        field(2; &quot;Field Name&quot;; Text&#x5B;250])\n        {\n            Caption = &#039;Field Name&#039;;\n            Editable = false;\n            FieldClass = FlowField;\n            CalcFormula = lookup(Field.FieldName where(TableNo = field(&quot;Table No.&quot;), &quot;No.&quot; = field(&quot;Field No.&quot;)));\n\n        }\n        field(3; &quot;Table No.&quot;; Integer)\n        {\n            Caption = &#039;Table No.&#039;;\n            DataClassification = CustomerContent;\n            Editable = false;\n        }\n    }\n    keys\n    {\n        key(PK; &quot;Field No.&quot;, &quot;Table No.&quot;)\n        {\n            Clustered = true;\n        }\n    }\n}\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">And I have created 3 pages a sub-page for the lines:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\npage 50105 &quot;DEF Data Export Mapping Lines&quot;\n{\n    ApplicationArea = All;\n    Caption = &#039;Data Export Mapping Lines&#039;;\n    PageType = ListPart;\n    SourceTable = &quot;DEF Data Export Mapping Lines&quot;;\n\n    layout\n    {\n        area(content)\n        {\n            repeater(General)\n            {\n                field(&quot;Field No.&quot;; Rec.&quot;Field No.&quot;)\n                {\n                    ToolTip = &#039;Specifies the value of the Field No. field.&#039;;\n                }\n                field(&quot;Field Name&quot;; Rec.&quot;Field Name&quot;)\n                {\n                    ToolTip = &#039;Specifies the value of the Field Name field.&#039;;\n                }\n            }\n        }\n    }\n}\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">A card page:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\npage 50106 &quot;DEF Data Export Mapping Card&quot;\n{\n    ApplicationArea = All;\n    Caption = &#039;Data Export Mapping Card&#039;;\n    PageType = Card;\n    SourceTable = &quot;DEFData Export Mapping Header&quot;;\n    UsageCategory = Administration;\n\n    layout\n    {\n        area(content)\n        {\n            group(General)\n            {\n                Caption = &#039;General&#039;;\n\n                field(&quot;Table No.&quot;; Rec.&quot;Table No.&quot;)\n                {\n                    ToolTip = &#039;Specifies the value of the Table No. field.&#039;;\n                }\n                field(&quot;Table Name&quot;; Rec.&quot;Table Name&quot;)\n                {\n                    ToolTip = &#039;Specifies the value of the Table Name field.&#039;;\n                }\n                field(&quot;Json Array Name&quot;; Rec.&quot;Json Array Name&quot;)\n                {\n                    ToolTip = &#039;Specifies the value of the Json Array Name field.&#039;;\n                }\n                field(&quot;Json Object Name&quot;; Rec.&quot;Json Object Name&quot;)\n                {\n                    ToolTip = &#039;Specifies the value of the Json Object Name field.&#039;;\n                }\n            }\n            part(lines; &quot;DEF Data Export Mapping Lines&quot;)\n            {\n                SubPageLink = &quot;Table No.&quot; = field(&quot;Table No.&quot;);\n            }\n        }\n    }\n}\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">and a list page:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\npage 50103 &quot;DEFData Export Mapping List&quot;\n{\n    ApplicationArea = All;\n    Caption = &#039;Data Export Mapping List&#039;;\n    PageType = List;\n    SourceTable = &quot;DEFData Export Mapping Header&quot;;\n    UsageCategory = Administration;\n    CardPageId = &quot;DEF Data Export Mapping Card&quot;;\n    Editable = false;\n\n    layout\n    {\n        area(content)\n        {\n            repeater(General)\n            {\n                field(&quot;Table No.&quot;; Rec.&quot;Table No.&quot;)\n                {\n                    ToolTip = &#039;Specifies the value of the Table No. field.&#039;;\n                }\n                field(&quot;Table Name&quot;; Rec.&quot;Table Name&quot;)\n                {\n                    ToolTip = &#039;Specifies the value of the Table Name field.&#039;;\n                }\n                field(&quot;Json Array Name&quot;; Rec.&quot;Json Array Name&quot;)\n                {\n                    ToolTip = &#039;Specifies the value of the Json Array Name field.&#039;;\n                }\n                field(&quot;Json Object Name&quot;; Rec.&quot;Json Object Name&quot;)\n                {\n                    ToolTip = &#039;Specifies the value of the Json Object Name field.&#039;;\n                }\n            }\n        }\n    }\n}\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">The idea here is that you choose which table and fields should trigger an export, which fields you wish to export, and what you wish the name of your JSON objects and JSON arrays should be once they have been exported.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"918\" height=\"527\" src=\"https:\/\/fredborg.org\/wp-content\/uploads\/2023\/07\/image-22.png\" alt=\"\" class=\"wp-image-1064\" srcset=\"https:\/\/fredborg.org\/wp-content\/uploads\/2023\/07\/image-22.png 918w, https:\/\/fredborg.org\/wp-content\/uploads\/2023\/07\/image-22-300x172.png 300w, https:\/\/fredborg.org\/wp-content\/uploads\/2023\/07\/image-22-768x441.png 768w\" sizes=\"auto, (max-width: 918px) 100vw, 918px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Next, we will need a log table and a page, which is used as a buffer table for our job queue<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\ntable 50104 &quot;DEFData Export Log&quot;\n{\n    Caption = &#039;Data Export Log&#039;;\n    DataClassification = CustomerContent;\n\n    fields\n    {\n        field(1; ID; Guid)\n        {\n            Caption = &#039;ID&#039;;\n        }\n        field(2; &quot;Table ID&quot;; Integer)\n        {\n            Caption = &#039;Table ID&#039;;\n        }\n        field(3; &quot;RecordID&quot;; RecordId)\n        {\n            Caption = &#039;RecordID&#039;;\n        }\n        field(4; SysId; Guid)\n        {\n            Caption = &#039;Sys ID&#039;;\n        }\n    }\n    keys\n    {\n        key(PK; ID)\n        {\n            Clustered = true;\n        }\n    }\n}\n\n<\/pre><\/div>\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\npage 50102 &quot;DEFData Export Log&quot;\n{\n    ApplicationArea = All;\n    Caption = &#039;Data Export Log&#039;;\n    PageType = List;\n    SourceTable = &quot;DEFData Export Log&quot;;\n    UsageCategory = Administration;\n    Editable = false;\n\n    layout\n    {\n        area(content)\n        {\n            repeater(General)\n            {\n                field(ID; Rec.ID)\n                {\n                    ToolTip = &#039;Specifies the value of the ID field.&#039;;\n                }\n                field(&quot;RecordID&quot;; Rec.&quot;RecordID&quot;)\n                {\n                    ToolTip = &#039;Specifies the value of the RecordID field.&#039;;\n                }\n                field(SysId; Rec.SysId)\n                {\n                    ToolTip = &#039;Specifies the value of the Sys ID field.&#039;;\n                }\n                field(&quot;Table ID&quot;; Rec.&quot;Table ID&quot;)\n                {\n                    ToolTip = &#039;Specifies the value of the Table ID field.&#039;;\n                }\n            }\n        }\n    }\n}\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Next, we need our codeunit which is where all the magic happens.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\ncodeunit 50104 &quot;DEF JsonExport&quot;\n{\n    trigger OnRun()\n    var\n        ExportLog: Record &quot;DEFData Export Log&quot;;\n        RecordRef: RecordRef;\n    begin\n        if ExportLog.FindSet() then\n            repeat\n                RecordRef.Open(ExportLog.&quot;Table ID&quot;);\n                RecordRef.GetBySystemId(ExportLog.SysId);\n                Rec2Json(RecordRef);\n                SendJSonToAzureFunction(GetJsonString(RecordRef, ExportLog.SysId));\n                ExportLog.Delete();\n                RecordRef.Close();\n            until ExportLog.Next() = 0;\n    end;\n\n    procedure Rec2Json(Rec: Variant)\n    var\n        ExportMappingHeaderSetup: Record &quot;DEFData Export Mapping Header&quot;;\n        ExportMappingSetupLines: Record &quot;DEF Data Export Mapping Lines&quot;;\n        FieldRef: FieldRef;\n        JObject: JsonObject;\n        RecJObject: JsonObject;\n        RecordRef: RecordRef;\n        i: Integer;\n        OutString: Text;\n    begin\n        RecordRef.GetTable(Rec);\n        if ExportMappingHeaderSetup.get(RecordRef.Number) then begin\n            ExportMappingSetupLines.setrange(&quot;Table No.&quot;, ExportMappingHeaderSetup.&quot;Table No.&quot;);\n            if ExportMappingSetupLines.FindSet() then\n                repeat\n                    FieldRef := RecordRef.FieldIndex(ExportMappingSetupLines.&quot;Field No.&quot;);\n                    JObject.Add(DelChr(FieldRef.Name(), &#039;=&#039;, &#039; \/.-*+&#039;), FieldToJsonValue(FieldRef));\n                until ExportMappingSetupLines.Next() = 0;\n            RecJObject.Add(ExportMappingHeaderSetup.&quot;Json Object Name&quot;, JObject);\n        end else begin\n            for i := 1 to RecordRef.FieldCount do begin\n                FieldRef := RecordRef.FieldIndex(i);\n                JObject.Add(DelChr(FieldRef.Name(), &#039;=&#039;, &#039; \/.-*+&#039;), FieldToJsonValue(FieldRef));\n            end;\n            RecJObject.Add(DelChr(RecordRef.Name(), &#039;=&#039;, &#039; \/.-*+&#039;), JObject);\n        end;\n\n        JArray.Add(RecJObject);\n    end;\n\n    procedure GetJsonString(Rec: Variant; SysId: guid): Text;\n    var\n        ExportMappingHeaderSetup: Record &quot;DEFData Export Mapping Header&quot;;\n        Result: Text;\n        RecordRef: RecordRef;\n    begin\n        RecordRef.GetTable(Rec);\n        if ExportMappingHeaderSetup.get(RecordRef.Number) then\n            ResultJObject.Add(ExportMappingHeaderSetup.&quot;Json Array Name&quot;, JArray)\n        else\n            ResultJObject.Add(DelChr(RecordRef.Name(), &#039;=&#039;, &#039; \/.-*+&#039;) + &#039;s&#039;, JArray);\n        ResultJObject.Add(&#039;Type&#039;, RecordRef.Name);\n        ResultJObject.Add(&#039;Id&#039;, format(SysId));\n        ResultJObject.WriteTo(Result);\n        Clear(ResultJObject);\n        Clear(JArray);\n        exit(Result);\n    end;\n\n    procedure SendJSonToAzureFunction(payload: Text)\n    var\n        DataExportSetup: Record &quot;DEF Data Export Setup&quot;;\n        AzureFunctions: Codeunit &quot;Azure Functions&quot;;\n        AzureFunctionsAuthentication: Codeunit &quot;Azure Functions Authentication&quot;;\n        AzureFunctionsResponse: Codeunit &quot;Azure Functions Response&quot;;\n        IAzureFunctionsAuthentication: Interface &quot;Azure Functions Authentication&quot;;\n        Response: HttpResponseMessage;\n        QurreyDic: Dictionary of &#x5B;text, text];\n        Result: Text;\n        error: JsonToken;\n        Jobject: JsonObject;\n    begin\n        DataExportSetup.Get();\n        IAzureFunctionsAuthentication := AzureFunctionsAuthentication.CreateCodeAuth(DataExportSetup.&quot;Azure Function URL&quot;, DataExportSetup.&quot;Azure Function Token&quot;);\n        AzureFunctionsResponse := AzureFunctions.SendPostRequest(IAzureFunctionsAuthentication, payload, &#039;application\/json&#039;);\n        AzureFunctionsResponse.GetHttpResponse(Response);\n        if not response.IsSuccessStatusCode() then\n            error(Response.ReasonPhrase);\n    end;\n\n    local procedure FieldToJsonValue(FieldRef: FieldRef): JsonValue\n    var\n        FieldValue: JsonValue;\n        BoolValue: Boolean;\n        IntValue: Integer;\n        DecimalValue: Decimal;\n        DateValue: Date;\n        TimeValue: Time;\n        DateTimeValue: DateTime;\n        DurationValue: Duration;\n        BigIntegerValue: BigInteger;\n        GuidValue: Guid;\n        RecordRefField: RecordRef;\n    begin\n        if (FieldRef.Class() = FieldClass::FlowField) then\n            FieldRef.CalcField();\n\n\n        case FieldRef.Type() of\n            FieldType::Boolean:\n                begin\n                    BoolValue := FieldRef.Value();\n                    FieldValue.SetValue(BoolValue);\n                end;\n            FieldType::Integer:\n                begin\n                    IntValue := FieldRef.Value();\n                    FieldValue.SetValue(IntValue);\n                end;\n            FieldType::Decimal:\n                begin\n                    DecimalValue := FieldRef.Value();\n                    FieldValue.SetValue(DecimalValue);\n                end;\n            FieldType::Date:\n                begin\n                    DateValue := FieldRef.Value();\n                    FieldValue.SetValue(DateValue);\n                end;\n            FieldType::Time:\n                begin\n                    TimeValue := FieldRef.Value();\n                    FieldValue.SetValue(TimeValue);\n                end;\n            FieldType::DateTime:\n                begin\n                    DateTimeValue := FieldRef.Value();\n                    FieldValue.SetValue(DateTimeValue);\n                end;\n            FieldType::Duration:\n                begin\n                    DurationValue := FieldRef.Value();\n                    FieldValue.SetValue(DurationValue);\n                end;\n            FieldType::BigInteger:\n                begin\n                    BigIntegerValue := FieldRef.Value();\n                    FieldValue.SetValue(BigIntegerValue);\n                end;\n            FieldType::Guid:\n                begin\n                    GuidValue := FieldRef.Value();\n                    FieldValue.SetValue(GuidValue);\n                end;\n            else\n                FieldValue.SetValue(Format(FieldRef.Value()));\n        end;\n\n        exit(FieldValue);\n    end;\n\n    var\n        ResultJObject: JsonObject;\n        JArray: JsonArray;\n}\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">First off I would like to give a shout-out to <a href=\"https:\/\/ivansingleton.dev\/\" target=\"_blank\" rel=\"noreferrer noopener\">IVAN SINGLETO<\/a><a href=\"https:\/\/ivansingleton.dev\/business-central-how-to-get-any-records-in-json-format\/\" target=\"_blank\" rel=\"noreferrer noopener\">N<\/a> for his blog post about turning any record in Business Central into a JSON object, I have been heavily inspired by his post. The last thing that we will need is a codeuint that subscribes to our global modify trigger.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\ncodeunit 50101 &quot;DEF GlobalSubscriber&quot;\n{\n    &#x5B;EventSubscriber(ObjectType::Codeunit, Codeunit::&quot;Global Triggers&quot;, &#039;OnDatabaseModify&#039;, &#039;&#039;, false, false)]\n    local procedure OnGlobalModify(RecRef: RecordRef)\n    var\n        DataExportSetup: Record &quot;DEF Data Export Setup&quot;;\n        ExportLog: Record &quot;DEFData Export Log&quot;;\n        ExportMappingHeaderSetup: Record &quot;DEFData Export Mapping Header&quot;;\n        ExportMappingSetupLines: Record &quot;DEF Data Export Mapping Lines&quot;;\n        Fieldef: FieldRef;\n        xFieldef: FieldRef;\n        xRecRef: RecordRef;\n    begin\n        if not DataExportSetup.get() then\n            exit;\n        if not DataExportSetup.&quot;Enable Send on Triggers&quot; then\n            exit;\n        if not ExportMappingHeaderSetup.Get(RecRef.Number) then\n            exit;\n\n        ExportMappingSetupLines.SetRange(&quot;Table No.&quot;, RecRef.Number);\n        xRecRef.Open(RecRef.Number, false, RecRef.CurrentCompany);\n        xRecRef.Get(RecRef.RecordId);\n        if ExportMappingSetupLines.FindSet() then\n            repeat\n                Fieldef := RecRef.Field(ExportMappingSetupLines.&quot;Field No.&quot;);\n                xFieldef := xRecRef.Field(ExportMappingSetupLines.&quot;Field No.&quot;);\n                if xFieldef.Value &lt;&gt; Fieldef.Value then begin\n                    Fieldef := RecRef.Field(RecRef.SystemIdNo);\n                    ExportLog.SetRange(SysId, Fieldef.Value);\n                    if ExportLog.FindFirst() then\n                        exit;\n                    ExportLog.ID := CreateGuid();\n                    ExportLog.RecordID := RecRef.RecordId;\n                    Fieldef := RecRef.Field(RecRef.SystemIdNo);\n                    ExportLog.SysId := Fieldef.Value;\n                    ExportLog.&quot;Table ID&quot; := RecRef.Number;\n                    ExportLog.insert();\n                end;\n            until ExportMappingSetupLines.Next() = 0;\n        xRecRef.Close();\n\n    end;\n\n\n    &#x5B;EventSubscriber(ObjectType::Codeunit, Codeunit::&quot;Global Triggers&quot;, &#039;GetDatabaseTableTriggerSetup&#039;, &#039;&#039;, false, false)]\n    local procedure GetDatabaseTableTriggerSetup(TableId: Integer; var OnDatabaseInsert: Boolean; var OnDatabaseModify: Boolean; var OnDatabaseDelete: Boolean)\n    var\n        ExportMappingHeaderSetup: Record &quot;DEFData Export Mapping Header&quot;;\n    begin\n        if ExportMappingHeaderSetup.Get(TableId) then begin\n            OnDatabaseInsert := true;\n            OnDatabaseModify := true;\n            OnDatabaseDelete := true;\n        end;\n\n    end;\n}\n\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">And that is it you will now need to set up codeuint 50104 to run in a job queue as often as you wish to send data.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The next thing that we need to do is create our Azure Blob storage, to do so head over to <a href=\"https:\/\/portal.azure.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">portal.azure.com<\/a> and search for Storage accounts <\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"260\" height=\"224\" src=\"https:\/\/fredborg.org\/wp-content\/uploads\/2023\/07\/image-23.png\" alt=\"\" class=\"wp-image-1067\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">And create a new storage account, once your storage account has been created go to Containers, and create a new container, mine is called frombc.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"487\" height=\"509\" src=\"https:\/\/fredborg.org\/wp-content\/uploads\/2023\/07\/image-24.png\" alt=\"\" class=\"wp-image-1068\" srcset=\"https:\/\/fredborg.org\/wp-content\/uploads\/2023\/07\/image-24.png 487w, https:\/\/fredborg.org\/wp-content\/uploads\/2023\/07\/image-24-287x300.png 287w\" sizes=\"auto, (max-width: 487px) 100vw, 487px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Now start your visual studio, and create an HTTP triggered Azure Function<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"862\" height=\"205\" src=\"https:\/\/fredborg.org\/wp-content\/uploads\/2023\/07\/image-25.png\" alt=\"\" class=\"wp-image-1069\" srcset=\"https:\/\/fredborg.org\/wp-content\/uploads\/2023\/07\/image-25.png 862w, https:\/\/fredborg.org\/wp-content\/uploads\/2023\/07\/image-25-300x71.png 300w, https:\/\/fredborg.org\/wp-content\/uploads\/2023\/07\/image-25-768x183.png 768w\" sizes=\"auto, (max-width: 862px) 100vw, 862px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"588\" height=\"360\" src=\"https:\/\/fredborg.org\/wp-content\/uploads\/2023\/07\/image-26.png\" alt=\"\" class=\"wp-image-1070\" srcset=\"https:\/\/fredborg.org\/wp-content\/uploads\/2023\/07\/image-26.png 588w, https:\/\/fredborg.org\/wp-content\/uploads\/2023\/07\/image-26-300x184.png 300w\" sizes=\"auto, (max-width: 588px) 100vw, 588px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Once the Azure Function has been created, go to Tools-&gt;NuGet Package Manager-&gt;Mange NuGet Packages for Solution, and make sure the following NuGet packages are installed <strong>Azure.Storage.Blobs<\/strong>, <strong>Microsoft.Azure.WebJobs.Extensions.Storage<\/strong>, <strong>Microsoft.NET.Sdk.Functions<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"397\" src=\"https:\/\/fredborg.org\/wp-content\/uploads\/2023\/07\/image-27-1024x397.png\" alt=\"\" class=\"wp-image-1071\" srcset=\"https:\/\/fredborg.org\/wp-content\/uploads\/2023\/07\/image-27-1024x397.png 1024w, https:\/\/fredborg.org\/wp-content\/uploads\/2023\/07\/image-27-300x116.png 300w, https:\/\/fredborg.org\/wp-content\/uploads\/2023\/07\/image-27-768x298.png 768w, https:\/\/fredborg.org\/wp-content\/uploads\/2023\/07\/image-27.png 1093w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Next, replace the code in your Azure function with the following.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nusing System;\nusing System.IO;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore.Mvc;\nusing Microsoft.Azure.WebJobs;\nusing Microsoft.Azure.WebJobs.Extensions.Http;\nusing Microsoft.AspNetCore.Http;\nusing Microsoft.Extensions.Logging;\nusing Azure.Storage.Blobs;\nusing Newtonsoft.Json;\nusing System.Collections.Generic;\n\nnamespace UploadToBlob\n{\n    public static class BlobMangement\n    {\n        &#x5B;FunctionName(nameof(UploadToBlob))]\n        public static async Task&lt;IActionResult&gt; UploadToBlob(\n            &#x5B;HttpTrigger(AuthorizationLevel.Function, &quot;post&quot;, Route = null)] HttpRequest req,\n            ILogger log)\n        {\n            string requestBody = String.Empty;\n            using (StreamReader streamReader = new StreamReader(req.Body))\n            {\n                requestBody = await streamReader.ReadToEndAsync();\n            }\n\n            dynamic data = JsonConvert.DeserializeObject(requestBody);\n            string folder = data. Type;\n            string id = data.Id;\n\n            string Connection = Environment.GetEnvironmentVariable(&quot;AzureWebJobsStorage&quot;);\n            string containerName = Environment.GetEnvironmentVariable(&quot;ContainerName&quot;);\n            var blobClient = new BlobContainerClient(Connection, containerName);\n            var blob = blobClient.GetBlobClient(folder + &quot;\/&quot;+id+&quot;.json&quot;);\n            var stream = new MemoryStream();\n            var writer = new StreamWriter(stream);\n            writer.Write(requestBody);\n            writer.Flush();\n            stream.Position = 0;\n            await blob.UploadAsync(stream,true);\n            return new OkObjectResult(&quot;file uploaded successfylly&quot;);\n        }\n    }\n}\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">What this code does, is it takes a POST request reads the body, takes whatever is written in the Type element and creates a folder with that name in your blob storage, and then creates a JSON file with a GUID as the name and the payload from the post request, if you wish to try this out locally you will have to open up the file local.settings.json and change the file to the following:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: java; title: ; notranslate\" title=\"\">\n{\n    &quot;IsEncrypted&quot;: false,\n  &quot;Values&quot;: {\n    &quot;AzureWebJobsStorage&quot;: &quot;{{Connection string to blob}}&quot;,\n    &quot;ContainerName&quot;: &quot;frombc&quot;,\n    &quot;FUNCTIONS_WORKER_RUNTIME&quot;: &quot;dotnet&quot;\n  }\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">To get your connection string to your blob storage, go to your Azure portal, <strong>Access keys,<\/strong> and copy the connection string.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"> <\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"889\" height=\"517\" src=\"https:\/\/fredborg.org\/wp-content\/uploads\/2023\/07\/image-28.png\" alt=\"\" class=\"wp-image-1072\" srcset=\"https:\/\/fredborg.org\/wp-content\/uploads\/2023\/07\/image-28.png 889w, https:\/\/fredborg.org\/wp-content\/uploads\/2023\/07\/image-28-300x174.png 300w, https:\/\/fredborg.org\/wp-content\/uploads\/2023\/07\/image-28-768x447.png 768w\" sizes=\"auto, (max-width: 889px) 100vw, 889px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Once you publish your Azure Function to Azure you must change some configurations, you must change <strong>AzureWebJobsStorage <\/strong>to your blob connection string and you must add your <strong>ContainerName<\/strong>.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"604\" height=\"689\" src=\"https:\/\/fredborg.org\/wp-content\/uploads\/2023\/07\/image-29.png\" alt=\"\" class=\"wp-image-1074\" srcset=\"https:\/\/fredborg.org\/wp-content\/uploads\/2023\/07\/image-29.png 604w, https:\/\/fredborg.org\/wp-content\/uploads\/2023\/07\/image-29-263x300.png 263w\" sizes=\"auto, (max-width: 604px) 100vw, 604px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">And that is it, your Business Central will now start sending data to your Azure Blob Storage, and every time a new record type is sent it will create a new folder.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"255\" height=\"134\" src=\"https:\/\/fredborg.org\/wp-content\/uploads\/2023\/07\/image-30.png\" alt=\"\" class=\"wp-image-1075\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">And inside these folders, you will see all the files with the data that you have set up in Business Central.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"419\" height=\"317\" src=\"https:\/\/fredborg.org\/wp-content\/uploads\/2023\/07\/image-31.png\" alt=\"\" class=\"wp-image-1076\" srcset=\"https:\/\/fredborg.org\/wp-content\/uploads\/2023\/07\/image-31.png 419w, https:\/\/fredborg.org\/wp-content\/uploads\/2023\/07\/image-31-300x227.png 300w\" sizes=\"auto, (max-width: 419px) 100vw, 419px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">My Customer contains:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\n{\n    &quot;Customers&quot;: &#x5B;\n        {\n            &quot;Customer&quot;: {\n                &quot;No&quot;: &quot;10000&quot;,\n                &quot;Name&quot;: &quot;Kontorcentralen A\/S d&quot;,\n                &quot;Address2&quot;: &quot;&quot;\n            }\n        }\n    ],\n    &quot;Type&quot;: &quot;Customer&quot;\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Because that is what I set up in my mapping in Business Central.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"918\" height=\"527\" src=\"https:\/\/fredborg.org\/wp-content\/uploads\/2023\/07\/image-22.png\" alt=\"\" class=\"wp-image-1064\" srcset=\"https:\/\/fredborg.org\/wp-content\/uploads\/2023\/07\/image-22.png 918w, https:\/\/fredborg.org\/wp-content\/uploads\/2023\/07\/image-22-300x172.png 300w, https:\/\/fredborg.org\/wp-content\/uploads\/2023\/07\/image-22-768x441.png 768w\" sizes=\"auto, (max-width: 918px) 100vw, 918px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">You should, of course, modify the code so that it fits your needs, maybe you do not want it to send the record every time, a field has been changed, but only once you perform a certain action, or maybe once a day; that is entirely up to you, also if you look at the codeuint JsonExport, you will see that in the function <strong>Rec2Json<\/strong>, if you run it on a record that is not set up, it will export all the fields in your table, which could be used if you wish to have a complete backup of your tables stored in another system. That was it for this post, in the next post we are going to take a look at what we can do with our data once we have it in Azure, until next time stay safe.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>There is no question that in our world data is king. Still, for many of us, the problem is that&#8230; <a class=\"read-more\" href=\"https:\/\/fredborg.org\/?p=1060\" rel=\"nofollow\"> Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":1061,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11,5],"tags":[],"class_list":["post-1060","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-azure","category-business-central","shapla-grid-item"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.6 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Data is King: Part 1 Send data from Business Central to Azure - Fredborg<\/title>\n<meta name=\"description\" content=\"Data is king. Still, for many of us, the problem is that we have so much data in so many different systems and different formats.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fredborg.org\/?p=1060\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Data is King: Part 1 Send data from Business Central to Azure - Fredborg\" \/>\n<meta property=\"og:description\" content=\"Data is king. Still, for many of us, the problem is that we have so much data in so many different systems and different formats.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fredborg.org\/?p=1060\" \/>\n<meta property=\"og:site_name\" content=\"Fredborg\" \/>\n<meta property=\"article:published_time\" content=\"2023-08-11T06:55:26+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-11T11:32:15+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/fredborg.org\/wp-content\/uploads\/2023\/07\/header-1024x576.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"576\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"dfredborg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@dfredborg\" \/>\n<meta name=\"twitter:site\" content=\"@dfredborg\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"dfredborg\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fredborg.org\/?p=1060#article\",\"isPartOf\":{\"@id\":\"https:\/\/fredborg.org\/?p=1060\"},\"author\":{\"name\":\"dfredborg\",\"@id\":\"https:\/\/fredborg.org\/#\/schema\/person\/59a5520cbf04c6bd1267f30b4488e71d\"},\"headline\":\"Data is King: Part 1 Send data from Business Central to Azure\",\"datePublished\":\"2023-08-11T06:55:26+00:00\",\"dateModified\":\"2023-08-11T11:32:15+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fredborg.org\/?p=1060\"},\"wordCount\":941,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fredborg.org\/#\/schema\/person\/59a5520cbf04c6bd1267f30b4488e71d\"},\"image\":{\"@id\":\"https:\/\/fredborg.org\/?p=1060#primaryimage\"},\"thumbnailUrl\":\"https:\/\/fredborg.org\/wp-content\/uploads\/2023\/07\/header.png\",\"articleSection\":[\"Azure\",\"Business Central\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fredborg.org\/?p=1060#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fredborg.org\/?p=1060\",\"url\":\"https:\/\/fredborg.org\/?p=1060\",\"name\":\"Data is King: Part 1 Send data from Business Central to Azure - Fredborg\",\"isPartOf\":{\"@id\":\"https:\/\/fredborg.org\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/fredborg.org\/?p=1060#primaryimage\"},\"image\":{\"@id\":\"https:\/\/fredborg.org\/?p=1060#primaryimage\"},\"thumbnailUrl\":\"https:\/\/fredborg.org\/wp-content\/uploads\/2023\/07\/header.png\",\"datePublished\":\"2023-08-11T06:55:26+00:00\",\"dateModified\":\"2023-08-11T11:32:15+00:00\",\"description\":\"Data is king. Still, for many of us, the problem is that we have so much data in so many different systems and different formats.\",\"breadcrumb\":{\"@id\":\"https:\/\/fredborg.org\/?p=1060#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fredborg.org\/?p=1060\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/fredborg.org\/?p=1060#primaryimage\",\"url\":\"https:\/\/fredborg.org\/wp-content\/uploads\/2023\/07\/header.png\",\"contentUrl\":\"https:\/\/fredborg.org\/wp-content\/uploads\/2023\/07\/header.png\",\"width\":2560,\"height\":1440},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fredborg.org\/?p=1060#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/fredborg.org\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Data is King: Part 1 Send data from Business Central to Azure\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fredborg.org\/#website\",\"url\":\"https:\/\/fredborg.org\/\",\"name\":\"Fredborg\",\"description\":\"Business Central and Azure\",\"publisher\":{\"@id\":\"https:\/\/fredborg.org\/#\/schema\/person\/59a5520cbf04c6bd1267f30b4488e71d\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fredborg.org\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fredborg.org\/#\/schema\/person\/59a5520cbf04c6bd1267f30b4488e71d\",\"name\":\"dfredborg\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/fredborg.org\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fredborg.org\/wp-content\/uploads\/2023\/06\/download.png\",\"contentUrl\":\"https:\/\/fredborg.org\/wp-content\/uploads\/2023\/06\/download.png\",\"width\":256,\"height\":256,\"caption\":\"dfredborg\"},\"logo\":{\"@id\":\"https:\/\/fredborg.org\/#\/schema\/person\/image\/\"},\"sameAs\":[\"https:fredborg.org\",\"https:\/\/www.linkedin.com\/in\/dfredborg\/\",\"https:\/\/x.com\/dfredborg\",\"https:\/\/www.youtube.com\/channel\/UCUNZglLDMjBlOK_T9JtI8UA\"],\"url\":\"https:\/\/fredborg.org\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Data is King: Part 1 Send data from Business Central to Azure - Fredborg","description":"Data is king. Still, for many of us, the problem is that we have so much data in so many different systems and different formats.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fredborg.org\/?p=1060","og_locale":"en_US","og_type":"article","og_title":"Data is King: Part 1 Send data from Business Central to Azure - Fredborg","og_description":"Data is king. Still, for many of us, the problem is that we have so much data in so many different systems and different formats.","og_url":"https:\/\/fredborg.org\/?p=1060","og_site_name":"Fredborg","article_published_time":"2023-08-11T06:55:26+00:00","article_modified_time":"2023-08-11T11:32:15+00:00","og_image":[{"width":1024,"height":576,"url":"https:\/\/fredborg.org\/wp-content\/uploads\/2023\/07\/header-1024x576.png","type":"image\/png"}],"author":"dfredborg","twitter_card":"summary_large_image","twitter_creator":"@dfredborg","twitter_site":"@dfredborg","twitter_misc":{"Written by":"dfredborg","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fredborg.org\/?p=1060#article","isPartOf":{"@id":"https:\/\/fredborg.org\/?p=1060"},"author":{"name":"dfredborg","@id":"https:\/\/fredborg.org\/#\/schema\/person\/59a5520cbf04c6bd1267f30b4488e71d"},"headline":"Data is King: Part 1 Send data from Business Central to Azure","datePublished":"2023-08-11T06:55:26+00:00","dateModified":"2023-08-11T11:32:15+00:00","mainEntityOfPage":{"@id":"https:\/\/fredborg.org\/?p=1060"},"wordCount":941,"commentCount":0,"publisher":{"@id":"https:\/\/fredborg.org\/#\/schema\/person\/59a5520cbf04c6bd1267f30b4488e71d"},"image":{"@id":"https:\/\/fredborg.org\/?p=1060#primaryimage"},"thumbnailUrl":"https:\/\/fredborg.org\/wp-content\/uploads\/2023\/07\/header.png","articleSection":["Azure","Business Central"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fredborg.org\/?p=1060#respond"]}]},{"@type":"WebPage","@id":"https:\/\/fredborg.org\/?p=1060","url":"https:\/\/fredborg.org\/?p=1060","name":"Data is King: Part 1 Send data from Business Central to Azure - Fredborg","isPartOf":{"@id":"https:\/\/fredborg.org\/#website"},"primaryImageOfPage":{"@id":"https:\/\/fredborg.org\/?p=1060#primaryimage"},"image":{"@id":"https:\/\/fredborg.org\/?p=1060#primaryimage"},"thumbnailUrl":"https:\/\/fredborg.org\/wp-content\/uploads\/2023\/07\/header.png","datePublished":"2023-08-11T06:55:26+00:00","dateModified":"2023-08-11T11:32:15+00:00","description":"Data is king. Still, for many of us, the problem is that we have so much data in so many different systems and different formats.","breadcrumb":{"@id":"https:\/\/fredborg.org\/?p=1060#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fredborg.org\/?p=1060"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fredborg.org\/?p=1060#primaryimage","url":"https:\/\/fredborg.org\/wp-content\/uploads\/2023\/07\/header.png","contentUrl":"https:\/\/fredborg.org\/wp-content\/uploads\/2023\/07\/header.png","width":2560,"height":1440},{"@type":"BreadcrumbList","@id":"https:\/\/fredborg.org\/?p=1060#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/fredborg.org\/"},{"@type":"ListItem","position":2,"name":"Data is King: Part 1 Send data from Business Central to Azure"}]},{"@type":"WebSite","@id":"https:\/\/fredborg.org\/#website","url":"https:\/\/fredborg.org\/","name":"Fredborg","description":"Business Central and Azure","publisher":{"@id":"https:\/\/fredborg.org\/#\/schema\/person\/59a5520cbf04c6bd1267f30b4488e71d"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fredborg.org\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/fredborg.org\/#\/schema\/person\/59a5520cbf04c6bd1267f30b4488e71d","name":"dfredborg","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fredborg.org\/#\/schema\/person\/image\/","url":"https:\/\/fredborg.org\/wp-content\/uploads\/2023\/06\/download.png","contentUrl":"https:\/\/fredborg.org\/wp-content\/uploads\/2023\/06\/download.png","width":256,"height":256,"caption":"dfredborg"},"logo":{"@id":"https:\/\/fredborg.org\/#\/schema\/person\/image\/"},"sameAs":["https:fredborg.org","https:\/\/www.linkedin.com\/in\/dfredborg\/","https:\/\/x.com\/dfredborg","https:\/\/www.youtube.com\/channel\/UCUNZglLDMjBlOK_T9JtI8UA"],"url":"https:\/\/fredborg.org\/?author=1"}]}},"_links":{"self":[{"href":"https:\/\/fredborg.org\/index.php?rest_route=\/wp\/v2\/posts\/1060","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fredborg.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fredborg.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fredborg.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fredborg.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1060"}],"version-history":[{"count":10,"href":"https:\/\/fredborg.org\/index.php?rest_route=\/wp\/v2\/posts\/1060\/revisions"}],"predecessor-version":[{"id":1101,"href":"https:\/\/fredborg.org\/index.php?rest_route=\/wp\/v2\/posts\/1060\/revisions\/1101"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/fredborg.org\/index.php?rest_route=\/wp\/v2\/media\/1061"}],"wp:attachment":[{"href":"https:\/\/fredborg.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1060"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fredborg.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1060"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fredborg.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1060"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}