2014-01-10 3 views
1

У меня есть таблица с 6 столбцами адресов электронной почты, которые автоматически обновляются в зависимости от ввода пользователя и возраста. Каждый столбец соответствует отдельной группе Google.Автоматическое обновление членства в группе Google в динамическом списке адресов электронной почты в электронной таблице Google

Я хотел бы автоматически заполнить членство в Google Group на основе динамических значений в каждом столбце таблицы. Например, как при редактировании, так и в ежедневном таймере - скрипт Google будет читать список адресов электронной почты в столбце A и обновлять соответствующую группу Google.

В идеале сценарий будет вызывать текущее членство в Google Group, сравнить его со списком адресов электронной почты в столбце A, удалить из группы любые адреса, которые больше не отображаются в столбце A, и добавить в группу любые адреса, которые отображаются в столбце A, но в настоящее время не входят в группу.

Это может потребовать слишком много. В качестве альтернативы я могу представить сценарий, удаляющий всех участников из группы, а затем добавление всех адресов электронной почты в столбце A в группу. Хотя это будет достигать той же цели (насколько я вижу), я задаюсь вопросом, будет ли какая-то потерянная история или какой-то аналогичный побочный эффект для стирания всех членов на регулярной основе. Таким образом, я предпочитаю сначала использовать метод сравнения.

В форуме я могу найти эту дискуссию, с ответом от Serge INSAS: Add emailadress to Spreadsheet, auto add the email to a Google group

Когда я запускаю этот код в моем редакторе сценариев, заменив «[email protected]» с адресом электронной почты для мой Google Group, я получаю следующее сообщение об ошибке:

Service error: : Invalid request URI

со ссылкой на линию 10, которая является

var group = GroupsManager.getGroup('[email protected]'); 

Getti Прошла эта ошибка 1 проблема. После того, как я пройду эту ошибку, мне нужно узнать, как сравнить членство в Группе с списком электронных таблиц и/или удалить все и переименовать все.

Любая помощь по этим двум проблемам очень ценится!


Edit 1 (после подтверждения Mogsdad, что я не могу использовать GAS API для обновления членства в Google Group)

Итак, план Б для меня это не хак вокруг, потому что я слишком новичка, чтобы чувствовать себя комфортно там. Вместо этого Plan B должен написать сценарий, который будет сравнивать список пользователей электронных таблиц с списком пользователей группы Google и сообщить, какие пользователи необходимо вручную добавить/удалить из списка пользователей группы Google. Я адаптировал код, который вы указали, в сообщении, которое вы мне связали.

function compareGroupMembers() { 
     var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Groups'); 
     var rows = sheet.getDataRange(); 
     var values = rows.getValues(); 
     var sheetUsers = []; 
    Logger.log(values) 

    // Get user list from sheet 
     for (var i = 1; i < values.length; i++) { 
     var row = values[i]; 
     sheetUsers.push(row[0]); // build array of users 
     } 
     Logger.log(sheetUsers) 

    // Get user list from group 
     var group = GroupsApp.getGroupByEmail("[email protected]"); 
     var groupUsers = group.getUsers().join(',').split(','); 
     Logger.log(groupUsers) 

    // Compare user lists and define users to Add and Remove 
    //*****This is where I need direction. This code is just a placeholder.***** 
     var usersToAdd = sheetUsers.uniqueFrom(groupUsers); 
     var usersToRemove = groupUsers.uniqueFrom(sheetUsers); 
     var addErrors = 0; // Counter for exceptions 

    //Then I would like usersToAdd and usersToRemove to be listed in a separate sheet 
    //Because I have six groups, I'm hoping the new sheet can be organized by 
    //Col A is Google Group email 
    //Col B is user email 
    //Col C is "add" or "delete" 

    }; 

Можно ли создать выходной сигнал, который говорит мне, какие члены необходимо вручную добавить (то есть те, которые находятся в списке листов, но не в списке группы), и те, вручную удалить (т.е. тех, кто находится на список групп, но не указаны в списке листов)?

Кроме того, могу ли я иметь один и тот же скрипт для шести разных групп? (в моем листе адрес электронной почты группы находится в строке 1, а адреса электронной почты участника находятся под ним, для всех 6 столбцов). Если это возможно, то я хочу, чтобы на выходе указывалась какая группа, которую пользователь должен добавить вручную или удалены из.

Благодарим за помощь!

ответ

1

Вы должны быть в состоянии адаптировать код из How to add permission to Google site using spreadsheet?, заменив Site.getViewers, Site.addViewer() и Site.removeViewer() с DomainGroup.getAllMembers(), DomainGroup.addMember() и DomainGroup.removeMember() соответственно, а также корректировки других деталей соответствующим образом.

WRT ваша ошибка ... убедитесь, что вы не путаете типы групп. См. Domain groups versus Google groups.

+0

Привет, Могсдад, спасибо, что привлек мое внимание к различию между группами доменов и группами Google. Я имею дело с группами Google. Я сделал немного больше копания после вашего сообщения и нашел это сообщение: http://stackoverflow.com/questions/3757793/api-for-google-groups. Правда ли, что API для GOOGLE GROUPS API отсутствует? Означает ли это, что я не могу добавлять или удалять пользователей из групп Google с помощью GAS? (Я новичок, поэтому спасибо за репетиторство.) – duck

+0

Вау, большой облом :(спасибо за объяснение. Тем не менее, я обновил свое оригинальное сообщение с просьбой о помощи по более простой работе (просто хочу сравнить два списки и сообщать об уникальных значениях, чтобы я мог вручную изменить членство в Группе Google). Спасибо! – duck

+0

быстрый вопрос, так как я полагаюсь на вас за последнее слово - в онлайн-обсуждениях, похоже, указывается, что в группе классов функция getUser only возвращает адреса электронной почты с gmail.com и не возвращает никаких других (например, yahoo.com или comcast.net). Это правда? Если да, можете ли вы сказать мне, есть ли какая-то работа, которая позволила бы мне для получения ВСЕХ членов группы независимо от домена электронной почты? Спасибо! – duck

Смежные вопросы