2013-11-15 2 views
0

코드를 실행하면 권한/사용 권한을 요청합니다. 필요한 권한을 부여하고 코드를 다시 실행합니다. 이번에는 UI를 얻습니다. Google Apps Script : 약속 예약시 승인 오류

enter image description here

내가 그것을 어떻게 해결할 수 : I 제출 버튼을 누를 때 나는 그 권한이 작업을 수행하는 것이 필요하다라는 오류 메시지가 있어요? 이 코드는 ( original google developers site에 따르면 7 월 23 일에 업데이트 되었습니까?) 구식입니까?

function scheduleAppointment() { 
    var app = UiApp.createApplication().setTitle('Schedule an Appointment'); 
    var doc = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = doc.getActiveSheet(); 
    var row = sheet.getActiveRange().getRowIndex(); 
    // Create a grid with 5 text boxes and corresponding labels 
    var grid = app.createGrid(5, 2); 

    var textApptDate = app.createTextBox(); 
    // Text entered in the text box is passed in to apptDate 
    textApptDate.setName('apptDate'); 
    var day = new Date(); 
    day.setDate(day.getDate()+1); 
    textApptDate.setText(Utilities.formatDate(day, "PDT", "MM/dd/yyyy")); 
    grid.setWidget(0, 0, app.createLabel('Appointment Date:')); 
    grid.setWidget(0, 1, textApptDate); 

    var textStartTime = app.createTextBox(); 
    // Text entered in the text box is passed in to startTime 
    textStartTime.setName('startTime'); 
    textStartTime.setText('09:00 PDT'); 
    grid.setWidget(1, 0, app.createLabel('Work Day Start Time:')); 
    grid.setWidget(1, 1, textStartTime); 

    var textEndTime = app.createTextBox(); 
    // text entered in the text box is passed in to endTime. 
    textEndTime.setName('endTime'); 
    textEndTime.setText('17:00 PDT'); 
    grid.setWidget(2, 0, app.createLabel('Work Day End Time:')); 
    grid.setWidget(2, 1, textEndTime); 

    var textUser = app.createTextBox(); 
    // Text entered in the text box is passed in to userEmail 
    textUser.setName('userEmail'); 
    textUser.setText(sheet.getRange(row, getColIndexByName("Contact email")).getValue()); 
    grid.setWidget(3, 0, app.createLabel('User\'s Email')); 
    grid.setWidget(3, 1, textUser); 

    // Create a hidden text box for storing the selected row number in the sheet 
    var rowValue = app.createTextBox(); 
    rowValue.setName('rNum'); 
    rowValue.setText(row.toString()); 
    rowValue.setVisible(false); 
    grid.setWidget(4, 0, rowValue); 

    // Create a vertical panel.. 
    var panel = app.createVerticalPanel(); 

    // ...and add the grid to the panel 
    panel.add(grid); 

    // Create a button and click handler; pass in the grid object as a callback element and the handler as a click handler 
    // Identify the function schedule as the server click handler 
    var button = app.createButton('Schedule Appointment'); 
    var handler = app.createServerClickHandler('schedule'); 
    handler.addCallbackElement(grid); 
    button.addClickHandler(handler); 

    // Add the button to the panel and the panel to the application, then display the application app in the spreadsheet 
    panel.add(button); 
    app.add(panel); 
    doc.show(app); 

} 

// function that schedules the appointments and updates the spreadsheet 
function schedule(e) { 
    var apptDate = e.parameter.apptDate; 
    var userEmail = e.parameter.userEmail; 
    var sheet = SpreadsheetApp.getActiveSheet(); 

    var userCalendar = CalendarApp.getCalendarById(userEmail); 
    var helpDeskCalendar = CalendarApp.getDefaultCalendar(); 

    // Find the first available 30 minute timeslot on the selected day 
    var workDayStartTime = e.parameter.startTime; 
    var workDayEndTime = e.parameter.endTime; 
    var startTime = new Date(apptDate + " " + workDayStartTime); 
    var endTime = new Date(startTime.getTime() + 30 * 60 * 1000); 
    var row = e.parameter.rNum; 

    while (endTime.getTime() < new Date(apptDate + " " + workDayEndTime).getTime()) { 
    var numUserEvents = userCalendar.getEvents(startTime, endTime).length; 
    var numHelpDeskEvents = helpDeskCalendar.getEvents(startTime, endTime).length; 

    if (numUserEvents == 0 && numHelpDeskEvents == 0) { 
     CalendarApp.createEvent("Help Desk appointment", startTime, endTime, 
          {description: "Help Desk Ticket #" + row, 
          guests: userEmail}); 
     // Update Notes and Status 
     sheet.getRange(row, getColIndexByName("Notes")).setValue("Appointment scheduled."); 
     sheet.getRange(row, getColIndexByName("Status")).setValue("In Progress"); 
     // Clean up - get the UiApp object, close it, and return 
     var app = UiApp.getActiveApplication(); 
     app.close(); 
     return app; 
    } 
    // Add 30 minutes to start and end times 
    startTime = endTime; 
    endTime = new Date(startTime.getTime() + 30 * 60 * 1000); 
    } 
    Browser.msgBox("There are no times available on " + apptDate + ". Please try another date."); 

    // Clean up - get the UiApp object, close it, and return 
    var app = UiApp.getActiveApplication(); 
    app.close(); 
    return app; 
} 
+0

당신은이 문제를 해결 했습니까? –

+0

아직도, Serge! 나는 오늘 그것에 대해 연구 할 것이다. Serge, GAS 사이트 나 튜토리얼을 가지고 있습니까? – craftApprentice

+0

아직이 프로젝트가 진행 중입니다 ... 인증을 철회하고 다시 인증을 시도한 적이 있습니까? –

답변

0

디버거에서 일정 기능도 실행하십시오. 가스가 다른 구역의 모든 ghe 범위를 감지하지 못할 수도 있습니다. 여전히 작동하지 않으면 좋은 매개 변수로 일정을 호출하여 실제로 디버거에서 이벤트를 생성하는 함수를 작성하십시오.

0

스크립트 권한 부여를 취소하고 다시 인증하려고 시도 할 수 있습니다. 초기 승인 프로세스에서 문제가 발생할 수 있습니다.

그것을 할 수있는 여러 방법을 보여줍니다 모든 권한이 this other post을 참조 취소하는 방법에 대한 지시 사항에 대해

는 ..