Durchsuchbare Dokumentation aufrufen

Zurück zur Dokumentationsübersicht

JavaScript-Beispiel zum Konfigurieren der Aktionen der E-Mail-Maske

Um einen Einblick in die möglichen Anpassungen zum Konfigurieren der Aktionen der E-Mail-Maske zu erhalten, steht ein JavaScript-Beispiel zur Verfügung. Laden Sie es über folgenden Link herunter: undefined>sample-settings-extended.js

Damit Sie ein besseres Verständnis für die Konfiguration des Beispielskripts erhalten, ist das Beispielskript in einzelne Abschnitte unterteilt. Die Abschnitte enthalten dazugehörige Parameter und veranschaulichen die Funktionsweise anhand von Beispielen.

Für das Registrieren und Verwenden der Aktionen siehe E-Mail-Maske konfigurieren.

sendMenuActions


Diese Funktion definiert, welche Schaltflächen im Senden-Menü zur Auswahl stehen.

In folgendem Beispiel besitzt das Senden-Menü zwei Schaltflächen:

Schaltfläche Funktion
Senden und ablegen bei Antwort Legt die versendete E-Mail bei einer Antwort ab.
Senden an alle (intern) Ohne Funktion

JavaScript

Mithilfe des folgenden Skripts (Ausschnitt) stellen Sie das Senden-Menü mit den zwei Schaltflächen nach:

exports.settings = user => [
  {
    /**
     * Here additional menu items for the send menu can be added.
     * If defined, this menu items are displayed beneath the send split button
     *
     * @param {Array.<object>} items - the already existing menu items
     *
     * @returns {Array.<object>} modified items - the new array with the new menu items
     */
    sendMenuActions: items => {
      // add a new entry to the context menu
      items.push({
        // show the menu item as disabled (true/false)
        disabled: false
        /**
         * The handler, that is called, when the menu item is clicked
         *
         * @param {Object} data - The data of the mail.
         * @param {string} data.from - The sender's address.
         * @param {Array.<string>} data.to - An array of recipient addresses.
         * @param {Array.<string>} [data.cc] - An array of cc recipient addresses.
         * @param {Array.<string>} [data.bcc] - An array of bcc recipient addresses.
         * @param {string} data.subject - The subject of the mail.
         * @param {string} data.body - The body of the mail in HTML.
         * @param {Array.<string>} [data.attachments] - An array of UUIDs for attachments.
         * @param {string} [data.replyTo] - The reply-to email address.
         *
         * @param {Object} mail - the mail object
         * @param {Function} send - callback function with promise for sending: send().then(...)
         *
         * @returns {Object} modifiedData - The modified mail data to change on the UI. (same structure as data)
         */,

        handler: (data, mail, send) => {
          // this example moves a mail to the same folders, like the mail, where this mail is an answer to
          // but only, when the mail is beneath /agorum/roi/Files
          send().then(() => {
            let baseFolder = objects.find('/agorum/roi/Files'); // get the mail, where this mail is a reply to

            let related = (mail.allAttachedTo || []).find(orgMail => {
              // just use mails, that are inside /agorum/roi/Files
              // to ignore sent mails, etc ...
              return orgMail.insideFolder(baseFolder.getId(), true);
            });

            if (!related) return; // found a related mail

            let parents = related.parents();
            if (!(parents && parents[0])) return; // remove from all parents and add it to the parents of the mail, we had answered to

            objects.remove(mail);
            objects.add(mail, parents);
          });
        }, // an icon for the menu entry

        icon: 'aguila-icon file_download', // a unique name for the menu entry

        name: 'agorum-mail-test-send-with-file', // the text of the menu entry

        text: 'Senden und ablegen bei Antwort',
      }); // just an example to show a disabled item

      items.push({
        disabled: true,
        handler: (data, mail, send) => {},
        icon: 'aguila-icon supervisor_account',
        name: 'agorum-mail-tests-send-all',
        text: 'Senden an alle (intern)',
      });
      return items;
    },
  },
];

data

Verschiedene Funktionen geben einen data-Parameter mit oder ihnen kann ein data-Parameter mitgegeben werden.


Aufbau

{
  from: 'Absender-Adresse,
  to: [ 'Array von Empfänger-Adressen' ],
  cc: [ 'Array von CC-Empfänger-Adressen' ],
  bcc: [ 'Array von BCC-Empfänger-Adressen' ],
  subject: 'Betreff',
  body: 'Text der Mail in HTML',
  attachments: [ 'Array von UUIDs der Anhänge' ],
  replyTo: 'E-Mail-Adresse auf die geantwortet werden soll',
}

