0

在我们的 Google Apps 组织中,我想设置一个共享联系人列表,我们公司内部的任何人都可以访问和添加/编辑联系人,以便我们拥有所有相同的信息。解决此问题的最佳方法是什么?

4

2 回答 2

1

我将在 App Engine 中创建一个应用程序,该应用程序使用 Google API 来编辑共享联系人列表。这样,您可以限制对域用户的访问,并审核正在发生的活动。有第三方工具可以编辑共享联系人列表,但这通常被锁定以避免用户删除他们不应该删除的联系人的情况。不要忘记显示在 Gmail 的预先输入中的共享联系人列表有 24 小时的延迟。

于 2015-07-24T19:56:37.390 回答
0

嘿,对于我们使用 Google 表格的任何人来说,现在任何人都可以更新表格,您可以设置自动触发器以按计划上传它们或手动将它们推送到 Google 目录中。

表格: 在此处输入图像描述

首先,我们从目录中提取所有联系人,然后您可以添加/更新/删除现有或新联系人。

然后使用菜单将它们推送到目录。

我们使设置变得超级简单,因此它可以自动获取用户信息和域等,而无需用户做任何事情

var SHEET_NAME = 'google';
var ERROR_RECIPIENT_MAIL= Session.getActiveUser().getEmail();
var DOMAIN = ERROR_RECIPIENT_MAIL.replace(/.*@/, "");

然后我们调用 Domain Shared Contacts API 来获取所有数据并放入一个数组中:

function getAllContacts(){
    var contacts = ContactsApp.getContacts();
    var lastRow = SpreadsheetApp.getActiveSpreadsheet().
                    getSheetByName(SHEET_NAME).getLastRow();

    if (lastRow >2) SpreadsheetApp.getActiveSpreadsheet().
                     getSheetByName(SHEET_NAME).deleteRows(3, lastRow*1-2);

      var contacts = ContactsApp.getContacts();
      var params = {
                     method      : "get",
                     contentType : "application/atom+xml",
                     headers     : {"Authorization": "Bearer " +
                     ScriptApp.getOAuthToken(),"GData-Version": "3.0"},
                     muteHttpExceptions  : true
                  };

      var startIndex=1;
      var data,respCode,resp;
      resp = UrlFetchApp.fetch("//www.google.com/m8/feeds/contacts/"
         +DOMAIN+"/full?alt=json&start-index="+startIndex, params);

      respCode=resp.getResponseCode();
     //SpreadsheetApp.getActiveSpreadsheet().
        // getSheetByName(SHEET_NAME).getRange("A10").setValue(resp);
      data = JSON.parse(resp.getContentText());

然后从那里将其放入工作表上的正确字段以供用户更新。然后用户从下拉菜单中选择操作,该操作在脚本运行时调用适当的函数以进行更新。

删除函数示例:

    function deleteContact(contactID,rowNumber){

  var params = {
    method      : "delete",
    contentType : "application/json",
    headers     : {"Authorization": "Bearer " + ScriptApp.getOAuthToken(),"GData-Version": "3.0","If-Match":"*"}
  };

  var resp = UrlFetchApp.fetch(contactID, params);

  var respCode=resp.getResponseCode();

  if (respCode=='201' || respCode=='200') {
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName(SHEET_NAME).deleteRow(rowNumber*1);
  }
  else{
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName(SHEET_NAME).getRange(rowNumber*1, 15, 1, 1).setValue('ERROR');
    ERROR_COUNT=ERROR_COUNT.toString()+rowNumber;
  }
}

这很酷,现在我们正在处理批量数据输入,因为它似乎在一次运行约 700 次联系后停止或停止。此外,一些联系人没有同步并出现错误,我们将尽快处理该错误以获取用户更多信息,甚至存储错过的联系人以进行修复和更新。无论如何,希望对您有所帮助并给您一些想法。

我们的位置在这里供任何有兴趣的人使用。

于 2016-06-23T04:42:31.727 回答