No Ax existe uma classe (TextIO) na qual podemos exportar informações para arquivos .txt, só que quando queremos exportar uma tabela nos deparamos com o problema de termos que escrever as colunas uma a uma, o torna um problema ao tentarmos exportar tabelas com varias colunas, como por exemplo a CustTable que tem 128 colunas em sua versão “default”. Por isso criei um método que exporta todas a colunas de qualquer tabela.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
//filename é o local onde sera salvo o arquivo e tableID é o ID da tabela
void textOut(FileName fileName, tableId tableID)
{
    #AOT
    TreeNode                treeNode;
    TreeNodeIterator        iterator;
    TextIo                  textIo;
    Common                  common;
    DictTable               dictTable;
    container               con;
    str                     AOTName, Linha;
    int                     j = 1, i, idTable, idField, t2;
    ;
 
    //Define a tabela da qual os dados serão exportados
    dictTable = new DictTable(tableID);
    common = dicttable.makeRecord();
 
    //Seta o treeNode apontado para os campo da tabela passado por parametro
    treeNode = TreeNode::findNode("Data Dictionary" + "\\" + "Tables" + "\\" + tableid2name(tableID) + "\\" +"Fields"+"\\");
 
    //Seta o iterator para que seja possivel varrer os campos da tabela
    iterator = TreeNode.AOTiterator();
    textIo = new TextIo(fileName,'w');
 
    while select common
    {
        while(treeNode)
        {
            //Este IF é necessario pois na primeira passagem o 
            //treeNode esta no nó FIELDS e daria problema com id do campo
            if (j != 1)
            {
                //Pega o nome do nó
                AOTName = treeNode.AOTname();
 
                //Pega o ID do campo
                idField = fieldname2id(tableID,AOTName);
 
                //Adiciona ao container valor do campo
                con+=[[common.(idField)]];
            }
 
            //passa para o proximo nó
            treeNode = iterator.next();
            j = 2;
        }
 
        //Esse for pega os valores do container e adiciona em uma varial str
        for(i=1;i<=conlen(con);i++)
        {
            Linha += conpeek(con,i);
            if(conlen(con) != i)
            Linha += ";";
        }
 
        //Escreve a linha no txt
        textio.write(Linha);
        con = connull();
        Linha = '';
 
        //Seta novamente o Treenode, pois depois de passar pelo ultimo nó ele fica nulo
        treeNode = TreeNode::findNode("Data Dictionary" + "\\" + "Tables" + "\\" + tableid2name(tableID) + "\\" +"Fields"+"\\");
        iterator = TreeNode.AOTiterator();
        j = 1;
    }
 
    if(textIo.status() == IO_STATUS::Ok)
    {
        BOX::info("Exportação realizada com sucesso", "Exportação");
    }
}