Parameter

Folgende Parameter existieren im dargestellten JavaScript-Ausschnitt.


sendMenuActions

Definiert, was im Senden-Menü alles erscheinen soll und welche Funktionen ausgeführt werden.

sendMenuActions: items => {


disabled (optional)

Definiert, ob die Schaltfläche anklickbar ist oder nicht.

Wert Beschreibung
true Schaltfläche ist nicht anklickbar.
false (Standard) Schaltfläche ist anklickbar.


handler

Bestimmt, welche Funktion beim Anklicken des entsprechenden Menüpunkts erfolgt. Dabei kann entweder eine Oberfläche geöffnet, das E-Mail-Objekt aufgerufen oder eine Callback-Funktion ausgeführt werden.

handler: (data, mail, send) => {
Parameter Beschreibung
data Definiert die Daten der E-Mail mit dem in data definierten Aufbau.
mail Definiert das E-Mail-Objekt.
send Callback-Funktion mit Promise fürs Versenden: send().then(...)


icon (optional)

Passt das Icon der Schaltfläche an.

Für das Wählen eines passendes Icons siehe Icon auswählen.

icon: 'aguila-icon file_download',


name (optional)

Benennt die Schaltfläche eindeutig.

name: 'agorum-mail-test-send-with-file',


text (optional)

Definiert den Anzeigetext der Schaltfläche.

text: 'Senden und ablegen bei Antwort'

Zusatzerklärungen zu sendMenuActions

Dieser Abschnitt beschreibt, welche weitere Funktionen Bestandteil des Skriptausschnitts sendMenuActions sind. Bestandteile, die schon bei der Erklärung der Parameter beschrieben wurden, werden hier nicht erneut aufgeführt:

let aguila = require('common/aguila');
...
// Ab send().then((): Hier wird definiert was nach Ausführen der Aktion send passieren soll. 
send().then(() => {
  let baseFolder = objects.find('/agorum/roi/Files');

  // get the mail, where this mail is a reply to
  let related = (mail.allAttachedTo || []).find(orgMail => {
    // just use mails, that are inside /agorum/roi/Files
    // to ignore sent mails, etc ...
    return orgMail.insideFolder(baseFolder.getId(), true);
  });

  if (!related) return;

  // found a related mail
  let parents = related.parents();
  if (!(parents && parents[0])) return;

  // remove from all parents and add it to the parents of the mail, we had answered to
  objects.remove(mail);
  objects.add(mail, parents);
});   
...

afterSend


Diese Funktion stellt bestimmte Aktionen ein, die nach dem Versand der E-Mail stattfinden sollen.

Sie können etwa einstellen, dass nach dem Versand der E-Mail eine Hinweisbox erscheint, mit der der Benutzer die versendete E-Mail öffnen und anzeigen lassen kann.

JavaScript

Mithilfe des folgenden Skripts (Ausschnitt) stellen Sie die gezeigte Hinweisbox nach:

let aguila = require('common/aguila');
let message = require('/agorum/roi/customers/agorum.composite/js/lib/message');
let service = require('filingassistant/service');
... 
/**
 * Is called, after the mail has been sent
 * then some additional actions can be performed
 *
 * @param {Object} mail - the mail object
 */
afterSend: mail => {
  // sample open mail after send
  aguila.enter(() => {
    message
      .confirm('Hinweis', 'Die E-Mail wurde erfolgreich versendet, möchten Sie diese anzeigen?')
      .then(state => {
        if (state) {
          service.open(mail);
        }
      });
  });
},
...

Parameter

Folgende Parameter existieren im dargestellten JavaScript-Ausschnitt.


afterSend

Bestimmt die Aktion, die nach dem Versenden der E-Mail erfolgt, und funktioniert wie der Parameter handler. Sie können etwa das E-Mail-Objekt nach dem Versenden öffnen.

afterSend: (mail) => {
Parameter Beschreibung
mail Definiert das E-Mail-Objekt.

Hinweis: Im afterSend befinden Sie sich nicht direkt im aguila-Kontext. Wenn Sie aguila weiterhin benötigen, verwenden Sie die Funktion aguila.enter, um den aguila-Kontext zu betreten (siehe JavaScript).

send


Diese Funktion stellt bestimmte Aktionen ein, die vor oder während des Versands der E-Mail stattfinden.

Sie können etwa einstellen, dass eine Nachfrage nach dem Anklicken der Senden-Schaltfläche als Hinweisbox erscheint, ob die E-Mail wirklich versendet werden soll.

JavaScript

Mithilfe des folgenden Skripts (Ausschnitt) stellen Sie die Nachfrage als Hinweisbox nach:

exports.settings = user => [
  {
    /**
     * If defined, it is called instead of the default send function.
     * This function has to call the "send" callback itself, if mail data should be modified.
     * If there are several handler, that implement the send function, each is called. Only the last send
     * is then performed. But all modified data are collected.
     *
     * @param {Object} data - The data of the mail.
     * @param {string} data.from - The sender's address.
     * @param {Array.<string>} data.to - An array of recipient addresses.
     * @param {Array.<string>} [data.cc] - An array of cc recipient addresses.
     * @param {Array.<string>} [data.bcc] - An array of bcc recipient addresses.
     * @param {string} data.subject - The subject of the mail.
     * @param {string} data.body - The body of the mail in HTML.
     * @param {Array.<string>} [data.attachments] - An array of UUIDs for attachments.
     * @param {string} [data.replyTo] - The reply-to email address.
     *
     * @param {Object} mail - the mail object
     * @param {Function} send - callback function with promise for sending: send().then(...)
     *
     * @returns {boolean} true, if we handle the send in this call back.
     */
    send: (data, mail, send) => {
      // return;
      // sample: ask before sending, if it should really be sent
      message.confirm('Hinweis', 'Wollen Sie die Mail wirklich versenden?').then(state => {
        if (state) {
          // perform sending
          send().then(() => {
            // here something can be done after sending
            // but also afterSend is called, it can also be done there
          });
        }
      }); // return true, to tell the caller, that we are handling the send callback

      return true;
    },
  },
];​​​​​

Parameter

Folgende Parameter existieren im dargestellten JavaScript-Ausschnitt.


send

Bestimmt die Funktion, die nach dem Anklicken des entsprechenden Menüpunkts erfolgt, und funktioniert wie der Parameter handler. Dabei kann entweder eine Oberfläche, das E-Mail-Objekt oder eine Callback-Funktion ausgeführt werden.

send: (data, mail, send) => {
Parameter Beschreibung
data Definiert die Daten der E-Mail mit dem in data definierten Aufbau.
mail Definiert das E-Mail-Objekt.
send(data) Callback-Funktion mit Promise fürs Versenden: send().then(...).

Der Funktion kann eine modifizierte data-Variable übergeben werden, sodass die E-Mail vor dem Versenden noch verändert werden kann.

In dem obigen Beispiel wird send asynchron aufgerufen, d. h. erst, wenn der Benutzer im Abfrage-Dialog Ja drückt.

mailActions


Hinweis: Diese Funktion bezieht sich auf die Ansicht bereits vorhandener E-Mails.

Diese Funktion stellt weitere Menüpunkte ein, um Aktionen mit E-Mails auszuführen.

In folgendem Beispiel besitzt das Aktions-Menü drei Schaltflächen:

Schaltfläche Beschreibung
Antworten mit Vorlage Verwendet beim Antworten auf die E-Mail eine konfigurierbare Vorlage.

Nur dem Empfänger im Feld An wird geantwortet.
Allen antworten mit Vorlage Verwendet beim Antworten auf die E-Mail eine konfigurierbare Vorlage.

Allen Empfängern wird geantwortet, auch denen im Feld CC oder BCC.
E-Mail archivieren Dient als Platzhalter und ist inaktiv.

JavaScript

Mithilfe des folgenden Skripts (Ausschnitt) stellen Sie die drei Schaltflächen im Aktions-Menü nach:

exports.settings = user => [
  {
    // ...
    /**
     * Here additional menu items for the mail action menu in view mode can be added.
     * If defined, this menu items are displayed in the more menu of the mail
     *
     * @param {Array.<object>} items - the already existing menu items
     *
     * @returns {Array.<object>} modified items - the new array with the new menu items
     */
    mailActions: items => {
      // add a new entry to the context menu
      // sample for reply with template
      items.push({
        // show the menu item as disabled (true/false)
        disabled: false
        /**
         * the handler, that is called, when the menu item is clicked
         *
         * @param {Object} data - The data of the mail.
         * @param {string} data.from - The sender's address.
         * @param {Array.<string>} data.to - An array of recipient addresses.
         * @param {Array.<string>} [data.cc] - An array of cc recipient addresses.
         * @param {Array.<string>} [data.bcc] - An array of bcc recipient addresses.
         * @param {string} data.subject - The subject of the mail.
         * @param {string} data.body - The body of the mail in HTML.
         * @param {Array.<string>} [data.attachments] - An array of UUIDs for attachments.
         *
         * @param {string} [data.replyTo] - The reply-to email address.
         * @param {Object} mail - the mail object
         */,

        handler: (data, mail) => {
          replyWithTemplate(mail, false);
        }, // an icon for the menu entry

        icon: 'aguila-icon reply', // a unique name for the menu entry

        name: 'agorum-mail-tests-reply-with-template', // the text of the menu entry

        text: 'Antworten mit Vorlage',
      }); // sample for reply all with template

      items.push({
        disabled: false,
        handler: (data, mail) => {
          replyWithTemplate(mail, true);
        },
        icon: 'aguila-icon reply_all',
        name: 'agorum-mail-tests-reply-all-with-template',
        text: 'Allen antworten mit Vorlage',
      }); // sample for a disabled entry

      items.push({
        disabled: true,
        handler: (data, mail) => {},
        icon: 'aguila-icon folder',
        name: 'agorum-mail-tests-mail-archive',
        text: 'E-Mail archivieren',
      });

      return items;
    },
    // ...
  },
];

Parameter

Folgende Parameter existieren im dargestellten JavaScript-Ausschnitt.


mailActions

Definiert zusätzliche Menüpunkte.

Diese Menüpunkte erscheinen standardmäßig im Menü Weitere Aktionen.

mailActions: items => {


disabled (optional)

Definiert, ob die Schaltfläche anklickbar ist oder nicht.

Wert Beschreibung
true Schaltfläche ist nicht anklickbar.
false (Standard) Schaltfläche ist anklickbar.


handler

Bestimmt, welche Funktion beim Wählen des entsprechenden Menüpunkts erfolgt. Dabei kann eine Oberfläche oder das E-Mail-Objekt geöffnet werden.

handler: (data, mail) => {
Parameter Beschreibung
data Definiert die Daten der E-Mail mit dem in data definierten Aufbau.
mail Definiert das E-Mail-Objekt.


icon (optional)

Passt das Icon der Schaltfläche an.

Für das Wählen eines passendes Icons siehe Icon auswählen.

icon: 'aguila-icon reply',


name (optional)

Benennt die Schaltfläche eindeutig.

name: 'agorum-mail-tests-reply-with-template',


text (optional)

Definiert den Anzeigetext der Schaltfläche.

text: 'Antworten mit Vorlage'

Erklärungen zum replyWithTemplate (Beispiel)


Dieser Abschnitt beschreibt, wie Sie eine Vorlagen-Nachricht, d. h. ein Template, anlegen, das Sie für die mailActions verwenden können.

Die Vorlagen-Nachricht, die aus dem Skript des erweiterten Beispiels erzeugt wurde, sieht folgendermaßen aus:

Template zum Antworten auf bestimmte E-Mails

JavaScript

Mithilfe des folgenden Skripts (Ausschnitt) stellen Sie das in der Abbildung gezeigte Template nach:

...
// internal function for creating a mail from a template
let replyWithTemplate = (mail, replyAll) => {
  aguila
    .fork(() => {
      let template =
        '<p> Sehr geehrt/e Absender/in,</p> <p> vielen Dank für Ihre E-Mail mit dem Betreff: <b>${subject}</b> <br> Ich werde diese E-Mail so schnell, wie möglich bearbeiten und gebe Ihnen anschließend Bescheid.<p> <p> Mfg </p> roi';
      template = templates.fill(template, null, mail);

      let draft = mailLib.reply(mail, {
        all: replyAll,
        body: template,
      });

      return draft;
    })
    .then(draft => {
      // open draft
      service.open(draft);
    });
};
...

Tipp: Damit Sie einen fertigen Quellcode für die Vorlage erhalten, verwenden Sie den in agorum core integrierten HTML-Editor, der etwa beim Schreiben einer E-Mail zu sehen ist. Dort können Sie über   auf den Quellcode umschalten, um den normalen Text als HTML-Code zu erhalten.