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");
    }
}

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Google photo

Stai commentando usando il tuo account Google. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...