Hola,
Al modificar el valor de una columna de un datalist se está cambiando también la misma columna de otro datalist.
Estoy usando recursividad para ir recorriendo un datalist que tiene una estructura padre/hijo
¿Porqué addColumn modifica la columna en los dos datalist?
DataList dataIndirectPercentage = launchQuery("PosGetIndirectPercentageSignificantShareholdings");
DataList dataAuxResultIndirectPercentage = getIndirectPercentage (nif, dataIndirectPercentage);
if (dataAuxResultIndirectPercentage != null &&
dataAuxResultIndirectPercentage.getRows().size() > 0) {
dataAuxResultIndirectPercentage.addColumn("Nif", nif);
dataAuxResultIndirectPercentage.addColumn("Owner", owner);
listDataList.add(dataAuxResultIndirectPercentage);
}
Cuando se ejecuta el addColumn, se modifica la columna en dataAuxResultIndirectPercentage pero también en dataIndirectPercentage.
Las columnas Nif y Owner ya existen en dataAuxResultIndirectPercentage y lo que quiero es darle el mismo valor a toda la columna.
Después de ejecutar getIndirectPercentage, dataAuxResultIndirectPercentage tiene 3 elementos y dataIndirectPercentage tiene 8 elementos (dataIndirectPercentage no se modifica en getIndirectPercentage)
Estas son las dos funciones con todo el proceso:
private DataList calculateSignificantShareholdings (DataList dataGetDirectPercentage) throws AWException {
DataList result;
List<DataList> listDataList = new ArrayList<>();
listDataList.add(dataGetDirectPercentage);
if (dataGetDirectPercentage.getRows().size() > 0) {
DataList dataIndirectPercentage = launchQuery("PosGetIndirectPercentageSignificantShareholdings");
if (dataIndirectPercentage.getRows().size() > 0) {
for (HashMap<String, CellData> rowDirect : dataGetDirectPercentage.getRows()) {
String nif = rowDirect.get("Nif").getStringValue();
String owner = rowDirect.get("Owner").getStringValue();
DataList dataAuxResultIndirectPercentage = getIndirectPercentage (nif, dataIndirectPercentage);
if (dataAuxResultIndirectPercentage != null &&
dataAuxResultIndirectPercentage.getRows().size() > 0) {
dataAuxResultIndirectPercentage.addColumn("Nif", nif);
dataAuxResultIndirectPercentage.addColumn("Owner", owner);
listDataList.add(dataAuxResultIndirectPercentage);
}
}
}
}
result = DataList.mergeDataLists(listDataList, 0, 0);
return result;
}
private DataList getIndirectPercentage (String nif, DataList dataIndirectPercentage) throws AWException {
DataList result = null;
List<DataList> listDataList = new ArrayList<>();
DataList dataAuxIndirectPercentage = dataIndirectPercentage.copyDataList();
dataAuxIndirectPercentage.filter("Nif", nif);
dataAuxIndirectPercentage.setRecords(dataAuxIndirectPercentage.getRows().size());
if (dataAuxIndirectPercentage.getRows().size() > 0) {
listDataList.add(dataAuxIndirectPercentage);
for (HashMap<String, CellData> rowIndirect : dataAuxIndirectPercentage.getRows()) {
String nifIndirect = rowIndirect.get("NifIndirect").getStringValue();
DataList dataRecIndirectPercentage = getIndirectPercentage (nifIndirect, dataIndirectPercentage);
if (dataRecIndirectPercentage != null &&
dataRecIndirectPercentage.getRows().size() > 0) {
listDataList.add(dataRecIndirectPercentage);
}
}
result = DataList.mergeDataLists(listDataList, 0, 0);
}
return result;
}
Saludos, Jesús