0

Datumsabhängige Fixierung eines Feldes

Hallo, mit dem Code

let thisyear := Kursjahrgang.Jahrgang;
let Datum := date(thisyear, DeputatdeadlineMonth(), DeputatdeadlineDay());
if today() < Datum then
let KursTN := 'Kursname FD';
cnt(select 'Refs/Fachdidaktik' where 'Kurse FD'.'Kursname FD' = KursTN)
end

werden in einem Berechnungsfeld abhängig vom aktuellen Datum die Anzahl der Teilnehmer eines Kurses ausgegeben.

Ist der durch Datum definierte Kalendertag verstrichen (also das echte Datum größer gleich Variable Datum), dann soll der Eintrag in dem Berechnungsfeld erhalten bleiben. Im Moment wird das Berechnungsfeld, wenn die Bedingung nicht erfüllt ist leer dargestellt. Wie kann ich einen Eintrag "fixieren".

"Schreibbar wenn" geht ja nicht in einem Berechnungsfeld. Und das Feld mit der TN-Anzahl nicht als Berechnungsfeld sondern als ZAhlenfeld einzurichten und über ein anderes Feld zu steuern, scheiterte daran, dass ich aus einem Berechnungsfeld heraus keinen Eintrag in ein anderes Feld (dieses Zahlenfeld) vornehmen kann.

Hintergrund: Die Teilnehmeranzahl eines Kurses zu einem bestimmten Zeitpunkt entscheidet darüber, welche Vergütung jemand enthält. Deshalb würde ich gerne in ein Feld die TN-Anzahl zu diesem Zeitpunkt (Datum) schreiben und dort fixieren. Für mich passt es, mit < oder <= zu arbeiten.

Danke für Hilfe. Maurice

5 Antworten

null
    • UweG
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Maurice
    Dann musst du noch ein else einfügen wenn die Bedingung nicht erfüllt ist und reinschreiben was dann angezeigt werden soll im Berechnungsfeld.

    • UweG
    • vor 3 Jahren
    • Gemeldet - anzeigen

    let vAnzeige := "";
    let thisyear := Kursjahrgang.Jahrgang;
    let Datum := date(thisyear, DeputatdeadlineMonth(), DeputatdeadlineDay());
    if today() < Datum then
    let KursTN := 'Kursname FD';
    vAnzeige := text(cnt(select 'Refs/Fachdidaktik' where 'Kurse FD'.'Kursname FD' = KursTN))
    else
    vAnzeige := text('Wert bei Nichterfüllung der Bedingung')
    end;
    vAnzeige

    • Maurice
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Uwe, ich sehe noch nicht, wie dadurch der Eintrag im Feld fixiert wird. NAch Ablauf des Tages von DAtum soll nichts mehr verändert werden.

     
    • UweG
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Halo Maurice.
    Ich kenne deinen Datenaufbau nicht, wie sich Kurse und Teilnehmer zusammensetzen. Wenn du Ninox in der Cloud betreibst (ABO-Modell) gibt es eine Möglichkeit auch Berechnungsfelder zu veranlassen aufgrund der Berechnung Daten zu schreiben ohne das es aktiv angeklickt werden muss. Dazu ist dieNutzung der REST-API von Ninox notwendig. 
    Ich würde es dann wie folgt machen:
    Erstelle ein Feld für die Teilnehmerzahl und ein verstecktes Ja/Nein-Feld. Das Ja/Nein-Feld hat die Grundeinstellung 'Nein' bei neuanlage.
    Im Funktionsfeld würde ich folgendes Script schreiben:

    let teamID := teamId();
    let databaseID := databaseId();
    let tableID := tableId(this);
    let RecordID := Nr;
    let vUrl := "https://api.ninoxdb.de/v1/teams/" + teamID + "/databases/" + databaseID + "/tables/" + tableID + "/records";
    let vAuthorization := {
    Authorization: "Bearer API-Key",
    'Content-Type': "application/json"
    };
    if 'Ja/Nein-Feld' = false then
        let thisyear := Kursjahrgang.Jahrgang;
        let Datum := date(thisyear, DeputatdeadlineMonth(), DeputatdeadlineDay());
        if today() < Datum then
            let KursTN := 'Kursname FD';
            let vBody := {
                                id: number(RecordID),
                                fields: {
                                            'Ja/Nein-Feld': true,
                                            'Feld Teinehmerzahl' := cnt(select 'Refs/Fachdidaktik' where 'Kurse FD'.'Kursname FD' = KursTN)
                                          }
                               };
            http("POST", vUrl, vAuthorization, vBody)
        end;
    end

    Damit schreibst du die Teilnehmerzahl aus dem Berechnungsfeld heraus als permanenten Wert in das Feld Teilnehmerzahl, gleichzeitig wird das Ja/Nein-Feld auf true gesetzt, damit die API-Änderung nicht erneut in dem Record ausgelöst wird.
    Kann sein, dass da ein end zuviel oder zuwenig ist.

    • Maurice
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Uwe,

    herzlichen Dank. Ich habe die DB nicht in der Cloud, bisher als Mac Programm. Derzeit bastle ich hier an einem Prototyp, um dann ggf. meinem Dienstherren die Ninox-Cloud bzw. on-premise Lösung zu empfehlen. Ist also eine Art "Machbarkeitsstudie". Deshalb kann deine Lösung noch sehr interessant werden, denn wenn wir Ninox nehmen, dann die Cloud/on-premise Lösung (ich denke on-premise ist vom Funktionsumfang gleich wie Cloud, ist ja nur eine Frage des Serverstandortes).

    Mit der REST-API muss ich mich dann sowieso beschäftigen bzw. ggf. einen Dienstleister hinzunehmen.

    Danke, auch wenn ich das jetzt hier nicht testen kann.