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 9 Monaten
    • Gemeldet - anzeigen

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

    • Michi.1
    • vor 9 Monaten
    • 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 9 Monaten
    • 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 9 Monaten
      • 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 9 Monaten
    • Gemeldet - anzeigen

    sieht bei mir so aus:

      • Michi.1
      • vor 9 Monaten
      • 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 9 Monaten
      • 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 9 Monaten
    • Gemeldet - anzeigen

    So.

      • Michi.1
      • vor 9 Monaten
      • 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 9 Monaten
      • 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 9 Monaten
      • Gemeldet - anzeigen

      • Michi.1
      • vor 9 Monaten
      • 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 9 Monaten
    • Gemeldet - anzeigen