{"id":997938,"date":"2025-09-12T13:11:20","date_gmt":"2025-09-12T13:11:20","guid":{"rendered":"https:\/\/ioi.gmbh\/?p=997938"},"modified":"2026-09-02T06:06:55","modified_gmt":"2026-09-02T06:06:55","slug":"plugin-capability-datamigrate-pro-getprinter","status":"publish","type":"post","link":"https:\/\/ioi.gmbh\/en\/2025\/09\/12\/plugin-capability-datamigrate-pro-getprinter\/","title":{"rendered":"Plugin Capability of DataMigrate Pro: &#8220;getprinter&#8221; Example"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">This document describes a first sample implementation of a plugin in the DataMigratePro system.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"1.-Einf\u00fchrung\">1. Introduction<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The plugin architecture of DataMigratePro lets you integrate external functions into the system as modules. The aim is extensibility without changing the core code.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"2.-Entwicklung-des-Plugins\">2. Developing the plugin<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The following example implements the <code>IRelayPlugin<\/code> interface. The <code>getprinter<\/code> action returns a list of the locally installed printers:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>using System;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Collections.Generic;\nusing System.Drawing.Printing;\nusing DataMigratePro.Plugins;\n\nnamespace GetPrinterPlugin\n{\n    public class GetPrinterPlugin : IRelayPlugin\n    {\n        public string ActionName => \"getprinter\";\n\n        public async Task&lt;string> ExecuteAsync(string base64Data)\n        {\n            await Task.Yield(); \/\/ simulate async\n            string decodedInput = Encoding.UTF8.GetString(Convert.FromBase64String(base64Data));\n\n            var printers = new List&lt;string>();\n            foreach (string printer in PrinterSettings.InstalledPrinters)\n            {\n                printers.Add(printer);\n            }\n\n            var result = new\n            {\n                action = ActionName,\n                input = decodedInput,\n                printers = printers\n            };\n\n            return System.Text.Json.JsonSerializer.Serialize(result, new System.Text.Json.JsonSerializerOptions { WriteIndented = true });\n        }\n    }\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #81A1C1\">using<\/span><span style=\"color: #D8DEE9FF\"> System<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">using<\/span><span style=\"color: #D8DEE9FF\"> System<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">Text<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">using<\/span><span style=\"color: #D8DEE9FF\"> System<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">Threading<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">Tasks<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">using<\/span><span style=\"color: #D8DEE9FF\"> System<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">Collections<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">Generic<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">using<\/span><span style=\"color: #D8DEE9FF\"> System<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">Drawing<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">Printing<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">using<\/span><span style=\"color: #D8DEE9FF\"> DataMigratePro<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">Plugins<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">namespace<\/span><span style=\"color: #D8DEE9FF\"> GetPrinterPlugin<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">GetPrinterPlugin<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> IRelayPlugin<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #D8DEE9FF\"> ActionName <\/span><span style=\"color: #81A1C1\">=&gt;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">getprinter<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">async<\/span><span style=\"color: #D8DEE9FF\"> Task<\/span><span style=\"color: #ECEFF4\">&lt;<\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #ECEFF4\">&gt;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">ExecuteAsync<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #D8DEE9FF\"> base64Data<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #81A1C1\">await<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Task<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">Yield<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #81A1C1\">;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #616E88\">\/\/ simulate async<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #D8DEE9FF\"> decodedInput <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Encoding<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">UTF8<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">GetString<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">Convert<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">FromBase64String<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">base64Data<\/span><span style=\"color: #ECEFF4\">))<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #81A1C1\">var<\/span><span style=\"color: #D8DEE9FF\"> printers <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">new<\/span><span style=\"color: #D8DEE9FF\"> List<\/span><span style=\"color: #ECEFF4\">&lt;<\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #ECEFF4\">&gt;()<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #81A1C1\">foreach<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #D8DEE9FF\"> printer <\/span><span style=\"color: #81A1C1\">in<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">PrinterSettings<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">InstalledPrinters<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                <\/span><span style=\"color: #D8DEE9\">printers<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">Add<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">printer<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #81A1C1\">var<\/span><span style=\"color: #D8DEE9FF\"> result <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">new<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                <\/span><span style=\"color: #D8DEE9\">action<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">ActionName<\/span><span style=\"color: #ECEFF4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                <\/span><span style=\"color: #D8DEE9\">input<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">decodedInput<\/span><span style=\"color: #ECEFF4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                <\/span><span style=\"color: #D8DEE9\">printers<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">printers<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #ECEFF4\">}<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #81A1C1\">return<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">System<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">Text<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">Json<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">JsonSerializer<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">Serialize<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">result<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">new<\/span><span style=\"color: #D8DEE9FF\"> System<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">Text<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">Json<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">JsonSerializerOptions <\/span><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">WriteIndented<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">true<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">})<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\ud83d\udd27 Note: The plugin DLL and <code>DataMigratePro.Plugins.dll<\/code> have to be copied into the <code>plugins<\/code> subdirectory.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"3.-Business-Central-Integration\">3. Business Central integration<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">An AL page is provided to control the plugin; it handles the call and displays the result.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>page 50100 \"Relay Result Viewer\"\n{\n    PageType = Card;\n    Caption = 'Relay Result Viewer';\n    ApplicationArea = All;\n    UsageCategory = Administration;\n\n    layout\n    {\n        area(content)\n        {\n            field(\"ActionText\"; ActionText) { ApplicationArea = All; }\n            field(\"JSON (Raw)\"; RawJsonText) { ApplicationArea = All; MultiLine = true; }\n            field(\"Response\"; ResultText) { ApplicationArea = All; Editable = false; MultiLine = true; }\n            field(\"Info\"; InfoText) { ApplicationArea = All; Editable = false; Style = Attention; StyleExpr = true; }\n        }\n    }\n\n    actions\n    {\n        area(Processing)\n        {\n            group(Action)\n            {\n                action(SendToRelay)\n                {\n                    Caption = 'Send to Azure Relay';\n                    Image = ExecuteBatch;\n                    ApplicationArea = All;\n                    Promoted = true;\n                    PromotedCategory = Process;\n                    PromotedIsBig = true;\n\n                    trigger OnAction()\n                    var\n                        Sender: Codeunit \"Azure Relay Sender IOI\";\n                        FullJson: Text;\n                        EncodedMessage: Text;\n                    begin\n                        Base64Data := ToBase64(RawJsonText);\n                        FullJson := '{\"action\":\"' + ActionText + '\",\"data\":\"' + Base64Data + '\"}';\n                        EncodedMessage := ToBase64(FullJson);\n                        ResultText := Sender.SendMessage(EncodedMessage);\n                    end;\n                }\n            }\n        }\n    }\n\n    trigger OnOpenPage()\n    begin\n        ActionText := 'getprinter';\n        RawJsonText := '{}';\n        InfoText :=\n            'This tool sends actions to Azure Relay. ' +\n            'The data will be base64 encoded and wrapped into a JSON structure like: ' +\n            '{\"action\":\"...\",\"data\":\"...\"}, then encoded again before sending.';\n    end;\n\n    var\n        ActionText: Text;\n        RawJsonText: Text;\n        Base64Data: Text;\n        ResultText: Text;\n        InfoText: Text;\n\n    local procedure ToBase64(InputText: Text): Text\n    var\n        TempBlob: Codeunit \"Temp Blob\";\n        Base64Convert: Codeunit \"Base64 Convert\";\n        OutStr: OutStream;\n        InStr: InStream;\n    begin\n        TempBlob.CreateOutStream(OutStr, TextEncoding::UTF8);\n        OutStr.WriteText(InputText);\n        TempBlob.CreateInStream(InStr, TextEncoding::UTF8);\n        exit(Base64Convert.ToBase64(InStr));\n    end;\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D8DEE9\">page<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">50100<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">Relay Result Viewer<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #D8DEE9\">PageType<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Card<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #D8DEE9\">Caption<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">Relay Result Viewer<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #D8DEE9\">ApplicationArea<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">All<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #D8DEE9\">UsageCategory<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Administration<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #D8DEE9\">layout<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #88C0D0\">area<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">content<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #88C0D0\">field<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">ActionText<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\">; <\/span><span style=\"color: #D8DEE9\">ActionText<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">ApplicationArea<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">All<\/span><span style=\"color: #81A1C1\">;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #88C0D0\">field<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">JSON (Raw)<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\">; <\/span><span style=\"color: #D8DEE9\">RawJsonText<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">ApplicationArea<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">All<\/span><span style=\"color: #81A1C1\">;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">MultiLine<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">true;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #88C0D0\">field<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">Response<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\">; <\/span><span style=\"color: #D8DEE9\">ResultText<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">ApplicationArea<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">All<\/span><span style=\"color: #81A1C1\">;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Editable<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">false;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">MultiLine<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">true;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #88C0D0\">field<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">Info<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\">; <\/span><span style=\"color: #D8DEE9\">InfoText<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">ApplicationArea<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">All<\/span><span style=\"color: #81A1C1\">;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Editable<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">false;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Style<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Attention<\/span><span style=\"color: #81A1C1\">;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">StyleExpr<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">true;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #D8DEE9\">actions<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #88C0D0\">area<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">Processing<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #88C0D0\">group<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">Action<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                <\/span><span style=\"color: #88C0D0\">action<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">SendToRelay<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                    <\/span><span style=\"color: #D8DEE9\">Caption<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">Send to Azure Relay<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                    <\/span><span style=\"color: #D8DEE9\">Image<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">ExecuteBatch<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                    <\/span><span style=\"color: #D8DEE9\">ApplicationArea<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">All<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                    <\/span><span style=\"color: #D8DEE9\">Promoted<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">true;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                    <\/span><span style=\"color: #D8DEE9\">PromotedCategory<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Process<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                    <\/span><span style=\"color: #D8DEE9\">PromotedIsBig<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">true;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                    trigger <\/span><span style=\"color: #88C0D0\">OnAction<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                    var<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                        Sender: Codeunit &quot;Azure Relay Sender IOI&quot;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                        FullJson<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Text<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                        EncodedMessage<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Text<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                    <\/span><span style=\"color: #D8DEE9\">begin<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                        Base64Data <\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">ToBase64<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">RawJsonText<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                        FullJson <\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">{&quot;action&quot;:&quot;<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">ActionText<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">&quot;,&quot;data&quot;:&quot;<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Base64Data<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">&quot;}<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                        EncodedMessage <\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">ToBase64<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">FullJson<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                        ResultText <\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Sender<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">SendMessage<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">EncodedMessage<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                    <\/span><span style=\"color: #D8DEE9\">end<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    trigger <\/span><span style=\"color: #88C0D0\">OnOpenPage<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    begin<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        ActionText := &#39;getprinter&#39;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        RawJsonText <\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">{}<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        InfoText <\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #81A1C1\">=<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">This tool sends actions to Azure Relay. <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">+<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">The data will be base64 encoded and wrapped into a JSON structure like: <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">+<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">{&quot;action&quot;:&quot;...&quot;,&quot;data&quot;:&quot;...&quot;}, then encoded again before sending.<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #D8DEE9\">end<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #D8DEE9\">var<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        ActionText<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Text<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        RawJsonText<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Text<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        Base64Data<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Text<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        ResultText<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Text<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        InfoText<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Text<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #D8DEE9\">local<\/span><span style=\"color: #D8DEE9FF\"> procedure <\/span><span style=\"color: #88C0D0\">ToBase64<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">InputText: Text<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\">: Text<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    var<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        TempBlob: Codeunit &quot;Temp Blob&quot;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        Base64Convert<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Codeunit<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">Base64 Convert<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        OutStr<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">OutStream<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        InStr<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">InStream<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #D8DEE9\">begin<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #D8DEE9\">TempBlob<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">CreateOutStream<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">OutStr<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> TextEncoding<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #81A1C1\">:<\/span><span style=\"color: #D8DEE9\">UTF8<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #D8DEE9\">OutStr<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">WriteText<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">InputText<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #D8DEE9\">TempBlob<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">CreateInStream<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">InStr<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> TextEncoding<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #81A1C1\">:<\/span><span style=\"color: #D8DEE9\">UTF8<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #88C0D0\">exit<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">Base64Convert<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">ToBase64<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">InStr<\/span><span style=\"color: #ECEFF4\">))<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #D8DEE9\">end<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"4.-Beispielausgabe\">4. Sample output<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">After a successful run, the result is shown in the <code>Response<\/code> field of the page:<\/p>\n\n\n\n<div class=\"wp-block-stackable-image stk-block-image stk-block stk-ce2ddc1\" data-block-id=\"ce2ddc1\"><figure><span class=\"stk-img-wrapper stk-image--shape-stretch\"><img decoding=\"async\" class=\"stk-img wp-image-994251\" src=\"https:\/\/ioitempold.dreamhosters.com\/wp-content\/uploads\/2025\/09\/PluginExample.gif\" width=\"1920\" height=\"1080\"\/><\/span><\/figure><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"5.-Fazit\">5. Conclusion<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">This plugin shows how flexibly and modularly DataMigratePro can be extended. This architecture lets you develop, test and run new functions in isolated modules.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This document describes a first sample implementation of a plugin in the DataMigratePro system. 1. Introduction The plugin architecture of DataMigratePro lets you integrate external functions into the system as modules. The aim is extensibility without changing the core code. 2. Developing the plugin The following example implements the IRelayPlugin interface. The getprinter action returns [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":998070,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[42,38],"tags":[],"class_list":["post-997938","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-datamigrate-pro","category-support-documentation"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v28.6 (Yoast SEO v28.6) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Plugin Capability of DataMigrate Pro: &quot;getprinter&quot; Example | IOI<\/title>\n<meta name=\"description\" content=\"The DataMigrate Pro plugin architecture explained with the \u201cgetprinter\u201d example: structure, interface and what your own extension can take over.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/ioi.gmbh\/en\/2025\/09\/12\/plugin-capability-datamigrate-pro-getprinter\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Plugin Capability of DataMigrate Pro: &quot;getprinter&quot; Example\" \/>\n<meta property=\"og:description\" content=\"The DataMigrate Pro plugin architecture explained with the \u201cgetprinter\u201d example: structure, interface and what your own extension can take over.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ioi.gmbh\/en\/2025\/09\/12\/plugin-capability-datamigrate-pro-getprinter\/\" \/>\n<meta property=\"og:site_name\" content=\"IO Integrated\" \/>\n<meta property=\"article:published_time\" content=\"2025-09-12T13:11:20+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-02T06:06:55+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/ioi.gmbh\/wp-content\/uploads\/2026\/08\/tech-flow-05.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2400\" \/>\n\t<meta property=\"og:image:height\" content=\"1650\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Sascha Marquardt\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Sascha Marquardt\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/ioi.gmbh\\\/en\\\/2025\\\/09\\\/12\\\/plugin-capability-datamigrate-pro-getprinter\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/ioi.gmbh\\\/en\\\/2025\\\/09\\\/12\\\/plugin-capability-datamigrate-pro-getprinter\\\/\"},\"author\":{\"name\":\"Sascha Marquardt\",\"@id\":\"https:\\\/\\\/ioi.gmbh\\\/en\\\/#\\\/schema\\\/person\\\/a5d54f0a2d5587968ea8a34385a745d3\"},\"headline\":\"Plugin Capability of DataMigrate Pro: &#8220;getprinter&#8221; Example\",\"datePublished\":\"2025-09-12T13:11:20+00:00\",\"dateModified\":\"2026-09-02T06:06:55+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/ioi.gmbh\\\/en\\\/2025\\\/09\\\/12\\\/plugin-capability-datamigrate-pro-getprinter\\\/\"},\"wordCount\":138,\"publisher\":{\"@id\":\"https:\\\/\\\/ioi.gmbh\\\/en\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/ioi.gmbh\\\/en\\\/2025\\\/09\\\/12\\\/plugin-capability-datamigrate-pro-getprinter\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/ioi.gmbh\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/tech-flow-05.jpg\",\"articleSection\":[\"DataMigrate Pro\",\"Support &amp; Documentation\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/ioi.gmbh\\\/en\\\/2025\\\/09\\\/12\\\/plugin-capability-datamigrate-pro-getprinter\\\/\",\"url\":\"https:\\\/\\\/ioi.gmbh\\\/en\\\/2025\\\/09\\\/12\\\/plugin-capability-datamigrate-pro-getprinter\\\/\",\"name\":\"Plugin Capability of DataMigrate Pro: \\\"getprinter\\\" Example | IOI\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/ioi.gmbh\\\/en\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/ioi.gmbh\\\/en\\\/2025\\\/09\\\/12\\\/plugin-capability-datamigrate-pro-getprinter\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/ioi.gmbh\\\/en\\\/2025\\\/09\\\/12\\\/plugin-capability-datamigrate-pro-getprinter\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/ioi.gmbh\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/tech-flow-05.jpg\",\"datePublished\":\"2025-09-12T13:11:20+00:00\",\"dateModified\":\"2026-09-02T06:06:55+00:00\",\"description\":\"The DataMigrate Pro plugin architecture explained with the \u201cgetprinter\u201d example: structure, interface and what your own extension can take over.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/ioi.gmbh\\\/en\\\/2025\\\/09\\\/12\\\/plugin-capability-datamigrate-pro-getprinter\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/ioi.gmbh\\\/en\\\/2025\\\/09\\\/12\\\/plugin-capability-datamigrate-pro-getprinter\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/ioi.gmbh\\\/en\\\/2025\\\/09\\\/12\\\/plugin-capability-datamigrate-pro-getprinter\\\/#primaryimage\",\"url\":\"https:\\\/\\\/ioi.gmbh\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/tech-flow-05.jpg\",\"contentUrl\":\"https:\\\/\\\/ioi.gmbh\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/tech-flow-05.jpg\",\"width\":2400,\"height\":1650,\"caption\":\"Aufsteigende blaue Lichtlinien mit Leiterbahnen auf dunklem Grund\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/ioi.gmbh\\\/en\\\/2025\\\/09\\\/12\\\/plugin-capability-datamigrate-pro-getprinter\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Start\",\"item\":\"https:\\\/\\\/ioi.gmbh\\\/en\\\/io-integrated\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Plugin Capability of DataMigrate Pro: &#8220;getprinter&#8221; Example\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/ioi.gmbh\\\/en\\\/#website\",\"url\":\"https:\\\/\\\/ioi.gmbh\\\/en\\\/\",\"name\":\"IO Integrated\",\"description\":\"Ihr Partner f\u00fcr Business Central Migrationsprojekte\",\"publisher\":{\"@id\":\"https:\\\/\\\/ioi.gmbh\\\/en\\\/#organization\"},\"alternateName\":\"IOI\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/ioi.gmbh\\\/en\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/ioi.gmbh\\\/en\\\/#organization\",\"name\":\"IO Integrated GmbH & Co. KG\",\"alternateName\":\"IO Integrated\",\"url\":\"https:\\\/\\\/ioi.gmbh\\\/en\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/ioi.gmbh\\\/en\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/ioi.gmbh\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/Logo-01-scaled.png\",\"contentUrl\":\"https:\\\/\\\/ioi.gmbh\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/Logo-01-scaled.png\",\"width\":2560,\"height\":2560,\"caption\":\"IO Integrated GmbH & Co. KG\"},\"image\":{\"@id\":\"https:\\\/\\\/ioi.gmbh\\\/en\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.linkedin.com\\\/company\\\/io-integrated\\\/\",\"https:\\\/\\\/www.youtube.com\\\/@iointegrated\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/ioi.gmbh\\\/en\\\/#\\\/schema\\\/person\\\/a5d54f0a2d5587968ea8a34385a745d3\",\"name\":\"Sascha Marquardt\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ef58d8e010d70a8865263b60ce94c2d37aca69da3c86e0087128a7bb08a9dd91?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ef58d8e010d70a8865263b60ce94c2d37aca69da3c86e0087128a7bb08a9dd91?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ef58d8e010d70a8865263b60ce94c2d37aca69da3c86e0087128a7bb08a9dd91?s=96&d=mm&r=g\",\"caption\":\"Sascha Marquardt\"},\"url\":\"https:\\\/\\\/ioi.gmbh\\\/en\\\/author\\\/s-marquardt\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Plugin Capability of DataMigrate Pro: \"getprinter\" Example | IOI","description":"The DataMigrate Pro plugin architecture explained with the \u201cgetprinter\u201d example: structure, interface and what your own extension can take over.","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:\/\/ioi.gmbh\/en\/2025\/09\/12\/plugin-capability-datamigrate-pro-getprinter\/","og_locale":"en_US","og_type":"article","og_title":"Plugin Capability of DataMigrate Pro: \"getprinter\" Example","og_description":"The DataMigrate Pro plugin architecture explained with the \u201cgetprinter\u201d example: structure, interface and what your own extension can take over.","og_url":"https:\/\/ioi.gmbh\/en\/2025\/09\/12\/plugin-capability-datamigrate-pro-getprinter\/","og_site_name":"IO Integrated","article_published_time":"2025-09-12T13:11:20+00:00","article_modified_time":"2026-09-02T06:06:55+00:00","og_image":[{"width":2400,"height":1650,"url":"https:\/\/ioi.gmbh\/wp-content\/uploads\/2026\/08\/tech-flow-05.jpg","type":"image\/jpeg"}],"author":"Sascha Marquardt","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Sascha Marquardt","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/ioi.gmbh\/en\/2025\/09\/12\/plugin-capability-datamigrate-pro-getprinter\/#article","isPartOf":{"@id":"https:\/\/ioi.gmbh\/en\/2025\/09\/12\/plugin-capability-datamigrate-pro-getprinter\/"},"author":{"name":"Sascha Marquardt","@id":"https:\/\/ioi.gmbh\/en\/#\/schema\/person\/a5d54f0a2d5587968ea8a34385a745d3"},"headline":"Plugin Capability of DataMigrate Pro: &#8220;getprinter&#8221; Example","datePublished":"2025-09-12T13:11:20+00:00","dateModified":"2026-09-02T06:06:55+00:00","mainEntityOfPage":{"@id":"https:\/\/ioi.gmbh\/en\/2025\/09\/12\/plugin-capability-datamigrate-pro-getprinter\/"},"wordCount":138,"publisher":{"@id":"https:\/\/ioi.gmbh\/en\/#organization"},"image":{"@id":"https:\/\/ioi.gmbh\/en\/2025\/09\/12\/plugin-capability-datamigrate-pro-getprinter\/#primaryimage"},"thumbnailUrl":"https:\/\/ioi.gmbh\/wp-content\/uploads\/2026\/08\/tech-flow-05.jpg","articleSection":["DataMigrate Pro","Support &amp; Documentation"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/ioi.gmbh\/en\/2025\/09\/12\/plugin-capability-datamigrate-pro-getprinter\/","url":"https:\/\/ioi.gmbh\/en\/2025\/09\/12\/plugin-capability-datamigrate-pro-getprinter\/","name":"Plugin Capability of DataMigrate Pro: \"getprinter\" Example | IOI","isPartOf":{"@id":"https:\/\/ioi.gmbh\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/ioi.gmbh\/en\/2025\/09\/12\/plugin-capability-datamigrate-pro-getprinter\/#primaryimage"},"image":{"@id":"https:\/\/ioi.gmbh\/en\/2025\/09\/12\/plugin-capability-datamigrate-pro-getprinter\/#primaryimage"},"thumbnailUrl":"https:\/\/ioi.gmbh\/wp-content\/uploads\/2026\/08\/tech-flow-05.jpg","datePublished":"2025-09-12T13:11:20+00:00","dateModified":"2026-09-02T06:06:55+00:00","description":"The DataMigrate Pro plugin architecture explained with the \u201cgetprinter\u201d example: structure, interface and what your own extension can take over.","breadcrumb":{"@id":"https:\/\/ioi.gmbh\/en\/2025\/09\/12\/plugin-capability-datamigrate-pro-getprinter\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ioi.gmbh\/en\/2025\/09\/12\/plugin-capability-datamigrate-pro-getprinter\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ioi.gmbh\/en\/2025\/09\/12\/plugin-capability-datamigrate-pro-getprinter\/#primaryimage","url":"https:\/\/ioi.gmbh\/wp-content\/uploads\/2026\/08\/tech-flow-05.jpg","contentUrl":"https:\/\/ioi.gmbh\/wp-content\/uploads\/2026\/08\/tech-flow-05.jpg","width":2400,"height":1650,"caption":"Aufsteigende blaue Lichtlinien mit Leiterbahnen auf dunklem Grund"},{"@type":"BreadcrumbList","@id":"https:\/\/ioi.gmbh\/en\/2025\/09\/12\/plugin-capability-datamigrate-pro-getprinter\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Start","item":"https:\/\/ioi.gmbh\/en\/io-integrated\/"},{"@type":"ListItem","position":2,"name":"Plugin Capability of DataMigrate Pro: &#8220;getprinter&#8221; Example"}]},{"@type":"WebSite","@id":"https:\/\/ioi.gmbh\/en\/#website","url":"https:\/\/ioi.gmbh\/en\/","name":"IO Integrated","description":"Ihr Partner f\u00fcr Business Central Migrationsprojekte","publisher":{"@id":"https:\/\/ioi.gmbh\/en\/#organization"},"alternateName":"IOI","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/ioi.gmbh\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/ioi.gmbh\/en\/#organization","name":"IO Integrated GmbH & Co. KG","alternateName":"IO Integrated","url":"https:\/\/ioi.gmbh\/en\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ioi.gmbh\/en\/#\/schema\/logo\/image\/","url":"https:\/\/ioi.gmbh\/wp-content\/uploads\/2026\/08\/Logo-01-scaled.png","contentUrl":"https:\/\/ioi.gmbh\/wp-content\/uploads\/2026\/08\/Logo-01-scaled.png","width":2560,"height":2560,"caption":"IO Integrated GmbH & Co. KG"},"image":{"@id":"https:\/\/ioi.gmbh\/en\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.linkedin.com\/company\/io-integrated\/","https:\/\/www.youtube.com\/@iointegrated"]},{"@type":"Person","@id":"https:\/\/ioi.gmbh\/en\/#\/schema\/person\/a5d54f0a2d5587968ea8a34385a745d3","name":"Sascha Marquardt","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/ef58d8e010d70a8865263b60ce94c2d37aca69da3c86e0087128a7bb08a9dd91?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/ef58d8e010d70a8865263b60ce94c2d37aca69da3c86e0087128a7bb08a9dd91?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ef58d8e010d70a8865263b60ce94c2d37aca69da3c86e0087128a7bb08a9dd91?s=96&d=mm&r=g","caption":"Sascha Marquardt"},"url":"https:\/\/ioi.gmbh\/en\/author\/s-marquardt\/"}]}},"_links":{"self":[{"href":"https:\/\/ioi.gmbh\/en\/wp-json\/wp\/v2\/posts\/997938","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ioi.gmbh\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ioi.gmbh\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ioi.gmbh\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/ioi.gmbh\/en\/wp-json\/wp\/v2\/comments?post=997938"}],"version-history":[{"count":2,"href":"https:\/\/ioi.gmbh\/en\/wp-json\/wp\/v2\/posts\/997938\/revisions"}],"predecessor-version":[{"id":997974,"href":"https:\/\/ioi.gmbh\/en\/wp-json\/wp\/v2\/posts\/997938\/revisions\/997974"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ioi.gmbh\/en\/wp-json\/wp\/v2\/media\/998070"}],"wp:attachment":[{"href":"https:\/\/ioi.gmbh\/en\/wp-json\/wp\/v2\/media?parent=997938"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ioi.gmbh\/en\/wp-json\/wp\/v2\/categories?post=997938"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ioi.gmbh\/en\/wp-json\/wp\/v2\/tags?post=997938"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}