在我们的 Google Apps 组织中,我想设置一个共享联系人列表,我们公司内部的任何人都可以访问和添加/编辑联系人,以便我们拥有所有相同的信息。解决此问题的最佳方法是什么?
2 回答
我将在 App Engine 中创建一个应用程序,该应用程序使用 Google API 来编辑共享联系人列表。这样,您可以限制对域用户的访问,并审核正在发生的活动。有第三方工具可以编辑共享联系人列表,但这通常被锁定以避免用户删除他们不应该删除的联系人的情况。不要忘记显示在 Gmail 的预先输入中的共享联系人列表有 24 小时的延迟。
嘿,对于我们使用 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 次联系后停止或停止。此外,一些联系人没有同步并出现错误,我们将尽快处理该错误以获取用户更多信息,甚至存储错过的联系人以进行修复和更新。无论如何,希望对您有所帮助并给您一些想法。
我们的位置在这里供任何有兴趣的人使用。