We have created a Google apps script for mail-merge purposes. We open a Google document and onOpen a script will run for selecting a spreadsheet with addresses and after selecting a spreadsheet we need to authorize the code. We can authorize within the script editor, but this document will be copied for every mail-merge type and therefor the end-user needs to authorize. Well here's where the problem occurs. The end-user will only get the message.
"Error encountered: Authorization is required to perform that action."
Okay fine, but the popup which normally shows by web-apps doesn't appear. So the user can't authorize at all. We can't ask our end-users to go to the script editor and run the code ones, so they will be able to authorize.
Can we popup the authorization code manually in the script?
Here is a routine I use in document embedded scripts that use only normal GAS services, try it to see if it meets your requirements.
code.gs :
function onOpen() {
var ui = DocumentApp.getUi();
if(!UserProperties.getProperty('author')){
ui.createMenu('Custom Menu')
.addItem("Authorize this app", 'authorize')
.addToUi();
var html = HtmlService.createHtmlOutputFromFile('index1')
.setTitle("Install Menu").setWidth(400);
ui.showSidebar(html);
}else{
ui.createMenu('Custom Menu')
.addItem("Do something", 'doIt')
.addToUi();
var html = HtmlService.createHtmlOutputFromFile('index2')
.setTitle("Mailmerge Menu").setWidth(400);
ui.showSidebar(html);
}
}
function authorize(){
SpreadsheetApp.openById('0AnqSFd3iikE3dDRlSC05ZTNxb2xORzNnR3NmMllyeUE');
UserProperties.setProperty('author','yes');
var ui = DocumentApp.getUi();
var html = HtmlService.createHtmlOutput('Authorization complete<br>Thanks<br><br>please refresh your browser').setTitle("Confirmation").setWidth(400);
ui.showSidebar(html);
}
function doIt(){
//
}
index1.html :
<div>
<style>
body{
font-family : verdana,arial,sans-serif;
font-size : 10pt;
background : beige;
padding : 10px;
}
#content{
margin-left:30px;
margin-top:30px;
}
</style>
<BODY LANG="fr-BE">
If you open this document for the first time please run the authorization process from the custom menu<br><br>
Thank you
<br>
</div>
index2.html :
<div>
<style>
body{
font-family : verdana,arial,sans-serif;
font-size : 10pt;
background : beige;
padding : 10px;
}
#content{
margin-left:30px;
margin-top:30px;
}
</style>
<BODY LANG="fr-BE">
Do what you have to do...
<br>
</div>