Ошибка при вызове из таблицы, отлично работает из меню

Поэтому я немного поработал со скриптами Google Apps, когда они были впервые выпущены, но в последнее время я мало с ними работал. Сегодня утром я решил разработать новый сценарий. Все выглядит отлично, и я люблю новые функции. Однако, одна очень простая вещь, которая работала раньше, теперь сломана (или я просто тупой).

Когда я вызываю определенную функцию из меню, она работает нормально. Но когда я звоню прямо из таблицы, я получаю:

У вас нет разрешения на вызов inputBox (строка 17)

Что странно, так это то, что я даже не вызываю inputBox. Существует ряд событий, в которых поле ввода может быть вызвано, но только если не установлена ​​конкретная переменная (глобальная), которая в данном случае установлена.

Я подумал, что, возможно, у меня только что была ошибка. Итак, я посмотрел на свои старые скрипты приложений (которые одно время точно работали). И у меня сейчас та же проблема. Так что, что бы ни изменилось, оно сломало и старые сценарии. Для полноты, я сейчас включаю мой код скрипта. Функции, которые я пытаюсь вызвать напрямую - это Pipeline и Activity:

var webhookurl = "";

var jsondata = [];

function __urlCheck_(str) {
    var v = new RegExp(); 
    v.compile("^[A-Za-z]+://[A-Za-z0-9-_]+\\.[A-Za-z0-9-_%&\?\/.=]+$");
    if (!v.test(str)) {
        return false;
    }
    return true;
}

function __getWebHook_(){
    var newwebhookurl = UserProperties.getProperty('webhookurl_HCR');
    if((newwebhookurl == null || newwebhookurl.length==0) && (webhookurl.length==0 || webhookurl==null)){
        var newwebhookurl = Browser.inputBox("Paste your web hook url here");
        var newwebhookurl = newwebhookurl.replace(/^\s*/, '').replace(/\s*$/, '');
        if('cancel' == newwebhookurl.toLowerCase()){
            Browser.msgBox('Before this connection will work, you will have to enter a webhook url.');
        }else if(newwebhookurl.length==0 || newwebhookurl == null || __urlCheck_(newwebhookurl) == false){
            Browser.msgBox('Sorry, you must specify a webhook url.');
            __getWebHook_();
        }else{
            UserProperties.setProperty('webhookurl_HCR',newwebhookurl);
            webhookurl = newwebhookurl;
        }
    }else if(webhookurl.length==0 || webhookurl==null){
        webhookurl = newwebhookurl;
    }
}


function __ClearWebHook_(){
    UserProperties.setProperty('webhookurl_HCR','');
    webhookurl = '';
    __getWebHook_();
}


function onOpen() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var menuEntries = [{name: "Pipeline", functionName: "__PipelineMenu__"}, 
                     {name: "Activity", functionName: "__ActivityMenu__"},
                     {name: "Reset WebHook", functionName: "__ClearWebHook_"}
                     ];
  ss.addMenu("Heap CRM Reports", menuEntries);

}


function onInstall(){
    onOpen();
}

