0

Dialog für neuen Datensatz verwenden (html/java)

Grüße,

ich würde gerne von einem Dashboard aus (jeder Benutzer hat hier seinen eigenen record) mit einem Dialog neue Aufträge erstellen. Dies soll zur Folge haben, dass Fehleingaben vermieden werden. Es ist immer zwingend erforderlich, zuerst den Vertragspartner, die Kd-Nr. und dann den Namen einzugeben. Hat den Hintergrund, dass bei jedem Vertragspartner immer nur eine Kd-Nr. zu einem Kunden von ihm existiert. Sie dürfen nie doppelt sein.

So weit wie in der Test DB bin ich bis jetzt gekommen. Wo ich nicht weiter weis, betrifft folgende Punkte:

  • select zeigt mit immer einen Wert an(den ersten aus dem Array. Dieser soll aber  "bitte Vertragspartner wählen"  als Platzhalter beim Start anzeigen.
  • Der Rückgabe wert von select soll die record-Nr sein, für ein einfacheres weiter verwenden, hier bekomme ich nur den Namen.

Wäre toll, wenn ihr helfen könntet.

13 Antworten

null
    • Michi.1
    • vor 1 JahrTue, March 19, 2024 at 2:45 PM UTC
    • Gemeldet - anzeigen

    Ach so Vertragspartner wählen ist ein Pflichtfeld, dies müsste auch noch mit rein.

    • Michi.1
    • vor 1 JahrWed, March 20, 2024 at 9:08 AM UTC
    • Gemeldet - anzeigen

    Platzhalter hab ich / Rückgabewert hab ich / Pflichtfeld ist gelöst

    Jetzt wäre es noch schön, wenn man verhindern könnte, dass beim Öffnen von dem Dialog erstmal nach oben gescrollt werden muss. Nur wie?

     <script>
     var Vertragspartner = " +
        'objekte von Vertragspartner' +
        ";
    for (var Vertragspartner of Vertragspartner) list.innerHTML += `<option value= '${Vertragspartner.value}'>${Vertragspartner.name}</option>`;
    </script>
    <html>
         <div>
         <form class='wd'>
             <fieldset class='wd'>
                <legend>Dateneingabe:</legend>
       <label>Vertragspartner wählen</label>
       <select id='list'><option>Bitte wählen</option></select><br>
                <label>KV-Nr</label>
                <input id='kv' type='text' onfocusout='myFunction()' placeholder='KV-Nr eingeben'><br>
                <label>Name</label>
                <input id='nam' type='text' onfocusout='myFunction()' placeholder='Namen eingeben'>
             </fieldset>
          </form>
         </div>
    
    • mirko3
    • vor 1 JahrWed, March 20, 2024 at 12:19 PM UTC
    • Gemeldet - anzeigen

    Hallo Michi. Versuche mal so. Mirko

    ...
    sleep(500);
    let content := "
    <style>
        input,select,label{float:left;}
        legend{color:white}
        select{width:168px}
        div{background-color:midnightblue;color:white}
        aside{margin-top:-1em}
    </style>
    <aside>
             <form>
             <fieldset>
                <legend>Dateneingabe:</legend>
                       <label>Vertragspartner wählen</label>
                           <select id='list' name='neu' ><option>Platzhalter</option></select><br>
                    <label>KV-Nr</label>
                        <input id='kv' type='text' onfocusout='myFunction()' placeholder='KV-Nr eingeben'><br>
                    <label>Name</label>
                        <input id='nam' type='text' onfocusout='myFunction()' placeholder='Namen eingeben'>
             </fieldset>
              </form>
    </aside>
    <script>
     var Vertragspartner = " +
        'objekte von Vertragspartner' +
        ";
    for (var Vertragspartner of Vertragspartner) list.innerHTML += `<option value='${Vertragspartner.name}'>${Vertragspartner.name}</option>`;
    function myFunction() {
    let result1 = document.querySelector('#kv').value;
    let idNX1 = '" +
        raw(Nr) +
        "';
    if (result1) {
     database.update(idNX1, 'A' , result1)
    }
    let result2 = document.querySelector('#nam').value;
    let idNX2 = '" +
        raw(Nr) +
        "';
    if (result2) {
     database.update(idNX2, 'B' , result2)
    }
    var e = document.querySelector('#list');
    var value = e.value;
    let idNX3 = '" +
        raw(Nr) +
        "';
    database.update(idNX3, 'L' , value)
    }
    </script>
    ";
    dialog("Neuen Auftrag hinzufügen", html(content), ["OK", "ABBRECHEN"])
    
      • Michi.1
      • vor 1 JahrWed, March 20, 2024 at 1:18 PM UTC
      • Gemeldet - anzeigen

      Danke dir,

      scrollen muss ich nicht mehr. Das passt. 👍 Leider ist der Hintergrund wieder sichtbar, fand das cool, wenn Focus nur auf dem Dialog war. Der div will so nicht.

      Gibt es eine Möglichkeit die Input-Felder erst einzublenden oder schreibbar zu machen, wenn beim select was anderes als der Platzhalter gewählt wurde?

    • mirko3
    • vor 1 JahrWed, March 20, 2024 at 1:57 PM UTC
    • Gemeldet - anzeigen

    sieht bei mir so aus:

      • Michi.1
      • vor 1 JahrWed, March 20, 2024 at 2:18 PM UTC
      • Gemeldet - anzeigen

      hab deine DB installiert und es sieht schicki aus. Hab meinen Button mol gelöscht und neu gemacht. Siehe da es klappt.

      • Michi.1
      • vor 1 JahrWed, March 20, 2024 at 2:28 PM UTC
      • Gemeldet - anzeigen

      ich kann ja mit "readonly=readonly" die input Felder nicht schreibbar machen. Doch wie stelle ich das in Abhängigkeit vom select an? Also das sie nur schreibbar sind, wenn ein Vertragspartner ausgewählt wurde.

    • mirko3
    • vor 1 JahrWed, March 20, 2024 at 9:11 PM UTC
    • Gemeldet - anzeigen

    So.

      • Michi.1
      • vor 1 JahrWed, March 20, 2024 at 9:59 PM UTC
      • Gemeldet - anzeigen

       schau ich mir morgen gleich an 👍👍. So macht ein Dialog gleich viel mehr Spaß. Geil wäre wenn man zum Beispiel die js variante zum Datei Download (mit original Dateinamen) in einen Button bekommen könnte. Aber das ist bestimmt Wunschdenken.

      • Michi.1
      • vor 1 JahrThu, March 21, 2024 at 11:20 AM UTC
      • Gemeldet - anzeigen

      beim Dialog werden ja die daten statisch geladen (müssen also schon vorhanden sein). Ist es möglich über database.update Feld werte von Ninox bei der Eingabe im Dialog zu holen? Würde gerne noch die Zeile 24 / value füllen.

      let content := "
      <style>
          input, select, label{float:left;}
      .lifeanzeige {
          color: red;
          font-size: 14px;
          width: 430px;
          height: 35px;
          padding-left: 5px;
          outline:none;
      
      }
      .lifeanzeige input:focus{
          color:red;
          font-weight: bold;
          border: 2px solid red;
      }
          legend{color:white}
          select{width:168px}
          div{background-color:midnightblue;color:white}
          aside{margin-top:-1em}
      </style>
      <aside>
      <input class='lifeanzeige' readonly=true id='augabe' name='aus' type='text' value= 'database.update( feld id A)'>
      
      
               <form>
               <fieldset>
                  <legend>Dateneingabe:</legend>
                     <label>Vertragspartner wählen</label>
                         <select id='list'><option>bitte Namen auswählen</option></select><br>
                  <label style='display: none' id='mylabel'> KV-Nr </label>
                      <input readonly id='kv' name='kv' type='text' onfocusout='myFunction()' style='display: none' placeholder='KV-Nr eingeben'><br>
                  <label style='display: none' id='mylabel1'>Name</label>
                      <input readonly id='nam' type='text' onfocusout='myFunction()'  style='display: none' placeholder='Namen eingeben'>
               </fieldset>
                </form>
      </aside>
      <script>
      document.querySelector('#list').onchange = function () {
             let msg = document.querySelector('#list').selectedIndex;
      var meldung = document.querySelector('#kv');
      var meldung1 = document.querySelector('#nam');
      var meldung2 = document.getElementById('mylabel');
      var meldung3 = document.getElementById('mylabel1')
      if (msg > 0){
      
                   meldung.readOnly = false;
                  meldung.style.display = 'block';
                  meldung1.readOnly = false;
                  meldung1.style.display = 'block';
                  meldung2.style.display = 'block';
                  meldung3.style.display = 'block';
              } else {
      
                   meldung.readOnly = true;
                  meldung.style.display = 'none';
                  meldung1.readOnly = true;
                  meldung1.style.display = 'none';
                  meldung2.style.display = 'none';
                  meldung3.style.display = 'none';
              }
      var e = document.querySelector('#list');
      var value = e.value;
      let idNX3 = '" +
          raw(Nr) +
          "';
      database.update(idNX3, 'L' , value)
      }
       var Vertragspartner = " +
          'objekte von Vertragspartner' +
          ";
      for (var Vertragspartner of Vertragspartner) list.innerHTML += `<option value='${Vertragspartner.value}'>${Vertragspartner.name}</option>`;
      function myFunction() {
      let result1 = document.querySelector('#kv').value;
      let idNX1 = '" +
          raw(Nr) +
          "';
      if (result1) {
       database.update(idNX1, 'A' , result1)
      }
      let result2 = document.querySelector('#nam').value;
      let idNX2 = '" +
          raw(Nr) +
          "';
      if (result2) {
       database.update(idNX2, 'B' , result2)
      }
      }
      </script>
      ";
      dialog("Neuen Auftrag hinzufügen", html(content), ["OK", "ABBRECHEN"])
      
      • Michi.1
      • vor 1 JahrThu, March 21, 2024 at 11:21 AM UTC
      • Gemeldet - anzeigen

      • Michi.1
      • vor 1 JahrFri, March 22, 2024 at 12:33 PM UTC
      • Gemeldet - anzeigen

      bekomm einfach beim 2. Dialog die Zuordnungen nicht hin. If then will gar nicht / switch true do will mir kein alert ausgeben, wenn das Bezugsfeld null ist.

      if dialog("Eingabe überprüfen", html(content1), ["Auftrag erstellen", "ABBRECHEN"]) = "Auftrag erstellen" then
              let zuordnung := number('ID von Auswahl');
              switch true do
              case zuordnung = 0:
                  (
                      let numvert := number('Nr von Record Vertragspartner (Auswahl von select) hat ID L');
                      let namKunde := 'Name hat ID B';
                      let kvneu := 'KV hat ID A';
                      let myR := (create 'Aufträge');
                      myR.(
                          Vertragspartner := numvert;
                          'KV-Nr.' := kvneu;
                          Name := namKunde
                      );
                      popupRecord(myR)
                  )
              case zuordnung > 0:
                  (
                      let numvert := number('Nr von Record Vertragspartner (Auswahl von select) hat ID L');
                      let offen := first(select 'Aufträge' where number(Nr) = numvert);
                      popupRecord(offen)
                  )
              case zuordnung < 1:
                  alert("eingaben unvollständig")
              default:
                  alert("fehler im script")
              end
          end
      end
      
    • Michi.1
    • vor 1 JahrFri, March 22, 2024 at 12:34 PM UTC
    • Gemeldet - anzeigen

Content aside

  • Status Answered
  • vor 1 JahrFri, March 22, 2024 at 12:34 PM UTCZuletzt aktiv
  • 13Antworten
  • 205Ansichten
  • 2 Folge bereits