0

Kann mir einer sagen wo hier der Fehler liegt ?

<script>
function updateNinoxDate(unit, value) {
    console.log('updateNinoxDate called with unit:', unit, 'value:', value);
    const apiUrl = 'https://api.ninox.com/v1/teams/XXXXXXX/databases/XXXXXX/modules/A/records';
    const newData = {
        dateField: calculateNewDate(unit, value)
    };

console.log('Data to be sent:', newData); // Debugging-Log

    fetch(apiUrl, {
        method: 'PATCH',
        headers: {
            'Content-Type': 'application/json',
            'Authorization': 'XXXXXXXXXXXXXXXXXXX'
        },
        body: JSON.stringify(newData)
    })
    .then(response => {
        if (!response.ok) {
            throw new Error('Network response was not ok');
        }
        return response.json();
    })
    .then(data => {
        console.log('Success:', data);

})
    .catch((error) => {
        console.error('Error:', error);
    });
}

function calculateNewDate(unit, value) {
    const currentDate = new Date();
    switch (unit) {
        case 'day':
            currentDate.setDate(currentDate.getDate() + value);
            break;
        case 'month':
            currentDate.setMonth(currentDate.getMonth() + value);
            break;
        case 'week':
            currentDate.setDate(currentDate.getDate() + (value * 7));
            break;
        case 'today':
            currentDate.setDate(new Date().getDate());
            break;
    }
    return currentDate.toISOString(); // Rückgabe im ISO-Format
}
</script>
";
html(css + content + script)

8 Antworten

null
    • Gotje_Ing
    • vor 2 Tagen
    • Gemeldet - anzeigen

    Ninox API hat keinen Endpoint mit Method "PATCH". Du suchst entweder PUT oder POST.

    Bitte schreib noch etwas genauer, welcher console.log funktioniert bzw. bis wohin das Script korrekt ausführt und wo der Fehler auftritt.

      • fcasoria
      • vor 2 Tagen
      • Gemeldet - anzeigen

        Danke für deine Antwort. Ich gebe es auf....ich raffe es nicht.Ich wollte nichts anderes als in CSS erstellte Buttons dazu bringen z.b das Datum zu erhöhen um 1 Tag-bzw 1 Woche und ein Monat.Aber anscheinend ist das zu kompliziert.Klar geht das mit Ninox Buttons,aber ich möchte es aus einer CSS-HTLM-Java Formel machen.

      • Gotje_Ing
      • vor 2 Tagen
      • Gemeldet - anzeigen

       Dazu gibt es eine viel einfachere Möglichkeit, die nicht wirklich gut dokumentierte Funktion database.update() innerhalb Ninox, aber nur im Javascript teil. 
      Beispiel:
      <button onclick=`database.update('X3','A4',1734612301)`>Click Me</button>
      Erklärung:
      Erste Position: 'X3' im Beispiel, ist die recordId, erhalten mit raw(this)
      Zweite Position: 'A4' im Beispiel, ist die fieldId, erhalten mit fieldId(this, "Datumsfeldname")
      Dritte Position: 1734612301 im Beispiel, ist der zu übertragende Wert.

      Damit kannst du dir den kompletten API Call sparen. 
      Zusammen mit einer Funktion:
      <script>
        function MyUpdateFunction(unit,value) {
          database.update('X3','A4',calculateNewDate()) 
          bitte exakt auf deine Logik umbauen, das hab ich hier nicht gemacht.
        }
      </script>
      <button onclick=`MyUpdateFunction('days',123)`>Click Me</button>

      • fcasoria
      • vor 2 Tagen
      • Gemeldet - anzeigen

      Vielen dank für die Info.Aber ich glaube es ist besser ersichtlich was ich vor habe.Kannst du gerne ein Blick rein werfen.Es geht um diese Buttons die dann das Datum steuern sollen.

    • Gotje_Ing
    • vor 21 Stunden
    • Gemeldet - anzeigen

    So könnte ein simpler JS button aussehen, der das Datum eines Feldes um einen Tag nach oben inkrementiert:
     

    html("<script>
    function myfunction(inputDate) {
    var mydate = new Date(inputDate)
    mydate.setDate(mydate.getDate() + 1);
    database.update('" +
    raw(this) +
    "','" +
    fieldId(this, "Datum") +
    "',mydate)
    }
    
    </script><button onclick='myfunction(" +
    raw(Datum) +
    ")'>Click Me</button>")
    
      • fcasoria
      • vor 19 Stunden
      • Gemeldet - anzeigen

        holy shit.......Klasse.Unglaublich ...bin begeistert. Vielen Dank

    • fcasoria
    • vor 18 Stunden
    • Gemeldet - anzeigen

    let css := "
    <style>
    .myButton {
        background-color: #8A2BE2;
        border: none;
        color: white;
        padding: 15px 32px;
        text-align: center;
        text-decoration: none;
        display: inline-block;
        font-size: 16px;
        margin: 4px 2px;
        cursor: pointer;
        border-radius: 12px;
        transition: background-color 0.3s, box-shadow 0.3s;
    }

    .myButton:hover {
        background-color: #6A1B9A;
        box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
    }
    </style>
    ";
    let js := "
    <script>
    function adjustDate(days) {
        var mydate = new Date('" +
        format(Datum, "YYYY-MM-DD") +
        "');
        mydate.setDate(mydate.getDate() + days);
        database.update('" +
        raw(this) +
        "', '" +
        fieldId(this, "Datum") +
        "', mydate);
    }

    function adjustWeek(weeks) {
        var mydate = new Date('" +
        format(Datum, "YYYY-MM-DD") +
        "');
        mydate.setDate(mydate.getDate() + (weeks * 7));
        database.update('" +
        raw(this) +
        "', '" +
        fieldId(this, "Datum") +
        "', mydate);
    }

    function adjustMonth(months) {
        var mydate = new Date('" +
        format(Datum, "YYYY-MM-DD") +
        "');
        mydate.setMonth(mydate.getMonth() + months);
        database.update('" +
        raw(this) +
        "', '" +
        fieldId(this, "Datum") +
        "', mydate);
    }

    function setToday() {
        var mydate = new Date();
        database.update('" +
        raw(this) +
        "', '" +
        fieldId(this, "Datum") +
        "', mydate);
    }
    </script>
    ";
    let buttons := "
    <div style='text-align: center; margin-bottom: 20px;'>
        <button class='myButton' onclick='adjustDate(-1)'>- Tag</button>
        <button class='myButton' onclick='adjustDate(1)'>+ Tag</button>
        <button class='myButton' onclick='adjustWeek(-1)'>- Woche</button>
        <button class='myButton' onclick='adjustWeek(1)'>+ Woche</button>
        <button class='myButton' onclick='adjustMonth(-1)'>- Monat</button>
        <button class='myButton' onclick='adjustMonth(1)'>+ Monat</button>
        <button class='myButton' onclick='setToday()'>Datum aktuell</button>
    </div>
    ";
    html(css + js + buttons)

    • fcasoria
    • vor 18 Stunden
    • Gemeldet - anzeigen

    So sieht es jetzt aus......Für Tag- Woche-Monat- und aktueller Tag.  Vielen Dank.