function __PipelineMenu__(){
    var mydoc = SpreadsheetApp.getActiveSpreadsheet();
    var myapp = UiApp.createApplication().setTitle('Pipeline');
    var mygrid = myapp.createGrid(5, 2);
    mygrid.setWidget(0, 0, myapp.createLabel('Category:'));
    mygrid.setWidget(0, 1, myapp.createTextBox().setName('category'));
    mygrid.setWidget(1, 0, myapp.createLabel('Label:'));
    mygrid.setWidget(1, 1, myapp.createTextBox().setName('label'));
    mygrid.setWidget(2, 0, myapp.createLabel('User:'));
    mygrid.setWidget(2, 1, myapp.createTextBox().setName('user'));
    mygrid.setWidget(3, 0, myapp.createLabel('Type:'));
    var lbt = myapp.createListBox(false).setName('type');
    lbt.setVisibleItemCount(1);
    lbt.addItem('Lead');
    lbt.addItem('Opportunity');
    lbt.addItem('Customer');
    mygrid.setWidget(3, 1, lbt);
    mygrid.setWidget(4, 0, myapp.createLabel('Kind:'));
    var lbk = myapp.createListBox(false).setName('kind');
    lbk.setVisibleItemCount(1);
    lbk.addItem('Expected Value');
    lbk.addItem('Value');
    lbk.addItem('Count');
    mygrid.setWidget(4, 1, lbk);
    var panel = myapp.createVerticalPanel();
    panel.add(mygrid);
    var button = myapp.createButton('Submit');
    var handler = myapp.createServerClickHandler('__processPipeline');
    handler.addCallbackElement(mygrid);
    button.addClickHandler(handler);
    panel.add(button);
    myapp.add(panel);
    mydoc.show(myapp);
}


function __ActivityMenu__(){
    var mydoc = SpreadsheetApp.getActiveSpreadsheet();
    var myapp = UiApp.createApplication().setTitle('Activity');
    var mygrid = myapp.createGrid(7, 2);
    mygrid.setWidget(0, 0, myapp.createLabel('Category:'));
    mygrid.setWidget(0, 1, myapp.createTextBox().setName('category'));
    mygrid.setWidget(1, 0, myapp.createLabel('Label:'));
    mygrid.setWidget(1, 1, myapp.createTextBox().setName('label'));
    mygrid.setWidget(2, 0, myapp.createLabel('User:'));
    mygrid.setWidget(2, 1, myapp.createTextBox().setName('user'));
    mygrid.setWidget(3, 0, myapp.createLabel('Date:'));
    mygrid.setWidget(3, 1, myapp.createDateBox().setId('date'));
    mygrid.setWidget(4, 0, myapp.createLabel('Range:'));
    var lb = myapp.createListBox(false).setName('range');
    lb.setVisibleItemCount(1);
    lb.addItem('Week');
    lb.addItem('Month');
    lb.addItem('Year');
    mygrid.setWidget(4, 1, lb);
    mygrid.setWidget(5, 0, myapp.createLabel('Type:'));
    var lbt = myapp.createListBox(false).setName('type');
    lbt.setVisibleItemCount(1);
    lbt.addItem('Lead');
    lbt.addItem('Opportunity');
    lbt.addItem('Customer');
    mygrid.setWidget(5, 1, lbt);
    mygrid.setWidget(6, 0, myapp.createLabel('Kind:'));
    var lbk = myapp.createListBox(false).setName('kind');
    lbk.setVisibleItemCount(1);
    lbk.addItem('Expected Value');
    lbk.addItem('Value');
    lbk.addItem('Count');
    mygrid.setWidget(6, 1, lbk);
    var panel = myapp.createVerticalPanel();
    panel.add(mygrid);
    var button = myapp.createButton('Submit');
    var handler = myapp.createServerClickHandler('__processActivity');
    handler.addCallbackElement(mygrid);
    button.addClickHandler(handler);
    panel.add(button);
    myapp.add(panel);
    mydoc.show(myapp);
}


function __processActivity(inputvalues){
    var category = inputvalues.parameter.category;
    var label = inputvalues.parameter.label;
    var user = inputvalues.parameter.user;
    var date = inputvalues.parameter.date;
    var range = inputvalues.parameter.range;
    var type = inputvalues.parameter.type;
    var kind = inputvalues.parameter.kind;
    var answer = Activity(kind,type,date,range,category,user,'',label);
    var mysheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
    mysheet.getActiveCell().setValue(answer);
    var app = UiApp.getActiveApplication();
    app.close();
    return app;
}

