Hmm,
ich glaub ich versteh nicht, was Du meinst.
Den Vergleich macht das Skript, weil immer noch die Möglichkeit besteht, dass das Formular anderweitig umbenannt wurde, was man nie ausschließen kann.
Bei mir funktioniert's eigentlich, wie angedacht.
Nun ja, ich hab das nochmal überarbeitet.
Hier das Skript des Mail-Buttons:
Code: Alles auswählen
// Standardnamen des Formulars festlegen
var DefaultFileName = "BeispielAbweichung_mod.pdf"
// Counter in extras-Objekt dieses Buttons erstellen
Aktionen.initSaveCounter(this);
var CurrentSaveCount = this.extras.SaveCounter.nodes.item(0).value;
// Variablen
var namePart = Auftrag.rawValue;
var namePart1 = Kunde.rawValue;
var datum = new Date();
var datePart = (datum.getDate() + 0) + "-" + (datum.getMonth() + 1) + "-" + datum.getFullYear();
//var fullName = "/y/Band/GRP/Prod/FERTIGUN/Denkmann/RSV/Bochmann/" + namePart + "-" + namePart1 + " -" + datePart + ".pdf";
var currentFileName = event.target.path;
// Prüfen, ob Variablen nicht leer sind
if (namePart !== null && namePart !== "" && namePart1 !== null && namePart1 !== "") {
// Wenn der SaveCounter noch bei 0 ist, dann Formular erst mal speichern
if (CurrentSaveCount < 1) {
// Counter um 1 erhöhen
this.extras.SaveCounter.nodes.item(0).value = this.extras.SaveCounter.nodes.item(0).value + 1;
// Speicherpfad aus dem Variablen zusammenbasteln und als globale Variable speichern (Wichtig für Folder Level Script!)
SaveAsTarget = Aktionen.createSavePath(namePart, namePart1, datePart, DefaultFileName);
// Namen des aktuellen Formulars mit dem Speicherpfad vergleichen. Wäre ja möglich, dass das Formular umbenannt wurde.
if (SaveAsTarget !== currentFileName) {
// Versuchen, das Formular unter dem Speicherpfad zu speichern
try {
// Folder Level Script aufrufen
event.target.SaveAsFunction(event.target);
// Mitteilen, wo Formular gespeichert wurde
xfa.host.messageBox("Formular gespeichert unter:\r\r" + SaveAsTarget, "Formular gespeichert", 3, 0);
} catch (e) {
xfa.host.messageBox(e.toString().replace("RaiseError: ", "") + "\r\rStellen Sie sicher, dass der Zielordner existiert und keine gleichbenannte Datei dort existiert!", "Fehler beim Speichern des Formulars", 0, 0);
app.execMenuItem("SaveAs");
}
// MailTo-Funktion zeitverzögert ausführen.
app.setTimeOut(Aktionen.MailForm(), 3000);
// Formular nur speichern, wenn der aktuelle Name von Standardnamen abweicht.
} else {
try {
app.execMenuItem("SaveAs");
} catch(e) {
this.extras.SaveCounter.nodes.item(0).value = this.extras.SaveCounter.nodes.item(0).value - 1;
}
}
// Wenn der Counter höher als 0 ist, dann Formular nur mailen
} else {
Aktionen.MailForm();
}
// Warnen, wenn min. eine Variable leer ist
} else {
xfa.host.messageBox("Bitte erst die erforderlichen Felder ausfüllen");
}
Und die Funktionen im Skriptobjekt:
Code: Alles auswählen
// Counter erstellen
function initSaveCounter(targetObject)
{
if (targetObject.extras.nodes.namedItem("SaveCounter") === null)
{
targetObject.extras.nodes.append(xfa.form.createNode("extras", "SaveCounter"));
targetObject.extras.SaveCounter.nodes.append(xfa.form.createNode("integer", "state"));
while (targetObject.extras.SaveCounter.nodes.length > 0)
{
targetObject.extras.SaveCounter.nodes.remove(targetObject.extras.SaveCounter.nodes.item(targetObject.extras.SaveCounter.nodes.length-1));
}
var newState = xfa.form.createNode("integer", "SaveCounter");
newState.value = 0;
targetObject.extras.SaveCounter.nodes.append(newState);
}
}
// Formular mailen
function MailForm() {
var Mailto = "a@b.c";
var Betreff = Auftrag.rawValue;
var Betreff1 = Kunde.rawValue;
var Nachricht = "Abweichungsmeldung über ein Band";
var CC = "";
var BCC = "";
var Mail = "mailto:" + Mailto + "?Subject=Abweichungsmeldung für " + Betreff + " - " + Betreff1 + "&Body=" + Nachricht + "&cc=" + CC + "&bcc=" + BCC;
event.target.submitForm({
cURL: Mail,
bEmpty: true,
cSubmitAs: "PDF"
});
}
// Speicherpfad erstellen
function createSavePath(namePart, namePart1, datePart, DefaultFileName) {
// Variablen
var Var1 = namePart;
var Var2 = namePart1;
// Zeitstempel
var TimeStamp = datePart;
// Dateinamen mit Standardnamen vergleichen
if (event.target.documentFileName === DefaultFileName) {
// Variablen zu neuem Speicherpfad verketten
var NewFileName = DefaultFileName.replace(".pdf", "_");
NewFileName += Var1 + "_";
NewFileName += Var2 + "_";
NewFileName += TimeStamp;
NewFileName += ".pdf";
// Alle unsicheren Zeichen aus dem Speicherpfad entfernen und durch Unterstrich ersetzen, um Raise Error zu verhindern (Wichtig!)
NewFileName = NewFileName.replace(/[\s\!\?\<\>\'\"\*\/\\\=\?\^\`\{\}\|\~]+/g, "_");
// Speicherpfad zurückgeben
return event.target.path.replace(event.target.documentFileName, "") + NewFileName;
} else {
return event.target.path;
}
}
Das Formular braucht anderes Folder Level Skript, da ich deines nicht hatte, brauchst Du dieses hier.
Code: Alles auswählen
var SaveAsFunction = app.trustedFunction(function(doc)
{
app.beginPriv();
var newSaveAsTarget = SaveAsTarget;
doc.saveAs({cPath: newSaveAsTarget});
app.endPriv();
});
Wichtig: Wenn Du das in Reader X mit dem Geschützten Modus verwenden willst, muss du eine eigene Policy anlegen, da das Folder Level Script sonst nicht funktioniert.
http://thelivecycle.blogspot.com/2010/1 ... -mode.html