Copy link to clipboard
Copied
Hi,
I have a form that has required feilds. I also have a button that submits the form and excecutes a javascript to flatten the file as read only and then sends via email.
I got this Script from a few posts and replies from try67 over the past years (Thank you try67).
for (var i = 0 ; i < this.numFields ; i++) {
var f = this.getField(this.getNthFieldName(i)) ;
if (f.type != "button") {
f.readonly = true ;
}
}
var targetEmail = "email@email.com";
var subjectLine = "Service Sheet" + " - " + this.getField("Engineer").valueAsString + " - " + this.getField("SRV Number").valueAsString;
var body = "Please find attached the service sheet for the SRV stated in the subject line above.";
this.mailDoc({cTo: targetEmail, cSubject: subjectLine, cMsg: body});
This script works really well and does exaclty what I want it to do. However, it ignores the 'required' feilds.
Does anyone know how I can run the script only once all required feilds have been filled/selected?
Thank you
Copy link to clipboard
Copied
I think Bernd means you need to check them in the code, as it won't do that for you (unless you switch to submitForm instead of mailDoc, but then your fields will already be set as read-only...).
So the steps to take are:
- Validate that all the required fields are filled-in (meaning, their value is not the same as their default value)
- If not, show an error message and exit the script.
- If so, make the fields read-only and submit the file.
Copy link to clipboard
Copied
Check the required fields before you execute this script.
Copy link to clipboard
Copied
Thank you for the response.
All of the feilds that are 'required' are already checked in the field properties.
Pressing the 'send form' button that runs the script seems to ignore all required fields and will send a blank form as an email
Copy link to clipboard
Copied
I think Bernd means you need to check them in the code, as it won't do that for you (unless you switch to submitForm instead of mailDoc, but then your fields will already be set as read-only...).
So the steps to take are:
- Validate that all the required fields are filled-in (meaning, their value is not the same as their default value)
- If not, show an error message and exit the script.
- If so, make the fields read-only and submit the file.
Copy link to clipboard
Copied
Ahh, I understand now.
Thank you very much.
Sorry to ask, but do you have an example of this that I can tailor it to my own form?
Copy link to clipboard
Copied
Yes, I posted code that does just that many times. Search the forum for "validateRequiredFields" and you should be able to find it.
Copy link to clipboard
Copied
Thank you.
I found the code based off your search terms.
function validateRequiredFields(doc) {
var emptyFields = [];
for (var i=0; i<doc.numFields; i++) {
var f = doc.getField(doc.getNthFieldName(i));
if (f!=null && f.type!="button" && f.required && f.valueAsString==f.defaultValue) {
emptyFields.push(f.name);
}
}
if (emptyFields.length>0) {
app.alert("You must fill in the following fields:\n" + emptyFields.join("\n"));
return false;
}
return true;
}
if (validateRequiredFields(this)) this.mailDoc({cTo: "me@server.com"});
This code fixes the validation problem I had and solves point 1 & 2 from the instruction above
So the steps to take are:
- Validate that all the required fields are filled-in (meaning, their value is not the same as their default value)
- If not, show an error message and exit the script.- If so, make the fields read-only and submit the file.
By try67
So how do I know combine the 2 working scripts so instead of finishing off the code with this.mailDoc({cTo: "me@server.com"}); - I run the original script which flattens the file and includes a subject line etc..
The final part of the script i want to excecute after the validation is
for (var i = 0 ; i < this.numFields ; i++) {
var f = this.getField(this.getNthFieldName(i)) ;
if (f.type != "button") {
f.readonly = true ;
}
}
var targetEmail = "email@email.com";
var subjectLine = "Service Sheet" + " - " + this.getField("Engineer").valueAsString + " - " + this.getField("SRV Number").valueAsString;
var body = "Please find attached the service sheet for the SRV stated in the subject line above.";
this.mailDoc({cTo: targetEmail, cSubject: subjectLine, cMsg: body});
Copy link to clipboard
Copied
Use this:
if (validateRequiredFields(this)) {
// your original code
}
Copy link to clipboard
Copied
You hero!!
Thank you so much

