2016-07-25 13 views
1

Ich habe ein Verfahren geschaffen, in dem ich Daten in eine CSV-Datei zu exportieren, habe ich den folgenden Code erstellt:Doppel Datensätze, wenn Daten in CSV-Export

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); 
} 
} 

Dies schafft eine CSV mit 3 Spalten-Datei, aber eine Menge von doppelte Datensätze (fast 100) die tatsächlichen Daten enthalten nicht 100 Doppel-Datensätze. Irgendwelche Vorschläge, wie ich den Export wiederherstellen kann, um die doppelten Datensätze zu vermeiden?

+0

Was möchten Sie exportieren? Die while-Auswahl sieht so aus, als ob Sie an physischen Reservierungen eines bestimmten Lagerorts interessiert sind, ist das korrekt? Können Sie uns auch die Version von Dynamics AX nennen? Und fügen Sie bitte die Variablendefinition ein, um es zu einem [mcve] zu machen. Die erste While-Schleife sieht ebenfalls verdächtig aus, würde das nicht zu einer Endlosschleife führen? Einige zusätzliche Einrückungen würden den Code auch leichter lesbar machen. –

Antwort

1

Der Fehler besteht darin, dass Sie Inventdim-Tabelle nicht mit anderen Tabellen verknüpfen. Es wird also zu einem Cross-Join kommen. Ändern Sie also Ihre while-Anweisung, um das zu berücksichtigen. Mein Vorschlag wird sein, die Feldliste auch hinzuzufügen, da InventTrans viele Felder haben wird, und um eine bessere Leistung zu haben, wird empfohlen, eine Feldliste für ausgewählte Anweisungen zu haben. Sie können versuchen, auch unter Anweisung zu verwenden.

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

4

Ihre Joins produzieren "Duplikate" wie z. Ihre Verbindung mit inventDim über inventLocationId Ergebnisse wahrscheinlich in mehr als einem Datensatz, so dass Ihre inventTrans ist einmal für jeden dieser Datensätze "wiederholt".
Bewerten Sie Ihre Abfrage neu, um Ihr Problem zu lösen. Eine Sache, die Sie wahrscheinlich ändern möchten, ist die Verknüpfung zu InventDim über InventDimId.

Ihr Problem hat nichts mit dem CSV-Exportcode zu tun, wie Sie leicht sehen können, wenn Sie die CSV-Dateiaktionen durch eine Ausgabe an die infolog ersetzen.