function Activity(kind,type,date,range,category,user,mylabel,label){
    var kind = kind || '';
    var type = type || '';
    var category = category || '';
    var user = user || '';
    var mylabel = mylabel || '';
    var label = label || '';
    var range = range || '';
    var date = date || '';
    var data = __getData_('activity ' + kind,category,user,label,mylabel,date,range);
    var type = type.toLowerCase();
    if(type=='lead' && data.hasOwnProperty('lead')==true){
        return data['lead'];
    }else if(type=='customer' && data.hasOwnProperty('customer')==true){
        return data['customer'];
    }else if(type=='opportunity' && data.hasOwnProperty('opportunity')==true){
        return data['opportunity'];
    }else{
        return 0;
    }
}

function Pipeline(kind,type,category,user,mylabel,label){
    var kind = kind || '';
    var type = type || '';
    var category = category || '';
    var user = user || '';
    var mylabel = mylabel || '';
    var label = label || '';
    var data = __getData_('pipeline ' + kind,category,user,label,mylabel);
    var type = type.toLowerCase();
    if(type=='lead' && data.hasOwnProperty('lead')==true){
        return data['lead'];
    }else if(type=='customer' && data.hasOwnProperty('customer')==true){
        return data['customer'];
    }else if(type=='opportunity' && data.hasOwnProperty('opportunity')==true){
        return data['opportunity'];
    }else{
        return 0;
    }
}

function __processPipeline(inputvalues){
    var category = inputvalues.parameter.category;
    var label = inputvalues.parameter.label;
    var user = inputvalues.parameter.user;
    var type = inputvalues.parameter.type;
    var kind = inputvalues.parameter.kind;
    var answer = Pipeline(kind,type,category,user,'',label);
    var mysheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
    mysheet.getActiveCell().setValue(answer);
    var app = UiApp.getActiveApplication();
    app.close();
    return app;
} 

function __getData_(mlist,mcategory,muser,label,mlabel,mdate,mrange) {
    var addon = '';
    var mlist = mlist || '';
    var mcategory = mcategory || '';
    var muser = muser || '';
    var label = label || '';
    var mlabel = mlabel || '';
    var mdate = mdate || '';
    var mrange = mrange || '';
    if(mcategory.length>0){
        addon = addon + "&category=" + encodeURIComponent(mcategory);
    }
    if(muser.length>0){
         addon = addon + "&user=" + encodeURIComponent(muser);
    }
    if(mlabel.length>0){
         addon = addon + "&mylabel=" + encodeURIComponent(mlabel);
    }
    if(label.length>0){
        addon = addon + "&label=" + encodeURIComponent(label);
    }
    if(mdate.length>0){
         addon = addon + "&date=" + encodeURIComponent(mdate);
    }
    if(mrange.length>0){
        addon = addon + "&range=" + encodeURIComponent(mrange);
    }
    __getWebHook_();

    if(webhookurl.length==0 || webhookurl == null){
        return [];
    }
    addon = "&list=" + encodeURIComponent(mlist) + addon;
    for(i=0;i<jsondata.length;i++){
        if(jsondata[i]['addon'].toLowerCase() == addon.toLowerCase()){
            return jsondata[i]['json'];
        }
    }

    var url = webhookurl + addon;
    var response = UrlFetchApp.fetch(url);
    if (response.getResponseCode() == 200) {
        var newid = jsondata.length;
        jsondata[newid] = {};
        jsondata[newid].json = Utilities.jsonParse(response.getContentText());
        jsondata[newid].addon = addon.toLowerCase();
        return jsondata[newid].json;
    }
}

1 ответ

Решение

Это так же, как:

Нет разрешения на вызов msgBox в Google Apps Scripting

Пользовательские функции не будут делать ничего, кроме как возвращают значение ячейке, в которой они находятся, если только они не возвращают массив, который может влиять на смежные ячейки.

Пользовательская функция не может инициировать поле ввода (Browser.inputBox())

Пользовательская функция - это функция, введенная как вся или часть формулы в ячейку электронной таблицы, которая вызывает функцию из редактора сценариев.

Как вы заявили: "Раньше работал", но был отключен

Другие вопросы по тегам