Hallo Hugo,
ich hatte das gleiche Problem, dass die API kein Select mit OrderBy anbietet. Hier mein aktueller Work-a-round. Über Performance brauchen wir nicht reden aber es funktioniert bis zur API-Umstellung erstmal.
Habe als erstes eine Bibliotheksregel „EntityHelper“ erstellt und folgende Methode angelegt. Da nutze ich den Sortieralgorithmus der TreeMap aus – aber Achtung: der zu sortierende Wert wird in einen String umgewandelt. Damit findet eine Textsortierung statt. Du müsstest die entsprechenden Zeilen anpassen und ein Doublefeld draus machen (TreeMap<Double, ArrayList>)!!! Sonst sieht Deine Liste so aus (1,10,11,12,13,…,2,20,…).
public static Collection SortObjectIds(RuleInterface ruleInterface, String entityName, String fieldNameToSort, Collection objectIds)
{
ruleInterface.info("Sort the objects of entity by field "" + fieldNameToSort + """);
// load the value of the field to sort for each object
TreeMap<String, ArrayList> sortedList = new TreeMap<String, ArrayList>();
for (Iterator it = objectIds.iterator(); it.hasNext();)
{
Integer objectId = it.next();
// load value from object
Object value = ruleInterface.getMasterData(entityName, objectId).getField(fieldNameToSort);
String valueString = (value == null) ? "" : value.toString();
// add to sorted list
if (!sortedList.containsKey(valueString))
sortedList.put(valueString, new ArrayList());
sortedList.get(valueString).add(objectId);
}
// iterate over sorted list and generate result list
ArrayList resultList = new ArrayList();
for (Iterator it = sortedList.keySet().iterator(); it.hasNext();)
{
String key = (String)it.next();
resultList.addAll((ArrayList)sortedList.get(key));
}
return resultList;
}
Den Code nutze ich dann wie folgt:
// load row ids
Collection result = server.getGenericObjectIds(, );
// sort
result = EntityHelper.SortObjectIds(server, , , result);
Viel Erfolg und Grüße,
Matthias