By Steve Endow
On January 23, 2021, I recorded a video showing how to create a simple text file using AL in Business Central.
Here is the video:
https://www.youtube.com/watch?v=_GUzlFKJFQk
Below is the sample code from that video.
First, a few source pages that I used to create my demo.
1. A blog post showing the basics of creating a text file using AL:
https://www.cloudthing.com/blogs/export-to-text-files-from-business-central
2. A Microsoft Docs page discussing working with text file line endings in AL:
3. A Microsoft Docs page discussing the Duration data type:
Coincidentally, Yun Zhu also recently wrote a comprehensive blog post discussing usage of the Duration data type:
First, I created a page called ExportExample.PageExt.al, which contains this AL code to create Action buttons we'll use to create the text files.
 pageextension 50101 "ExportExample" extends "Company Information"  
 {  
   layout  
   {  
   }  
   actions  
   {  
     addlast(Processing)  
     {  
       Action("Export Text 1")  
       {  
         ApplicationArea = All;  
         Promoted = true;  
         PromotedIsBig = true;  
         PromotedCategory = Category4;  
         Image = ExportElectronicDocument;  
         trigger OnAction()  
         var  
           ExportExample: Codeunit "ExportExample";  
         begin  
           ExportExample.CreateTextFile1();  
         end;  
       }  
       Action("Export Text 2")  
       {  
         ApplicationArea = All;  
         Promoted = true;  
         PromotedIsBig = true;  
         PromotedCategory = Category4;  
         Image = ExportElectronicDocument;  
         trigger OnAction()  
         var  
           ExportExample: Codeunit "ExportExample";  
         begin  
           ExportExample.CreateTextFile2();  
         end;  
       }  
     }  
   }  
 }  
 codeunit 50100 "ExportExample"  
 {  
   //Create a simple BC AL text file  
   //https://www.cloudthing.com/blogs/export-to-text-files-from-business-central  
   //Line Endings:  
   //https://docs.microsoft.com/en-us/dynamics365/business-central/dev-itpro/developer/devenv-write-read-methods-line-break-behavior  
   //Duration:   
   //https://docs.microsoft.com/en-us/dynamics365/business-central/dev-itpro/developer/methods-auto/duration/duration-data-type  
   trigger OnRun()  
   begin  
   end;  
   procedure CreateTextFile1()  
   var  
     InStr: InStream;  
     OutStr: OutStream;  
     tmpBlob: Codeunit "Temp Blob";  
     FileName: Text;  
     StartTime: Time;  
     EndTime: Time;  
     ElapsedTime: Integer;  
     //HowLong: Duration;  
     CRLF: Text[2];  
     Counter: Integer;  
   begin  
     StartTime := System.Time;  
     CRLF[1] := 13;  
     CRLF[2] := 10;  
     FileName := 'TestFile.txt';  
     tmpBlob.CreateOutStream(OutStr, TextEncoding::Windows);  
     OutStr.WriteText('Start time: ' + Format(StartTime) + CRLF);  
     //OutStr.WriteText();  
     for Counter := 1 to 5000000 do begin  
       OutStr.WriteText(Format(Counter) + ': This is a line in the text file' + CRLF);  
       //OutStr.WriteText();  
     end;  
     EndTime := System.Time;  
     OutStr.WriteText('End time: ' + Format(StartTime) + CRLF);  
     // OutStr.WriteText();  
     ElapsedTime := EndTime - StartTime;  
     OutStr.WriteText('Elapsed time: ' + Format(ElapsedTime));  
     tmpBlob.CreateInStream(InStr, TextEncoding::Windows);  
     DownloadFromStream(InStr, '', '', '', FileName);  
   end;  
   procedure CreateTextFile2()  
   var  
     InStr: InStream;  
     OutStr: OutStream;  
     tmpBlob: Codeunit "Temp Blob";  
     FileName: Text;  
     StartTime: Time;  
     EndTime: Time;  
     ElapsedTime: Integer;  
     HowLong: Duration;  
     CRLF: Text[2];  
     Counter: Integer;  
     MyNotification: Notification;  
     ElapsedTimeText: Text;  
     HowLongText: Text;  
   begin  
     StartTime := System.Time;  
     CRLF[1] := 13;  
     CRLF[2] := 10;  
     FileName := 'TestFile.txt';  
     tmpBlob.CreateOutStream(OutStr, TextEncoding::Windows);  
     OutStr.WriteText('Start time: ' + Format(StartTime) + CRLF);  
     //OutStr.WriteText();  
     for Counter := 1 to 1000 do begin  
       OutStr.WriteText(Format(Counter) + ': This is a line in the text file' + CRLF);  
       //OutStr.WriteText();  
     end;  
     EndTime := System.Time;  
     OutStr.WriteText('End time: ' + Format(StartTime) + CRLF);  
     // OutStr.WriteText();  
     ElapsedTime := EndTime - StartTime;  
     HowLong := EndTime - StartTime;  
     ElapsedTimeText := 'Elapsed time: ' + Format(ElapsedTime) + 'ms';  
     HowLongText := 'Duration: ' + Format(HowLong);  
     OutStr.WriteText(ElapsedTimeText);  
     OutStr.WriteText(HowLongText);  
     tmpBlob.CreateInStream(InStr, TextEncoding::Windows);  
     DownloadFromStream(InStr, '', 'D:\Temp', '', FileName);  
     MyNotification.Message := ElapsedTimeText + ' . . . . ' + HowLongText;  
     MyNotification.Scope := NotificationScope::LocalScope;  
     MyNotification.AddAction('Thank you!', Codeunit::ExportExample, 'ThankYou');  
     MyNotification.AddAction('Thank you very much!', Codeunit::ExportExample, 'ThankYouVeryMuch');  
     MyNotification.Send();  
   end;  
   procedure ThankYou(MyNotification: Notification)  
   begin  
   end;  
   procedure ThankYouVeryMuch(MyNotification: Notification)  
   begin  
   end;  
 }  
Steve Endow is a Microsoft MVP in Los Angeles. He works with Dynamics 365 Business Central, Microsoft Power Automate, Power Apps, Azure, and .NET.

 
 
 
 
where is tmpBlob: Codeunit "Temp Blob"; ? i dont't found it
ReplyDeletetmpBlob: Codeunit "Temp Blob";
ReplyDeleteHi, the Codeunit "Temp Blob" should be accessible if you have Downloaded Symbols in VS Code. (Unless something has changed in the last year)
ReplyDeleteAre you able to successfully download symbols?