繁体   English   中英

如何在此Google Apps脚本中更改执行流程和函数调用?

[英]How to change the flow of execution and function call in this Google Apps Script?

我有一个主要函数generatePersonDatasheet(theses) ,还有一个处理程序函数submit(e) (该处理程序在另一个名为showList()函数中)。 在main函数中,我可以这样调用处理程序函数:

  if (theses == 1){
    Logger.log("going to showList() ");
    return showList();

如果我放弃去return于行return showList(); showList()的用户界面会在不到一秒钟的时间内打开和关闭,不允许用户选择项目。 如果我把这个return放在句柄函数submit(e)关闭之后,则我的主函数中的代码不会在if块之后的下一行运行:

  if (theses == 1){
    Logger.log("going to showList() ");
    return showList();
  }     
  showURL(docName, link); //  Shows document name and link in UI

我该如何解决? 我如何让主函数在if (theses == 1)块之后运行其行? 我不想重复处理程序函数中的代码,因为它比showURL(docName, link);行大showURL(docName, link); 在上面的示例中。

这就是所谓的函数:

 var fact_list = [ ["Kennedy Inauguration", "politics", "tZwnNdFNkNklYc3pVUzZINUV4eUtWVWFSVEf"], ["Pericles’ Funeral Oration", "politics", "sdgrewaNkNklYc3pVUzZINUV4eUtW345ufaZ"], ["The Pleasure of Books", "culture", "1234rFszdgrfYc3pVUzZINUV4eU43usacd"], ["I Am The First Accused (Nelson Mandela)", "law", "34rsgadOsidjSZIswjadi95uydnfklsdks"] ];

function showList() {
    Logger.log("running showList "); 
    var mydoc = SpreadsheetApp.getActiveSpreadsheet();
    var app = UiApp.createApplication();
    var panel = app.createVerticalPanel().setId('panel');
    // Store the number of items in the array (fact_list)
  Logger.log("fact_list.length " + fact_list.length);
    panel.add(app.createHidden('checkbox_total', fact_list.length));
    // add 1 checkbox + 1 hidden field per item 
    for(var i = 0; i < fact_list.length; i++){
      Logger.log("checkbox_isChecked_"+i + " = " + fact_list[i][0]);
      Logger.log("checkbox_value_"+i + " = " + fact_list[i]);
      var checkbox = app.createCheckBox().setName('checkbox_isChecked_'+i).setText(fact_list[i][0]);
      var hidden = app.createHidden('checkbox_value_'+i, fact_list[i]);
      panel.add(checkbox).add(hidden);
    }
    var handler = app.createServerHandler('submit').addCallbackElement(panel);
    panel.add(app.createButton('Submit', handler));
    app.add(panel);
    mydoc.show(app);
}

function submit(e){
  Logger.log("running submit(e)"); 
  var numberOfItems = e.parameter.checkbox_total;
  var itemsSelected = [];
  // for each item, if it is checked / selected, add it to itemsSelected
  for(var i = 0; i < numberOfItems; i++){
    if(e.parameter['checkbox_isChecked_'+i] == 'true'){
      itemsSelected.push(e.parameter['checkbox_value_'+i]);
    }
  }
  var app = UiApp.getActiveApplication();

  Logger.log("itemsSelected = " + itemsSelected);

  ScriptProperties.setProperties({'theses': itemsSelected}, true); 


  var thesesArrays = ScriptProperties.getProperty('theses');
  Logger.log("thesesArrays = " + thesesArrays);// to see targetDoc's content
  for (var i = 0; i < thesesArrays.lenght; i++){
       var thesesId = ScriptProperties.getProperty('theses')[i][2];
       var thesesType = ScriptProperties.getProperty('theses')[i][1];
       importTheses(target, thesesId, thesesType);
} 

  app.close();
  return app;
}


function importTheses(targetDocId, thesesId, thesesType) { // adapted from Serge insas
  Logger.log("running importTheses() ");
  var targetDoc = DocumentApp.openById(targetDocId);
  var targetDocParagraphs = targetDoc.getParagraphs();
  var targetDocElements = targetDocParagraphs.getNumChildren();

  var thesesDoc = DocumentApp.openById(thesesId);
  var thesesParagraphs = thesesDoc.getParagraphs();
  var thesesElements = thesesDoc.getNumChildren();

  var eltargetDoc=[];
  var elTheses=[];

  for( var j = 0; j < targetDocElements; ++j ) {
       var targetDocElement = targetDoc.getChild(j);
//     Logger.log(j + " : " + type);// to see targetDoc's content
       eltargetDoc[j]=targetDocElement.getText();
       if(el[j]== thesesType){
           for( var k = 0; k < thesesParagraphs-1; ++k ) {
               var thesesElement = thesesDoc.getChild(k);
               elTheses[k] = thesesDoc.getText();
               targetDoc.insertParagraph(j, elTheses[k]);
         }
      }
   }
}

请看一下这个麻烦,难道不是更容易吗?

(检查日志以确认调用了最后一个函数)

注意:我不再使用scriptProperties ,因为在您的示例中factList是全局变量,因此不再需要...并且我简化了该测试的importTheses函数,因为我没有文档可使用;-)

var fact_list = [["Kennedy Inauguration", "politics", "tZwnNdFNkNklYc3pVUzZINUV4eUtWVWFSVEf"], ["Pericles Funeral Oration", "politics", "sdgrewaNkNklYc3pVUzZINUV4eUtW345ufaZ"], ["The Pleasure of Books", "culture", "1234rFszdgrfYc3pVUzZINUV4eU43usacd"], ["I Am The First Accused (Nelson Mandela)", "law", "34rsgadOsidjSZIswjadi95uydnfklsdks"]];

function showList() {
    var mydoc = SpreadsheetApp.getActiveSpreadsheet();
    var app = UiApp.createApplication();
    var panel = app.createVerticalPanel().setId('panel');
    // Store the number of items in the array (fact_list)
    panel.add(app.createHidden('checkbox_total', fact_list.length));
    // add 1 checkbox + 1 hidden field per item 
    for(var i = 0; i < fact_list.length; i++){
      var checkbox = app.createCheckBox().setName('checkbox_isChecked_'+i).setText(fact_list[i][0]);
      panel.add(checkbox);
    }
    var handler = app.createServerHandler('submit').addCallbackElement(panel);
    panel.add(app.createButton('Submit', handler));
    app.add(panel);
    mydoc.show(app);
}

function submit(e){
  var numberOfItems = Number(e.parameter.checkbox_total);
  var thesesArrays = [];
  for(var i = 0; i < numberOfItems; i++){
    if(e.parameter['checkbox_isChecked_'+i] == 'true'){
      thesesArrays.push(fact_list[i]);
    }
  }
  Logger.log(thesesArrays);
  var target = 'target doc';
  for (var i = 0; i < thesesArrays.length; i++){
    var thesesId = thesesArrays[i][2];
    var thesesType = thesesArrays[i][1];
    importTheses(target, thesesId, thesesType);
  }
  //  showURL(docName, link); /
  return UiApp.getActiveApplication().close();
}


function importTheses(targetDocId, thesesId, thesesType) { // adapted from Serge insas
  Logger.log(targetDocId+'  '+thesesId+'  '+thesesType);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM