Home Forum Nuclos Konfiguration Businessprozesse MasterDataVO Collection sortieren

Ansicht von 3 Beiträgen - 1 bis 3 (von insgesamt 3)
  • Autor
    Beiträge
  • #5786
    Markus Glitzner
    Teilnehmer

    Hallo!

    Wie kann ich eine MasterDataVO Collection (nach einem Double Feld) sortieren?

    Meine Java Kentnisse reichen dafür leider nicht aus.

    Gruß
    Hugo

    #5788
    Matthias Haake
    Teilnehmer

    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

    #5789
    Markus Glitzner
    Teilnehmer

    Hallo Matthias!

    Das sieht ja schon mal vielversprechend aus, danke schon mal.

    Das ein einfaches ORDER BY so kompliziert sein kann …

    Gruß
    Hugo

Ansicht von 3 Beiträgen - 1 bis 3 (von insgesamt 3)