Beispiele

Custom Sort in einer Tabelle einbinden

Custom Sort in einer Tabelle einbinden

Du willst deine Einträge mit dem Custom Sort direkt innerhalb der Custom Tabelle sortieren? In diesem Beitrag findest du eine detaillierte Anleitung, welche Ninox-Einstellungen du benötigst und den dazugehörigen Anwendungscode. In folgendem Beispiel wird eine Aufgabenliste (Child / Untertabelle) in einem Auftrag (Parent / Obertabelle) als Custom Table eingeblendet. Mit Custom Sort soll die Aufgaben Reihenfolge manuell bestimmt werden.

Widgets, die dafür benötigst:

Ninox Einstellungen, die du benötigst:

  • ein sortId Funktionsfeld in der Aufgabe (child)

  • Sortierung Zahlenfeld in der Tabelle, in der die Records sortiert werden sollen

  • sortItems Textfeld im Auftrag (parent)

Anwendungscode

let current := this;
arcCustomSort({
        uniqueId: Nr,
        editable: false,
        recordId: current.Nr,
        fieldId: "",
        direction: "horizontal",
        title: Sortierung,
        value: Sortierung,
        valuePrefix: number(Nr) + ",",
        size: "",
        color: "",
        showIconsAlways: true,
        iconStart: "",
        iconEnd: ""
    })

sortId Funktionsfeld in der Aufgabe (Child)

let entities := Auftrag.Aufgaben;
if Sortierung != null then
    let sortValue := format(Sortierung, "000") + "-" +
        (number('Zuletzt geändert') - number(datetime(3000, 1, 1))) +
        "-" +
        number(Nr);
    number(cnt(entities[Sortierung != null and
            format(Sortierung, "000") + "-" +
                    (number('Zuletzt geändert') - number(datetime(3000, 1, 1))) +
                    "-" +
                    number(Nr) <= sortValue]))
else
    let sortValue := max(entities.Sortierung) + 1 + "" + Nr;
    number(cnt(entities[max(entities.Sortierung) + 1 + "" + Nr <= sortValue]))
end

sortItems Text Feld im Auftrag (Parent)

Den folgenden Code setzt du in deinem sortItems Textfeld in die Trigger nach Änderung ein.

let current := this;
if sortItems != null then
    let splitItem := split(sortItems, ",");
    let itemNr := item(splitItem, 0);
    let itemPos := item(splitItem, 1);
    let item := first(Aufgaben[number(Nr) = number(itemNr)]);
    item.(Sortierung := number(itemPos) +
        if itemPos > item.Sortierung then
            1
        else
            0
        end);
    for item in Aufgaben order by Sortierung do
        item.(Sortierung := item.sortId)
    end;
    sortItems := null
end