Daten aus einem an eine E-Mail angehängtes PDF in ein Formular übergeben
In den beiden vorgehenden Beispielen zum Umgang mit PDF's hatten wir bereits folgende Fälle betrachtet:
- Auf Basis eines bereits vorhanden PDF-Formulars soll ein Formular in todo4teams generiert werden; hierbei sollten die Feldnamen in den beiden Formularen abgeglichen bzw. ineinander überführt werden.
- Aus einem todo4teams-Formular sollen Daten an ein PDF-Formular übergeben werden, das anschließend zur weiteren Bearbeitung wie z.B. Versand als E-Mail Anhang zur Verfügung stehen soll.
Nun wollen wir die dritte, prinzipielle Möglichkeit des Zusammenspiels von todo4teams mit einem PDF-Formular betrachten:
Durch den Zugang einer E-Mail wird ein Job in todo4teams generiert, diese E-Mail enthält ein ausgefülltes PDF-Formular als Anhang.
Nun sollen die ausgefüllten Felder dieses PDF-Formulars direkt in todo4teams an ein Formular übergeben werden, das automatisch an den Job in todo4teams angehängt wird, sowie die Felder dieses todo4teams-Formulars korrekt gefüllt werden.
Zum konkreten Beispiel:
Wir erhalten folgendes PDF-Formular als Anhang zu einer E-Mail, der Formularname sei "formular.pdf".
Die Daten sollen in das todo-Formular "tutorial PDF" übergeben werden, die ID dieses Formulars ist die 70.
Die Eigenschaften der Felder dieses Formulars finden wir über den Ändern-Dialog in der Formularverwaltung in todo4teams:
Die Logik zur Übernahme des Daten findet in den Einstellungen der entsprechenden Mailbox statt, die als Empfänger für die E-Mail mit dem spezifizierten Anhang vorgegeben wurde.
Dort muss in der Eintreffen-Aktion folgendes Javascript zur Festlegung der anzuziehenden Formulare und ggf. spezieller Feldnamen hinterlegt werden:
for(ai=0;ai<helper.attachments.length;ai++)
{
var attachment = helper.attachments[ai];
// found attachment that is the right pdf
if(attachment.attachmentName.equals("formular.pdf"))
{
// extract pdf fields from pdf form
var pdfFields=helper.getPdfFormFields(attachment);
// attach todo4teams form
var md = helper.addMetaData(70);
// iterate over all pdf fields and insert into todo4teams form
for(i=0;i<pdfFields.length;i++)
{
// println (pdfFields[i].name + ">>" +pdfFields[i].value + ">>" +pdfFields[i].ftype);
var value = pdfFields[i].value;
var name = pdfFields[i].name;
var ftype = pdfFields[i].ftype;
if ((name == "Checkbox1" || name == "Checkbox2") && value == "Yes")
{
value = true;
}
// println (name + ">>" + value);
helper.addValueForField(md, name, value);
}
task.updateMetaContent();
}
}
Kurze Erläuterung zu den einzelnen Skriptbestandteilen:
Der folgende Teil spezifiziert den Namen des PDF's sowie die ID des todo4teams-Formulars, die diesem Fall ist die ID=70.
// found attachment that is the right pdf
if(attachment.attachmentName.equals("formular.pdf"))
{
// extract pdf fields from pdf form
var pdfFields=helper.getPdfFormFields(attachment);
// attach todo4teams form
var md = helper.addMetaData(70);
Voraussetzung für die korrekte Übernahme der Daten ist allerdings, dass die Feldnamen sowohl in dem PDF-Formular als auch in dem todo4teams-Formular identisch sind.
Sollte dies nicht der Fall sein oder der Name des PDF-Formulars kann sich von E-Mail zu E-Mail ändern, müssen gesonderte Anpassungen im Skript vorgenommen werden.
Kontaktieren Sie uns bitte für diese Anpassungen unter support@bergener-bluma.de.
in den folgenden Skriptteil findet die eigentliche Übernahme der Daten statt:
for(i=0;i<pdfFields.length;i++)
{
// println (pdfFields[i].name + ">>" +pdfFields[i].value + ">>" +pdfFields[i].ftype);
var value = pdfFields[i].value;
var name = pdfFields[i].name;
var ftype = pdfFields[i].ftype;
if ((name == "Checkbox1" || name == "Checkbox2") && value == "Yes")
{
value = true;
}
// println (name + ">>" + value);
helper.addValueForField(md, name, value);
}
task.updateMetaContent();
Für die Inhalte von Textfeldern ist die Übernahme problemlos, nur wenn z.B. die Inhalte von Checkboxen oder Radiobuttons übergeben werden, ist dies nicht trivial und bedarf einer genauen Überprüfung des PDF's.
Die übergebenen Werte für diese Arten von Felder sind nicht standardisiert und hängen von dem Programm ab, mit dem das PDF-Formular erzeugt wurde.
In unserem Beispiel gibt es zwei Checkboxen (Checkbox1 und Checkbox2), die den Inhalt von "Neukunde" und "Kunde bereits vorhanden" widerspiegeln.
Das todo-Formular erwartet als Wert für eine Checkbox entweder "true" oder "false", aus dem PDF-Formular unseres Beispiels werden aber nur "Yes" und "Off" übergeben; diese Werte müssen daher in die entsprechenden, gültigen Werte für das todo4teams-Formular übersetzt werden. Dies macht der folgende Skriptbestandteil:
var name = pdfFields[i].name;
var ftype = pdfFields[i].ftype;
if ((name == "Checkbox1" || name == "Checkbox2") && value == "Yes")
{
value = true;
}
// println (name + ">>" + value);
helper.addValueForField(md, name, value);
Aus dem Wert "Yes" für die Checkboxen 1 und 2 wird der Wert "true" generiert, ansonsten bleibt der Feldinhalt identisch, was für das todo4teams-Formular dann automatisch eine nicht gesetzte Checkbox mit dem Wert "false" ergibt.
Zusammengefasst ist gerade das Zusammenspiel von Nicht-Textfeldern aus einem PDF-Formular und dem entsprechenden todo4teams-Formular nicht trivial und bedarf einer genauen Analyse der Feldeigenschaften, kontaktieren Sie uns bitte für entsprechende Analysen und Anpassungen unter support@bergener-bluma.de.