Imprimir

Método para Exportar tabla a Excel

Escrito por Administrador. Posted in X++

En algunas ocasiones, nos interesa exportar el contenido de una tabla de Axapta al Excel.

A continuación os dejo un Job, que pasandole el TableId, nos exportará y abrirá la información de la tabla de Axapta en Excel, mostrando la cabecera de cada campo y su contenido.

static void DAXExport(TableId tableId)

{
DictTable dt;
DictField df;
Common c;

CommaIO cio;
Container con, conSkip;

int field, counter;
str line, fieldName;
str fileName;
;

StartLengthyOperation();

//Access Table based on TableId
dt = new DictTable(tableId); //For Table schema
c = dt.makeRecord();         //To access records
c.selectForUpdate(false);

//Create temporary file
fileName = strFmt('%1\\ax_%2.csv', WinAPI::getTempPath(), dt.name());
cio = new CommaIO(fileName, "W");

if(cio)
{
cio.outFieldDelimiter(';');

//Column header
line = "";
for(field = 1; field <= dt.fieldCnt(); field++)
{
//Skip System Columns
switch(dt.fieldName(dt.fieldCnt2Id(field)))
{
case 'modifiedDateTime':
case 'dEL_ModifiedTime':
case 'modifiedBy':
case 'modifiedTransactionId':
case 'createdDateTime':
case 'dEL_CreatedTime':
case 'createdBy':
case 'createdTransactionId':
case 'dataAreaId':
case 'sequenceNum':
case 'recVersion':
case 'unionAllBranchId':
case 'rowNumber':
case 'RecId':
case 'TableId':
conSkip = conins(conSkip, maxint(), field);
break;

default:
con = conins(con,field,dt.fieldName(dt.fieldCnt2Id(field)));
}
}

cio.writeExp(con);
con = conNull();

//Table records
while select c
{
line = "";
for (field = 1; field <= dt.fieldCnt();field++)
{
if(0 == confind(conSkip, field))
con = conins(con, field, c.(dt.fieldCnt2Id(field)));
}

cio.writeExp(con);
con = conNull();

counter++;
}
}

EndLengthyOperation();
info(strfmt("%1 registros de la tabla '%2' exportados", counter, dt.name()));

//Open CSV file in registered app
WinAPI::shellExecute(fileName);
}