2012-06-14 1 views
0

방금 ​​gApps 스크립트를 사용하기 시작했으며 작업이 처리되는 동안 제출 버튼을 사용하지 않도록 UI를 설정하는 동안 (아래) 내 코드에 두 가지 문제가 발생했습니다. . 나는 가끔 다음과 같은 오류가 스크립트를로드하려고 할 때Google Apps Script - submitButton UI 요소 - 예기치 않은 오류가 발생했습니다.

  1. 은 "오류가 발생했습니다 : 예기치 않은 오류가 발생했습니다." 이 오류는 스크립트를 새로 고친 다음로드해야하는 모든 작업에서 일관성이 없습니다. 그것은 코드가 전혀 변경되지 않았을 때 때로는 효과가 있고 때로는 그렇지 않다는 것을 정말로 귀찮게합니다.

  2. 마지막 줄의 //button_submit.setEnabled(true);이 주석 처리되지 않은 경우 스크립트를로드하려고 할 때마다 오류가 발생합니다.

나는에서 getElementById()가 제출 버튼에 대한 올바른 UI 유형을 지정하는 것 같지 않았다 것으로 나타났습니다 무엇을 잘못 파악하는 동안 나는

. 이것이 문제의 원인인지 확신 할 수는 없지만 간단한 토대에서 문제를 재현 할 수 있는지 테스트 스크립트에서 똑같은 동작을 보았던 것과 다른 것으로 판단됩니다.

이 문제의 원인에 대한 의견을 보내 주시면 감사하겠습니다.

감사

크리스 B-P

Logging output 

populate_assign_list spinner.getId():spinner 
populate_assign_list spinner.getType():Image 
populate_assign_list button_submit.getId():button_submit 
populate_assign_list button_submit.getType():Generic 
doGet button_submit.getId():spinner 
doGet button_submit.getType():Image 
doGet button_submit.getId():button_submit 
doGet button_submit.getType():SubmitButton 

.

//define global script property variables 
var prop_home_folder_id;  //String - Contains the home folder's ID string 
var prop_subject_folder_names; //Array of Strings - Listing of folder names 
var prop_subject_folder_ids; //Array of Strings - Listing of folder IDs associated with folder names 
var prop_submisison_ss_ids; //Array of Strings - Losting of sumission spreadsheet IDs 
var prop_allow_anon_submit; //Flag - Allow manual entry of email address (ie. non domain access) Default to FALSE 

function save_script_prop_(home_folder_id, subject_folder_names, subject_folder_ids, submisison_ss_ids, allow_anon_submit) { 
    //array values must be sent to this function as comma separated strings ie <array>.join(',') 
    if (home_folder_id != null) ScriptProperties.setProperty("home_folder_id", home_folder_id); 
    if (subject_folder_names != null) ScriptProperties.setProperty("subject_folder_names", subject_folder_names); 
    if (subject_folder_ids != null) ScriptProperties.setProperty("subject_folder_ids", subject_folder_ids); 
    if (submisison_ss_ids != null) ScriptProperties.setProperty("submisison_ss_ids", submisison_ss_ids); 
    if (allow_anon_submit != null) ScriptProperties.setProperty("allow_anon_submit", allow_anon_submit); 
} 

function load_script_prop_() { 
    /* 
    prop_home_folder_id = ScriptProperties.getProperty("home_folder_id"); 
    prop_subject_folder_names = ScriptProperties.getProperty("subject_folder_names").split(","); 
    prop_subject_folder_ids = ScriptProperties.getProperty("subject_folder_ids").split(","); 
    prop_submisison_ss_ids = ScriptProperties.getProperty("submisison_ss_ids").split(","); 
    prop_allow_anon_submit = ScriptProperties.getProperty("allow_anon_submit"); 
    //*/ 
    prop_home_folder_id = ""; 
    prop_subject_folder_names = ["1","2","3"]; 
    prop_subject_folder_ids = ["1","2","3"]; 
    prop_submisison_ss_ids = ["a","b","c"]; 
    prop_allow_anon_submit = false; 
} 




function doPost(e) { 
    var app = UiApp.getActiveApplication(); 
    app.add(app.createLabel("Form submitted")); 
    return app; 
} 

