InDe 24.5
Mi sono trovato a dover eseguire delle azioni sulle colonne di un pannello in lista.
Il classico ciclo for sui campi di pannello funziona ma segue l’ordine delle colonne a design (per intenderci, l’ordine dei campi del pannello nell’albero dell’IDE).
for (int m = 0; m < Panel.fieldsCount(); m = m + 1)
{
Reacto.DTTLogMessage(Panel.getFieldCaption(m), ...)
}
E` invece possibile che l’ordine delle colonne a runtime sia diverso e che si voglia che le azioni siano applicate in base all’ordine impostato dall’utente.
Non trovando una funzionalità già pronta, ho risolto così:
IDMap idmFields = new()
for (int idxField = 0; idxField < Panel.fieldsCount(); idxField = idxField + 1)
{
idmFields.setValue(Panel.getFieldLeftPosition(idxField, List), idxField)
}
IDArray idaPositions = idmFields.getKeys()
idaPositions.sort()
for (int idxPosition = 0; idxPosition < idaPositions.length(); idxPosition = idxPosition + 1)
{
int position = idaPositions.getValue(idxPosition)
int FieldIndex = idmFields.getValue(position)
Reacto.DTTLogMessage(Panel.getFieldCaption(FieldIndex), ...)
}
In pratica, creo una mappa dei campi del pannello la cui chiave è la posizione left del campo in lista e il cui valore è il suo l’indice.
Ricavo l’array delle chiavi della mappa ed eseguo il suo ordinamento.
A questo punto il ciclo non viene fatto direttamente sui campi di pannello ma sull’array ordinato per posizione.
NB
Le colonne non visibili hanno la stessa posizione della prima colonna visibile (20), che sovrascrivono. Vanno quindi escluse dalla mappa dei campi da trattare.
Una soluzione “artigianale”.
Voi come fareste?