Reputation: 787
I am trying to access a spreadsheet from a doGet() function which is executed when a link is clicked on by the user who gets an email from a form submit. I figured that I couldn't call getActiveSpreadsheet from doGet(). So I had sent in the spreadsheet id through the link along with the row number, and then called for the spreadsheet i need through openById, but when I do that I get a weird error "strictValidationFailed". That is it, that is all it says about the error. It gives no line no. or type of error. It seems like since this error started appearing when I started using the openById functionality, the error maybe somehow related to that. I am attaching the code snippet relevant to this below.
function onFormSubmit(event) { //On form submission send an email to the approver.
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var approvalsheet = spreadsheet.getSheetByName("Approval Worksheet");
//Get values that have to be put on the email.
var timestamp = event.values[0];
var username = event.values[1];
var campus = event.values[2];
var gltype = event.values[3];
var fullname = event.values[4];
var eMailAdd = event.values[5];
var description = event.values[6];
var replacement = event.values[7];
var usage = event.values[8];
var members = event.values[9];
var notes = event.values[11];
var initialowner = event.values[12];
//The service url that is required for approval on the email.
var serviceurl = //hiding the service URL
serviceurl+='&spreadsheetId='+spreadsheet.getId();
serviceurl+='&row='+approvalsheet.getLastRow();
//Setting the message that goes on the email sent to the approver.
var message = 'There is a new Submission to the UAF List or Group aprooval Workflow\n\n\n'+'You can aproove this request here: '+serviceurl+
'\n\nTime of Submission: '+timestamp+'\n\nSubmitter Username: '+username
+'\n\nCampus: '+campus+'\n\nFull Name: '+fullname+'\n\nMiddle Portion of Email Address: '+eMailAdd
+'\n\nDescription of the List/Group: '+description + '\n\nIs this replacing an existing eMail List or Group? '
+replacement+'\n\nUsage: '+usage+'\n\nAnticipated number of members: '+members+'\n\nBrief notes about the request :'
+notes+'\n\nAre you the initial owner :'+initialowner;
//Title for the mail sent.
var title = 'New Submission at '+timestamp;
//Email address for the approver that gets the submission notification.
var mailAdd = '[email protected]'
//Sending Email to the approver.
MailApp.sendEmail(mailAdd, title, message);
}
function doGet(e) //On hitting approve button in the mail.
{
//retrieving spreadsheet ID from the approval link.
var spreadsheet = SpreadsheetApp.openById(e.parameter['spreadsheetId']);
//if (spreadsheet != null) {
var approvalsheet = spreadsheet.getSheetByName("Approval Worksheet");
//}
var row = e.parameter['row'];//retreiving row value that came from the approval link.
//if(spreadsheet!=null)
//{
approvalsheet.getRange(row, 17).setValue('Yes');//Setting the approval value on the spreadsheet to Yes.
approvalsheet.getRange(row, 17).setBackground('White');//Setting the approval box color to white.
//}
//Creating UiApp for approval notification.
var app = UiApp.createApplication(); //Create an instance of UiApp
var label = app.createLabel(); //Create a lable on the UiApp
label.setText('The list or group was approved');//Set text on the Label.
app.add(label);//Add label to the UiApp instance.
return app;
}
Upvotes: 0
Views: 766
Reputation: 12673
The error appears to be related to data validation in the spreadsheet. Can you check to make sure the values you are attempting to write to the spreadsheet are not violating any of the data validation rules?
Upvotes: 2
Reputation: 17792
I've tested your code (the doGet part) and it worked fine for me. Are you sure you're running exactly this?
Anyway, try wrapping everything in a try-catch and parsing the error stacktrace, it might help, e.g.
function doGet(e) {
try {
//all your spreadsheet code
} catch(err) {
stack = parseErr_(err);
if( !app ) //maybe the error is after you've "createApplication"
app = UiApp.createApplication();
return app.add(app.createLabel(stack));
}
}
//Try to parse errors stacktrace into a nicer format
function parseErr_(e) {
var ret;
if( e !== undefined && e !== null && e.stack ) {
ret = e.name +': '+e.message+' \nStacktrace: \n';
var stack = e.stack.replace(/\n/g,'').match(/:\d+( \([^\)]+\))?/g);
for( var i in stack )
ret += stack[i].replace(/[\(\):]/g,'').split(/ /).reverse().join(':') + ' \n';
} else
ret = e;
return ret;
}
Upvotes: 0