X++에서 XML 파일로 데이터 저장하고 읽기

Posted by Alvin You
2014. 8. 2. 09:35 Dynamics AX/Development

오늘은 AX의 데이터를 XML 파일로 저장 후 다시 데이터를 읽어 오는 샘플 코드를 보여 드릴까 합니다. 외부 시스템과의 데이터 교환을 DB-To-DB 형태로 교환 할 수도 있지만, 특정 시스템들은 XML 파일로 주고 받을 수 있기 때문에 시스템 구축시 아래 코드가 도움이 되었으면 좋겠습니다.

  • VendTable에서 데이터를 읽어와 vendList.xml 파일로 저장

static void ZSPK_CreateXMLFile(Args _args)

{

XmlDocument doc;

XmlElement nodeXml;

XmlElement nodeTable;

XmlElement nodeAccount;

XmlElement nodeName;

VendTable vendTable;

Filename fileName;

int i;

#WinAPI

;

 

doc = XmlDocument::newBlank();

nodeXml = doc.createElement('xml');

doc.appendChild(nodeXml);

 

while select vendTable order by vendTable.AccountNum

{

i++;

nodeTable = doc.createElement(tableStr(VendTable));

nodeTable.setAttribute(fieldStr(VendTable, RecId), int642str(vendTable.RecId));

nodeXml.appendChild(nodeTable);

 

nodeAccount = doc.createElement(fieldStr(VendTable, AccountNum));

nodeAccount.appendChild(doc.createTextNode(vendTable.AccountNum));

nodeTable.appendChild(nodeAccount);

 

nodeName = doc.createElement(fieldStr(vendTable, ZSPK_Name));

nodeName.appendChild(doc.createTextNode(vendTable.ZSPK_Name));

nodeTable.appendChild(nodeName);

 

if (i == 5) break;

}

 

fileName = WinAPI::getFolderPath(#CSIDL_PERSONAL);

fileName += '\\vendList.xml';

doc.save(fileName);

info("완료");

}

 

  • vendList.xml 파일을 읽어오는 코드 샘플 코드

static void ZSPK_DataSetRead(Args _args)

{

System.Data.DataSet dataSet;

System.Data.DataTableCollection dataTableCollection;

System.Data.DataTable dataTable;

System.Data.DataRowCollection dataRowCollection;

System.Data.DataColumnCollection dataColumnCollection;

System.Data.DataRow dataRow;

System.Data.DataColumn dataColumn;

int i,j,TotalCol,TotalRow;

str _xml;

;

 

dataSet = new System.Data.DataSet();

dataSet.ReadXml(@"C:\Users\Administrator\Documents\vendList.xml");

dataTableCollection = dataSet.get_Tables();

dataTable = dataTableCollection.get_Item(0);

dataColumnCollection = dataTable.get_Columns();

dataRowCollection = dataTable.get_Rows();

TotalRow = dataRowCollection.get_Count();

TotalCol = dataColumnCollection.get_Count();

 

for (i=0;i < TotalRow; i++)

{

dataRow = dataRowCollection.get_Item(i);

//setprefix(CLRInterop::getAnyTypeForObject(DataRow.get_item(i)));

for (j=0;j < TotalCol; j++)

{

//dataRow = dataRowCollection.get_item(i);

if (dataRow.IsNull(j))

_xml = 'null';

else

_xml = dataRow.get_Item(j);

 

info(strFmt("%1 - %2 - %3", i, j, _xml));

}

}

 

}