Speichern einer erstellten PDF
Ninox Profile

Super wäre es wenn ich eine Rechnung, Brief etc. erzeugt habe , das sich diese Datei automatisch im Datensatz abspeichert.

Ninox Profile

Dieses Feature wird mit einem der kommenden Updates kommen - wir arbeiten bereits daran. - Mit anderen Worten: Derzeit ist es leider noch nicht möglich.

Birger

F

Beim letzten Update kam diese Funktion nicht zufällig mit und ich habe sie übersehen?

Ninox Profile

Doch - jetzt gehts:

let myLayout := "EinPribtlayout;
met myFilename := "mypdf.pdf":
let myTempFile := printAndSaveRecord(this, myLayout);
importFile(this, myTempFile, myFilename);
Birger

P

Ähm... Kann das mal genauer erklärt werden bitte? Das würde ich auch gut gebrauchen können.

Ninox Profile

Hallo Pyromixer, ich versuch's mal: Um in Ninox ein Dokument zu erzeugen, z. B. eine Rechnung, und die betreffende PDF-Datei an den Datensatz anzuhängen, musste man bisher mehrere Schritte ausführen:

 

1. PDF mit dem entsprechenden Layout drucken.
2. Datei manuell benennen und lokal speichern.
3. In "Anhänge" wechseln und die Datei wieder hochladen.

 

Und wenn man die Datei per E-Mail versenden wollte, dann kamen noch ein paar Arbeitsschritte hinzu:

 

4. E-Mail-Client auf dem eigenen Rechner öffnen.
5. Betreffende Datei lokal auswählen und der Mail anhängen.
6. Empfänger-Adresse angeben und Mail versenden.

 

Seit dem letzten Update auf Version 2.4 lässt sich das per Script automatisieren:

 

printAndSaveRecord() generiert die Datei.

importFile() liest sie ein und speichert sie unter einem beliebigen Namen als Anhang eines Datensatzes.

sendEMail() erzeugt und versendet aus Ninox eine Mail mit der Datei als Anhang.

 

Angenommen, du hast eine Tabelle namens "Faktura" mit einem Drucklayout namens "Rechnung". Als Dateiname soll immer der Inhalt des (Text-) Feldes "RechnungsNr" verwendet werden. Dann kannst du  im Formular dieser Tabelle eine Schaltfläche "Rechnung generieren" o. ä. erstellen:

 

importFile(this, printAndSafeRecord(this, "Rechnung"), RechnungsNr + ".pdf")

 

Damit wären die Schritte 1 - 3 erledigt. Um die soeben erzeugte und angehängte Datei nun auch gleich noch aus Ninox heraus per E-Mail zu versenden (Schritte 4 - 6), kann das Script um sendEmail() ergänzt werden. Dann sähe es bspw. so aus:

 

let DateiAnhang := importFile(this, printAndSafeRecord(this, "Rechnung"), RechnungsNr + ".pdf")

sendEmail({

    from: "Deine.Mail@DeineDomain.tld",

    to: EMailKunde,

    cc: ""Deine.Mail@DeineDomain.tld",

    subject: "Rechnung " + DateiAnhang,

    text: "Moin, anbei meine Rechnung " + DateiAnhang + ". Noch mehr Text",

    attachments: DateiAnhang

    })

 

Anmerkungen: Das 'this' steht immer für den aktuellen Datensatz. Die 'from'-Adresse muss die sein, mit der du bei Ninox registriert bist (bzw. die eines Team-Mitglieds). Das 'cc:' an die eigene E-Mail-Adresse ist optional, empfiehlt sich aber, da man sonst keinerlei Bestätigung hat, dass die Mail tatsächlich versendet wurde.

 

Um versehentliches Versenden zu vermeiden, sollte man sinnvollerweise noch eine dialog()-Abfrage vorschalten, mit der sich der Vorgang auch noch abbrechen ließe.

 

Disclaimer: Ich habe den Code jetzt als Trockenübung mehr oder weniger aus dem Kopf niedergeschrieben und hoffe, dass er so stimmt (falls nicht: Bitte korrigieren!). Wie immer gilt: Nach bestem Wissen und Gewissen, aber ohne Gewähr. ;)

P

Vielen Dank für Deine Mühe. Aber dafür bin ich wohl zu blöd.

Bei mir kommt die Meldung: Die Funktion ist nicht definiert: printAndSafeRecord(node,string) in Zeile 1, Spalte 52

 

 

F

Weil es soweit ich weiß saVe und nicht saFe heißt, also printAndSaveRecord :) 

Ninox Profile

Dann versuch's mal mit Variablen, so wie in Birgers Beispiel weiter oben.

Ninox Profile

Ja klar, es muss natürlich "save" heißen. War ja klar, dass ich da wieder einen blöden Fehler reinhaue ...

Antworten