2017-01-29 1 views
0

Я пытаюсь создать инструмент на Google Sites отслеживании времени для моих коллеги, чтобы войти свои часы, со следующими потребностями:GAS - Кнопка в сценарии гаджет запускает целевой сценарий, а затем исчезает

- 3 buttons: One to log a timestamp, one to tally up logs, and one to view a logsheet. 
- all users can see button 1, only specific email addresses can see boxes 2 & 3. 
- When button 1 is pressed, logging script is run and gadget returns to button, so user can press again. 

I создали ниже Google Appscript, чтобы нарисовать кнопки в IEFrame Gadget, запустить сценарий timestamp при щелчке и в идеале вернуть внимание пользователя к кнопке.

Моя проблема заключается в том, что после нажатия кнопки в гаджете appscript сценарий работает нормально, но область гаджета становится пустой. Я должен обновить страницу, чтобы вернуть кнопку. Я попытался закончить сценарий, перезагрузив документ HTML, но команда OutputToHTMLFile, похоже, не работает в последний раз, когда я запускаю ее, даже если она работает нормально, когда страница загружается впервые. Есть ли способ запустить скрипт без исчезновения кнопок?

Вот как проблема выглядит на моем тестовом сайте:

Image of button Disappearance

SendtoLog сценария:

function doGet() { 
    var e = Session.getActiveUser().getEmail(); 
    if(/*e == "[email protected]" ||*/ 
    e == "[email protected]" || 
    e == "[email protected]") 
    { 
    return HtmlService.createHtmlOutputFromFile('adminButtons'); 
    } 

    else 
    { 
    return HtmlService.createHtmlOutputFromFile('callerButtons'); 
    } 
} 

function sendToLog(e) { 
var email = Session.getActiveUser().getEmail(); // Get current user 
var now = new Date(); //Pull login time for user 
var nowMinute 
var currentDate = now; 
//open spreadsheet for tracking and open the sheet for the current user 
var folderID = openFolderByName("TimeTrack"); 
var folderToWrite = DriveApp.getFolderById(folderID); 
var logSheetID = openFileByName ("Logsheet"); 
var logSheet = SpreadsheetApp.openById(logSheetID); 

try{logSheet.setActiveSheet(logSheet.getSheetByName("Sheet1")); 
    logSheet.deleteActiveSheet();} 
catch (e){Logger.log("Sheet1 is already deleted")}; 

try{logSheet.setActiveSheet(logSheet.getSheetByName(email));} 
catch (e) {logSheet.insertSheet(email);} 

try{logSheet.setActiveSheet(logSheet.getSheetByName("Sheet1")); 
    logSheet.deleteActiveSheet();} 
catch (e){Logger.log("Sheet1 is already deleted")}; 

//get last row of the sheet so we can check what was done on the last click 
var lastRow = logSheet.getLastRow(); 
if (lastRow < 1) // If there is no data on the sheet, this will be our first logon 
var logType = "logon"; //We will assume that current logon event is a logon unless noted otherwise on spreadsheet. 

    else 
    { 
    var dataRange = "A1:B"+ lastRow; 
    var dataWithoutHeaders = logSheet.getRange(dataRange).getValues() // Pull data from the sheet for comparison 
    var lastLogType = logSheet.getRange("C"+lastRow).getDisplayValue(); //  Pull the description of the last log event 
    //if last row is login, add logoff, otherwise, add logon. 
    switch(lastLogType){ 
    case "logon": 
    var logType = "logoff"; 
    break; 
    case "logoff": 
    var logType = "logon"; 
    break; 
    default: 
    var logType = "Logon"; //We will assume if last entry could not be compared, this is a logon event. 
    break; 
    }//End switch 
}//End else statement 
logSheet.appendRow([email, currentDate, logType]); //Write email, time stamp, and log event to sheet 
var e = Session.getActiveUser().getEmail(); 
if(/*e == "[email protected]" ||*/ 
    e == "[email protected]" || 
    e == "[email protected]") 
    { 
    return HtmlService.createHtmlOutputFromFile('adminButtons'); 
    } 
else 
{ 
    return HtmlService.createHtmlOutputFromFile('callerButtons'); 
} 
}//end function SendtoLog 
function openFileByName (FileNameString) 
{ 
var FileIterator = DriveApp.getFilesByName(FileNameString); 
while (FileIterator.hasNext()) 
{ 
var file = FileIterator.next(); 
if (file.getName() == FileNameString) 
{ 
    var sheet = SpreadsheetApp.open(file); 
    var sheetID = sheet.getId();  
}  
} 
return sheetID; 
} 
function openFolderByName (FolderNameString) 
{ 
var FolderIterator = DriveApp.getFoldersByName(FolderNameString); 
var folderFound = false; 
while (FolderIterator.hasNext() || !folderFound) 
{ 
    var folder = FolderIterator.next();  
    if (folder.getName() == FolderNameString) 
{ 
folderFound = true; 
var folderID = folder.getId(); 
}  
} 
return folderID; 
} 

callerButtons HTML-страницы:

<div style="display:block;text-align:left"><input type="button" onclick="location.href='https://script.google.com/a/macros/mycompany.com/s/AKfycbwM842S-Y6Y18sDV7p0fZlb9LqdP6juXcMz1QFa4s6-h4w/exec';" value="Time Check-In" /> 

adminButtons HTML-страницы:

<div style="display:block;text-align:left"><input type="button" onclick="location.href='https://script.google.com/a/macros/mycompany.com/s/AKfycbwM842S-Y6Y18sDV7p0fZlb9LqdP6jueL7bXcMz1QFa4s6-h4w/exec';" value="Time Check-In" /> 

<br> 
<div style="display:block;text-align:left"><input type="button" onclick="location.href='https://script.google.com/a/macros/mycompany.com/s/AKfycbwM842S-Y67p0fZlb9LqdP6jueL7bXcMz1QFa4s6-h4w/exec';" value="Tabulate Times" /> 

<br> 
<div style="display:block;text-align:left"><input type="button" onclick="location.href='https://script.google.com/a/macros/mycompany.com/s/AKfycbwM842S-Y6Y18sDV7p0fZlb9LqdP6jueL7bXcMz1QFa44w/exec';" value="CSV Folder" /> 

ответ

0

ОК, так что это был вопрос от кого-то, кто даже не знал, как открыть консоль разработчика для устранения неполадок. Для других интересно, как проверить код Javascript в Chrome, нажмите CTRL + SHIFT + I.

Оказывается, одна из моих переменных была сломанной ссылкой в ​​одной из функций onclick. Все исправлено!

Смежные вопросы