将数据导出为CSV时的双重记录

时间:2016-07-25 06:55:26

标签: csv export axapta x++

我创建了一个将数据导出到CSV文件的方法,我创建了以下代码:

public void export()
{

    permission = new FileIOPermission(fileNameValue, #io_WRITE);
    permission.assert();

    inFile = new CommaTextIo(fileNameValue, #io_WRITE);
    inFile.inFieldDelimiter(";");
    inFile.inRecordDelimiter("\n");

    while (inFile.status() == IO_Status::Ok)

    while select inventTrans
    where inventTrans.StatusIssue == StatusIssue::ReservPhysical
    join inventDim
    where inventDim.InventLocationId == inventLocationId
    join inventTransOrg
    where inventTransOrg.RecId == inventTrans.InventTransOrg

    {

     con = conNull();

       con = conIns(con, 1, inventTransOrg.inventTransId);
       con = conIns(con, 2, inventLocationId);
       con = conIns(con, 3, inventTrans.Qty);

        inFile.writeExp(con);
}
}

这将创建一个包含3列的CSV文件,但是很多双记录(几乎100)实际数据不包含100个双记录。有什么建议我如何重建导出以避免双重记录?

2 个答案:

答案 0 :(得分:4)

你的联接会产生重复的'例如,您通过inventDim结果inventLocationId加入inventTrans结果,可能会有多条记录,因此您InventDim重复了InventDimId每个记录一次 重新评估您的查询以解决您的问题;您可能想要更改的一件事是通过infolog链接到1.3.6.RELEASE

您的问题与CSV导出代码无关,因为您可以轻松查看是否将CSV文件操作替换为RestTemplate的输出。

答案 1 :(得分:1)

错误在于您没有将Inventdim表与任何其他表联系起来。所以它会导致交叉连接。因此,请更改您的while语句以包含该语句。我的建议是添加字段列表,因为InventTrans将有很多字段,并且为了获得更好的性能,建议为select语句提供字段列表。 您也可以尝试使用以下声明。

While select inventTransId from inventTransOrg join Qty from inventTrans where inventTrans.InventTransOrg = inventTransOrg.RecId join inventLocationId from inventDim where inventDim.InventDimId == inventTrans.InventDimId && inventDim.InventLocationId == inventLocationId