优化重新标记代码

时间:2012-07-16 12:23:39

标签: optimization google-apps-script

我们公司最近从Exchange 2007迁移到Google Apps for Business。我们有几个共享邮箱具有相当复杂和广泛的文件夹结构,并被要求在这些邮箱中完全实现标签技术(为了优化搜索)。

e.g。比如,在迁移之后,以前在MyCompany / Projects / 2012 / Q3 / Approved Projects / StackOverflow(文件夹结构)中的对话现在具有标签MyCompany / Projects / 2012 / Q3 / Approved Projects / StackOverflow。这里的意图是此对话必须使用标签MyCompany,Projects,2012,Q3,Approved Projects,StackOverflow标记。

我编写了一个完全符合此功能的脚本(至少在我的测试环境中)。问题是,根据我所读到的,存在一些限制,涉及允许您对Google API执行的调用次数。此外,脚本执行时间非常非常差。

我想知道是否有办法以某种方式执行客户端操作并将它们批量发送到谷歌API。我已阅读有关缓存服务的信息,并想知道我是否正在寻找正确的方向。

这是我的剧本:

function addLabels() {
  //Get all labels
  var allLabels = GmailApp.getUserLabels();

  for (var i = 0; i < allLabels.length; i++) {
    var label = allLabels[i];//label to get the threads from
    var threads = label.getThreads();  //threads assigned with label
    var labels = label.getName().split("/");//array of new label names

    //add the new labels to the specified threads only if there's a "/" in the label's name
    if(label.getName().indexOf("/") != null){
      for (var a = 0; a < labels.length; a++){
        trace("Adding label '" + labels[a] + "' to "+ threads.length +" threads in '"+ label.getName() + "'.");

        //create a new label with the specified name and add it to the threads
        //var newLabel = GmailApp.createLabel(labels[a]);//comment this line for test purposes
        //newLabel.addToThreads(threads);//comment this line for test purposes
      }
    }
  }
}
function trace(message){
  Logger.log(message);
}

提前致谢!

1 个答案:

答案 0 :(得分:0)

您可能希望分阶段运行此脚本。第一阶段是确定需要创建的所有新标签以及应分配给它们的线程。第二阶段是创建这些标签。最后一步是将这些标签分配给线程。如果您正在处理大量电子邮件,则可能需要对此工作进行分区,保留剩下的工作队列,并使用触发器继续处理。