function doGet() { 
    load_script_prop_(); 
    var testing_message = ""; 

    //create ui app and panels 
    var app = UiApp.createApplication().setTitle("Assignment Submission"); 
    var v_panel = app.createVerticalPanel(); 
    v_panel.setSpacing(20); 
    var layout_grid = app.createGrid(5,2); 
    var form_panel = app.createFormPanel(); 
    var tab_panel_upload = app.createTabPanel().setId("tab_panel_upload"); 
    var v_panel_upload_file = app.createVerticalPanel().setTag(0); //Tag refrenced the number of upload elements currently in the tab 
    var v_panel_upload_gdoc = app.createVerticalPanel().setTag(0); //Tag refrenced the number of gdoc elements currently in the tab 


    //create menu objects 
    var spinner = app.createImage("http://www.worldmsday.org/1000-faces/images/whatami/spinner.gif").setVisible(false).setId("spinner"); 
    var datebox_submission = app.createDateBox().setId("submission_datebox").setValue(new Date()).setEnabled(false); 
    var textbox_user = app.createTextBox().setId("textbox_user").setName("textbox_user").setValue(Session.getUser().getEmail()).setEnabled(false); 

    var lb_subject_folder = app.createListBox().setId("lb_subject_folder").setName("lb_subject_folder"); 
    lb_subject_folder.setVisibleItemCount(1); 
    for (var i in prop_subject_folder_names) lb_subject_folder.addItem(prop_subject_folder_names[i], i); 
    lb_subject_folder.setSelectedIndex(0); 

    var lb_assign_list = app.createListBox().setId("lb_assign_list").setName("lb_assign_list"); 
    lb_assign_list.setVisibleItemCount(1); 
    populate_assign_list(); 
    lb_assign_list.setSelectedIndex(0); 

    var button_submit = app.createSubmitButton("Submit").setId("button_submit"); 
    Logger.log("doGet button_submit.getId():"+spinner.getId()); 
    Logger.log("doGet button_submit.getType():"+spinner.getType()); 
    Logger.log("doGet button_submit.getId():"+button_submit.getId()); 
    Logger.log("doGet button_submit.getType():"+button_submit.getType()); 


    //button_submit.setEnabled(false); 
    //button_submit.setEnabled(true); 

    var upload_1 = app.createFileUpload().setName("upload_1"); 
    var gdoc_1 = app.createLabel("Not Yet Implemented"); 




    //create menu handlers 
    var handler_lb_subject_folder_spinner = app.createClientHandler().forTargets(spinner).setVisible(true); 
    handler_lb_subject_folder_spinner.forTargets([lb_assign_list, tab_panel_upload]).setVisible(false); 
    handler_lb_subject_folder_spinner.forTargets(button_submit).setEnabled(false); 

    var handler_lb_subject_folder = app.createServerHandler("populate_assign_list").addCallbackElement(v_panel); 
    lb_subject_folder.addChangeHandler(handler_lb_subject_folder_spinner); 
    lb_subject_folder.addChangeHandler(handler_lb_subject_folder); 
    //need to add an onchange handler for subject folder listbox which updates the assignment selection listbox. 


    //add ui objects to ui 
    layout_grid.setText(0,0, "Date: "); 
    layout_grid.setWidget(0, 1, datebox_submission); 
    layout_grid.setText(1,0, "Name: "); 
    //layout_grid.setWidget(1, 1, ""); 
    layout_grid.setText(2,0, "Email Address: "); 
    layout_grid.setWidget(2, 1, textbox_user); 
    layout_grid.setText(3,0, "Course: "); 
    layout_grid.setWidget(3, 1, lb_subject_folder); 
    layout_grid.setText(4,0, "Assignment: "); 
    layout_grid.setWidget(4, 1, lb_assign_list); 
    v_panel.add(layout_grid); 

    v_panel.add(spinner); 

    v_panel_upload_file.add(upload_1); 
    tab_panel_upload.add(v_panel_upload_file, "Upload File"); 

    v_panel_upload_file.add(gdoc_1); 
    tab_panel_upload.add(v_panel_upload_gdoc, "Share gDoc"); 
    tab_panel_upload.selectTab(0); 
    v_panel.add(tab_panel_upload); 


    v_panel.add(button_submit); 

    form_panel.add(v_panel); 
    app.add(form_panel); 



    var testing_label = app.createLabel("No Test Output").setStyleAttribute("textAlign", "center"); 
    if (testing_message != "") debug_label.setText(testing_label); 
    app.add(testing_label); 

    return(app); 
} 

function populate_assign_list(e) { 
    load_script_prop_(); 

    if (e == null) subject_id=0; 
    else subject_id = e.parameter.lb_subject_folder; 

    var app = UiApp.getActiveApplication(); 
    var lb_assign_list = app.getElementById("lb_assign_list"); 
    lb_assign_list.clear(); 

    var assign_list = ["x","y","z" ]; 

    for (var i = 1; i < assign_list.length; i++) { 
    lb_assign_list.addItem(assign_list[i] ); 
    } 


    lb_assign_list.setVisible(true); 
    var spinner = app.getElementById("spinner").setVisible(false); 
    Logger.log("populate_assign_list spinner.getId():" + spinner.getId()); 
    Logger.log("populate_assign_list spinner.getType():" + spinner.getType()); 
    app.getElementById("tab_panel_upload").setVisible(true); 

    var button_submit = app.getElementById("button_submit"); 
    Logger.log("populate_assign_list button_submit.getId():"+button_submit.getId()); 
    Logger.log("populate_assign_list button_submit.getType():"+button_submit.getType()); 
    //button_submit.setEnabled(true); 

    return app; 
} 

답변

1

분할 및 정복 - 나는,이 오류를 내가 원인이었다 "분할 및 정복"추적 할 수있는 유일한 방법을 몇 번 있었다

. 내가 아는

...

원인 ...

A) 기존의 객체가 제거 된 경우에도 다른 유형의 개체에 사용되는 동일한 개체 ID. createApplication

로 두 번 오류를 응용 프로그램 객체를 생성

B) 유효하지 않은 색상 값

C)는 캐치의 종류 모든 오류 메시지로 보인다. 또한 클라이언트 측 오류로 보이므로 확실한 로깅이 도움이되지 않습니다.

+0

많은 것으로 의심됩니다. 나는 틀린/바보 같은 것을 간과하고 있었으면 좋겠다. 그리고 그것은 쉬운 수정 일 것이다. –