AX – D365FO – How to read and write text file using TextBuffer

AX provides several ways of writing files. Depending upon scenario, you can use one. Apart from AX native filing, you can also use .NET interop to call .NET classes for reading/writing files. We will be showing few classes which are provided by AX for writing files.


TextBuffer
The TextBuffer class manages arbitrary text file content, and generates and manipulates text.Saves the content of the TextBuffer object to a file.If the specified file already exists, it is overwritten without confirmation.

If an attacker can control input to File method, a security risk exists. Therefore, this method runs under Code Access Security. Calls to this method on the server require permission from the ExecutePermission class. Make sure that the user has development privileges by setting the security key to SysDevelopment on the control that calls this method.

Write Text Using TextBuffer

static void WriteTextFiletextBuffer(Args _args)
{
  BinData binData;
  TextBuffer textBuffer;
  str filepath;
  container confilter =['.txt','*.txt'];
  A_PurchaseOrder objA_PurchaseOrder;
  FileIoPermission permission;
  filepath = WinAPI::getSaveFileName(
    0,
    confilter,
    "",
    "Save As",
    "",
    "Untitled")
  #File
  ;
  permission = new FileIoPermission(filepath, #io_write);
  permission.assert();
  textBuffer = new textBuffer();
  textBuffer = new TextBuffer();
  //textBuffer.setText("A_PurchaseOrder Table Data");
  while select objA_PurchaseOrder
  {
    textBuffer.appendText(strfmt("%1\r | %2\r | %3\r | %4\r | %5\r\n",
       objA_PurchaseOrder.Purchase_ID,objA_PurchaseOrder.Vender_Code,
       enum2str(objA_PurchaseOrder.Status),
             date2str(objA_PurchaseOrder.Purchase_Date,123,DateDay::Digits2,DateSeparator::Hyphen,
             DateMonth::Digits2,DateSeparator::Hyphen,DateYear::Digits4),
    objA_PurchaseOrder.Purchase_Amount));
  }
  textBuffer.getText();
  binData = newBinData();
  binData.setStrData(textBuffer.getText());
  binData.saveFile(filepath);
  CodeAccessPermission::revertAssert();
}

Read text Using TextBuffer

static void ReadTextTextBuffer(Args _args)
{
    BinData binData;
    TextBuffer textBuffer;
    str filepath;
    containerconfilter =['.txt','*.txt'];
    A_PurchaseOrder objA_PurchaseOrder;
    FileIOPermission   permission;
    InteropPermission interopPermission;
    container           read;
    int Line;
    filepath = WinAPI::getOpenFileName(
        0,
        confilter,
        "",
        "Save As",
        "",
        "Untitled")
    #File
    ;
    interopPermission = new InteropPermission(InteropKind::ClrInterop);
    permission = new fileIOpermission(filepath,#io_read);
    permission.assert();
    textBuffer = new textBuffer();       
    textBuffer.fromFile(filepath);
    if(WinApi::fileExists(filepath))
    {
        //Line=textBuffer.numLines();
        textBuffer.getText();
        //info(strFmt("Lines = %1",Line));
        info(strFmt("Data \n%1",textBuffer.getText()));       
    }
    else
    {
        info("No file exists");
    }
}

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s