0

Zuordnung Mehrfachauswahl zu Datensätzen anderer Tabelle

Hi,

ich habe leider keine Ahnung vom Programmieren und hatte gehofft, ChatGPT könnte mir helfen. Aber ich drehe mich im Kreis.

Ich habe eine Tabelle "Projekte". In dieser gibt es das Mehrfachauswahlfeld "Besitzer". Nun soll jeder Besitzer, der dort ausgewählt ist, eine Email bekommen. Die Emailadresse wird aus einer weiteren Tabelle Namens "Mitarbeiter:Innen" abgerufen, indem der Wert aus "Besitzer" mit dem Wert in "Vorname" verglichen wird.

Prinzipiell funktioniert das, wie ich mit diesem Skript erfolgreich geprüft habe:
 

let besitzerWerte := chosen(Besitzer);
if count(besitzerWerte) = 0 then
    alert("Das Feld 'Besitzer' ist leer.")
else
    let besitzerNamen := "";
    for v in besitzerWerte do
        let mitarbeiter := first(select 'Mitarbeiter:Innen' where Vorname = v);
        if mitarbeiter then
            besitzerNamen := besitzerNamen + v + " - Gefundener Mitarbeiter: " + mitarbeiter.Vorname + " " +
                mitarbeiter.Nachname +
                ", E-Mail: " +
                mitarbeiter.Email
        else
            besitzerNamen := besitzerNamen + v + " - wurde nicht gefunden."
        end
    end;
    alert("Besitzer und deren Zuordnung:" + besitzerNamen)
end

Wenn ich allerdings versuche, das in den Emailversand zu integrieren, funktioniert das nicht. In diesem Skript gibt es auch diverse alerts, allerdings wird mir immer nur der letzte angezeigt, der da lautet:
"Es wurde keine gültige E-Mail-Adresse gefunden"

Ich vermute, dass da auch vorher schon alerts angezeigt werden, die dann aber vom jeweils nächsten abgelöst und somit nur sehr kurz angezeigt werden. Ich vermute, irgendwas haut mit der Zuordnung von Besitzer<-->Vorname nicht hin oder die Emailadresse wird nicht korrekt extrahiert (es handelt sich um ein emailfeld namens "Email").

Hier der Code (aktuell zu Testzwecken als Button, soll später ein trigger werden):

let empfaenger := [];
let besitzerWerte := chosen(Besitzer);
if count(besitzerWerte) = 0 then
    alert("Das Feld 'Besitzer' ist leer.")
else
    alert("Besitzer Werte: " + concat(besitzerWerte, ", "));
    for v in besitzerWerte do
        let mitarbeiter := first(select 'Mitarbeiter:Innen' where Vorname = v);
        if mitarbeiter then
            alert("Mitarbeiter gefunden: " + mitarbeiter.Vorname + " " + mitarbeiter.Nachname);
            let email := mitarbeiter.Email;
            if email then
                empfaenger := empfaenger + email;
                alert("E-Mail-Adresse gefunden: " + email)
            else
                alert("Gesuchter Vorname: " + v + " hat keine E-Mail.")
            end
        else
            alert("Gesuchter Vorname: " + v + " wurde nicht gefunden.")
        end
    end;
    let empfaengerList := concat(empfaenger, ",");
    alert("Empfänger Liste: " + empfaengerList);
    let betreff := "Neues Projekt: " + Projektname;
    let text := "Hallo, Ein neues Projekt wurde erstellt. Projektname: " + Projektname +
        " Beschreibung: " +
        Projektbeschreibung +
        " Viele Grüße";
    if length(empfaengerList) > 0 then
        sendEmail({
            from: "event@fotoautomaten.berlin",
            to: empfaengerList,
            subject: betreff,
            text: text,
            html: ""
        })
    else
        alert("Es wurde keine gültige E-Mail-Adresse gefunden.")
    end
end

Über Unterstützung wäre ich sehr dankbar!

11 Antworten

