public void run()
{
SalesTable SalesTable;
SalesLine SalesLine;
int i,numSales;
SalesStatus SalesStatus;
InventTransId InventTransId;
SalesId salesid;
SysOperationProgress prog = new SysOperationProgress();
XMLNodeList ReqNodeList;
XMLNodeList LinesNodeList;
SysOperationProgress simpleProgressTask;
XMLDocument doc;
XMLNode rootNode;
XMLNodeList salesLines;
XMLElement element,lineElement;
;
doc = new XMLDocument();
doc.load(fileName);
rootNode = doc.documentElement();
ReqNodeList = rootNode.selectNodes("/Sales/SalesTable"); // caricamento della lista degli ordini
numSales = ReqNodeList.length();
simpleProgressTask = SysOperationProgress::newGeneral(#aviUpdate, 'Sales import...',numSales);
ttsbegin;
prog.setCaption("Import in AX in progress...");
prog.setAnimation(#AviTransfer);
i = 0;
for(element = ReqNodeList.nextNode(); element; element = ReqNodeList.nextNode()) // ciclo sugli ordini cliente
{
simpleProgressTask.incCount(1);
simpleProgressTask.setText(strfmt("Percent: %1"+'%', (i/numSales)*100));
simpleProgressTask.update(true);
salesId = element.selectSingleNode("@SalesId").value();
if(SalesTable::find(salesId)) //l'ordine è gà prensente, occorre fare un update
{
select forupdate SalesTable where SalesTable.SalesId == salesId;
SalesTable.SalesStatus = str2enum(SalesStatus, element.selectSingleNode(fieldstr(SalesTable, SalesStatus)).innerText());
//Inserire quì gli altri campi di testata da importare
SalesTable.Update();
}
else // ordine non presente, occorre crearlo e fare l'insert
{
SalesTable.SalesId = salesId;
SalesTable.SalesStatus = str2enum(SalesStatus, element.selectSingleNode(fieldstr(SalesTable, SalesStatus)).innerText());
//Inserire quì gli altri campi di testata da importare
SalesTable.Insert();
}
LinesNodeList = element.selectNodes("Lines/SalesLine"); // caricamento della lista delle righe dell'ordine che stò ciclando
for(lineElement = LinesNodeList.nextNode(); lineElement; lineElement = LinesNodeList.nextNode()) // ciclo sulle righe
{
InventTransId = lineElement.selectSingleNode("@InventTransId").value();
if(SalesLine::findInventTransId(InventTransId)) // la riga ordine è gà prensente, occorre fare un update
{
select forupdate SalesLine where SalesLine.InventTransId == InventTransId;
SalesLine.LineNum = str2num(lineElement.selectSingleNode(fieldstr(SalesLine, LineNum)).innerText());
//Inserire quì gli altri campi di riga da importare
SalesLine.Update();
}
else // la riga d'ordine non è presente, occorre crearlo e fare l'insert
{
SalesLine.InventTransId = InventTransId;
SalesLine.LineNum = str2num(lineElement.selectSingleNode(fieldstr(SalesLine, LineNum)).innerText());
//Inserire quì gli altri campi di riga da importare
SalesLine.Insert();
}
}
i++;
}
ttscommit;
}
venerdì 31 agosto 2012
AX 2009 - Importazione da XML
Il codice sottostante importa i dati in SalesTable, SalesLine dal file XML generato tramite esportazione:
Iscriviti a:
Commenti sul post (Atom)
Nessun commento:
Posta un commento