以前做接口, 一直以为AX4.0下不支持dataset,对方传过来一个DATASET,都是先通过VS程序把DATASET转成XML,然后在AX里面解析XML, 或者直接让对方提供成一个XML。后来由于业务数据问题,用XML解析出现了技术难题(某个字段在某行为NULL时,回出现错位的问题,哪位大侠有没有好的办法结果这个问题呢?)。
以前做接口, 一直以为AX4.0下不支持dataset,对方传过来一个DATASET,都是先通过VS程序把DATASET转成XML,然后在AX里面解析XML, 或者直接让对方提供成一个XML。后来由于业务数据问题,用XML解析出现了技术难题(某个字段在某行为NULL时,回出现错位的问题,哪位大侠有没有好的办法结果这个问题呢?)。
逼的没有办法了,又开始研究AX4.0下去加载dataset,还好,有了各位高手和MSDN的指导,终于做出了一个解析简单DATASET的例子,希望和大家一起分享学习。

Code
static void UseDataSet(Args _args)
{
System.Data.DataSet da;
System.Data.DataTableCollection DTC ;
System.Data.DataTable DT;
System.Data.DataRowCollection DRC;
System.Data.DataRow DR;
System.Data.DataColumnCollection DCC;
System.Data.DataColumn DC;
INT I,J,TotalCOL,TotalRow;
str _xml;
;
da = new System.Data.DataSet();
da.ReadXml("F:\\xml\\3.xml");
DTC = da.get_Tables();
DT = DTC.get_Item(0);
DCC = DT.get_Columns();
DRC = DT.get_Rows();
TotalRow = DRC.get_Count();
TotalCOL = DCC.get_Count();
FOR(i=0;I<TotalRow;I++)
{
for(j=0;j<TotalCOL;j++)
{
DR = DRC.get_Item(I);
IF (DR.IsNull(J))
{
_xml = 'null';
}
ELSE
{
_xml = DR.get_Item(J);
}
INFO(_XML);
}
}
}
注:由于没有一个现成的调用WEB SERVICE 获取DATASET的例子,本地做了一个XML模拟了一下DATASET.这里顺便做了一个测试,一直以为AX解析带中文命名的字段是有问题的,结果有是自己错了
XML如下

Code
<张XXX>
<哈哈>
<李XX>3600030409070005</李XX>
<入库>0</入库>
<ItemId>LLYU</ItemId>
<InventBatchId>20090708-0001</InventBatchId>
<State>52</State>
<ExaminedDate>2009-06-24 00:00:00.000</ExaminedDate>
<ExaminedById>小刚</ExaminedById>
<BadQty>0</BadQty>
<DestroyNum>2</DestroyNum>
<UntreadCause>dddddd</UntreadCause>
<Conclusion>1</Conclusion>
</哈哈>
<哈哈>
<李XX>3600030409070002</李XX>
<入库>0</入库>
<ItemId>LLYU</ItemId>
<ItemName>锁紧盘</ItemName>
<InventBatchId>20090708-0002</InventBatchId>
<State>52</State>
<ExaminedDate>2009-06-24 00:00:00.000</ExaminedDate>
<ExaminedById>小刚</ExaminedById>
<GoodQty>20</GoodQty>
<BadQty>0</BadQty>
<DestroyNum>2</DestroyNum>
<UntreadCause>ggggg</UntreadCause>
<Conclusion>1</Conclusion>
</哈哈>
</张XXX>
由于时间问题,没有去研究AX4.0下怎么生成dataset。还是用的去组织XML的方式实现。欢迎各位领导指导工作