null
    • mirko3
    • vor 2 Monaten
    • Gemeldet - anzeigen

    Hi, Sebastian. Wie sieht denn ein einzelner Wert im Mehrfachauswahlfeld aus? Vorname-Leerzeichen-Nachname?

    Ist es ein einfaches multi oder ein dmulti?

      • Böhm & Herold GbR Fotoautomat Berlin
      • Sebastian_Bohm
      • vor 2 Monaten
      • Gemeldet - anzeigen

      Hi  

      da steht nur ein Name. Also z.B. "Sebastian" Und das ist dann identisch mit dem Feld "Vorname" in der anderen Tabelle. Wie erkenne ich den Unterschied zwischen multi und dmulti?

      • Rafael_Sanchis
      • vor 2 Monaten
      • Gemeldet - anzeigen

       

      Hi Mirko, Can used the Multiple dynamic field ? 

      • mirko3
      • vor 2 Monaten
      • Gemeldet - anzeigen

       True. New dmulti referres the prenames of the table 'Mitarbeiter:Innen'.
      Instead of line 6 two new lines:

      let me := this;
      let allNames := (select 'Mitarbeiter:Innen' where contains(numbers(me.dmulti), number(Nr))).Vorname
      
      • Rafael_Sanchis
      • vor 2 Monaten
      • Gemeldet - anzeigen

       

      Appreciate Mirko. Thanks

      • Rafael_Sanchis
      • vor 2 Monaten
      • Gemeldet - anzeigen

       

      Hi Mirko work perfect now with Multiple choice (dynamic).

      Is there any way to improve the output of the EMail, maybe html ? 

      • mirko3
      • vor 2 Monaten
      • Gemeldet - anzeigen

       Put some html-code in line 5 in sendMail() like

      html: html("<b>Rafael</b><br>Mirko")
      • Rafael_Sanchis
      • vor 2 Monaten
      • Gemeldet - anzeigen

       

      Thank Mirko

      One More question. I try to insert a img inside the banner (Line 10)  but don't work, the same line in html formula work. But here not. There are another way.

      if cnt(listadestinatarios) > 0 then
          sendEmail({
              from: "rafael.sanchis@gmail.com",
              to: listadestinatarios,
              subject: ref,
              text: "",
              attachments: files(this),
              html: "<html><head><title>Nuevo Proyecto</title></head>" + "<body>" +
              "<div style='background-color: #7B68EE; color: #000000; padding: 10px; text-align: center; border: 1px solid ##7B68EE; height: 100%; margin-bottom: 20px;'>" +
              "<img src='/storage/emulated/0/Download/RS-V1.png' height='30' align='left'>" +
              "<strong style='font-size: 20px;'>¡Atención!</strong> <span style='font-size: 20px;'>Nueva Informacion de Proyecto.</span>" +
              "</div>" +
              "<h2>Se ha creado un nuevo Proyecto</h2>" +
              "<p><strong>Nombre del Proyecto:</strong> " +
              Nombre_Proyecto +
              "</p>" +
              "<p><strong>Descripción:</strong> " +
              Descripcion_Proyecto +
              "</p>" +
              "<p><strong>Cliente:</strong> " +
              Cliente +
              "</p>" +
              "<p><strong>Horas Estimadas:</strong> " +
              'Horas Estimadas' +
              "</p>" +
              "<p><strong>Fecha de Inicio:</strong> " +
              format('Fecha Inicio', "DD/MM/YYYY") +
              "</p>" +
              "<p>Saludos,</p>" +
              "<p>El Gerente de Proyecto</p>" +
              "</body></html>
      
    • mirko3
    • vor 2 Monaten
    • Gemeldet - anzeigen

    Es ist ein normales Mehrfachauswahlfeld. Versuche mal diese Codeversion. Ich habe alle alerts bis auf die Erfolgskontrolle herausgenommen, um das Script übersichtlicher zu gestalten. Du kannst diese ja selbst noch nachtragen. Mirko

    let betreff := "Neues Projekt: " + Projektname;
    let text := "Hallo, Ein neues Projekt wurde erstellt. Projektname: " + Projektname +
        " Beschreibung: " +
        Projektbeschreibung +
        " Viele Grüße";
    let allNames := chosen(Besitzer);
    let empfaengerList := (select 'Mitarbeiter:Innen' where contains(allNames, Vorname)).text(Email);
    if cnt(empfaengerList) > 0 then
        sendEmail({
            from: "event@fotoautomaten.berlin",
            to: empfaengerList,
            subject: betreff,
            text: text,
            html: ""
        });
        alert("an diese Mitarbeiter:Innen wurde eine email verschickt: " +
        "
    " +
        join(empfaengerList, "
    "))
    end
    
      • Böhm & Herold GbR Fotoautomat Berlin
      • Sebastian_Bohm
      • vor 2 Monaten
      • Gemeldet - anzeigen

       Dankeschön, war die letzten Tage unterwegs. Ich schau's mir an und melde mich zurück

      • Böhm & Herold GbR Fotoautomat Berlin
      • Sebastian_Bohm
      • vor 2 Monaten
      • Gemeldet - anzeigen

       Das hat funktioniert, tausend Dank Dir!