Reputation: 31
Having trouble using AdminDirectory API. The samples at https://developers.google.com/apps-script/advanced/admin-sdk-directory all work. When I try to use other AdminDirectory.Group or AdminDirectory.Members function not in the examples, I get the Resource Not Found errors telling me the email of the group or the email of the member is not being found. In the example below I list all groups by calling the function listAllGroups(), it calls listGroupMembers(), which does also work. No error of Resource Not Found: is returned on the group or member email value passed.
In the example below if I just call directly listGroupMembers() passing a single Group email string, I get the error "Resource Not Found: grpEmail". SO for me listGroupMembers() only works if I call it from listAllGroups(). Very strange!! As I type this, it just seems I am geting the email value string wrong.
In further reading, I found the function AdminDirectory.Members.list() does not return the full list of member object values, but AdminDirectory.Members.get() does so if I try to modify the function listGroupMembers() to also include the function AdminDirectory.Members.get(), then I always get the Resource Not Found: error on the AdminDirectory.Members.get() function but not with AdminDirectory.Members.list(). I am getting the member.email[] value from AdminDirectory.Members.list() function so the values being passed to AdminDirectory.Members.get() should be correct.
The only thought I have is it is an issue with the domain string. In my environment, I have a subdomain defined. I was thinking that when using the AdminDirectory.Members.(remove|get|update) the domain is not correct, but haven't found any documentation referencing setting the domain string when calling AdminDirectory.Members.
var domains ['example.org', 'app.example.org'];
function listAllGroups() {
var pageToken;
var page;
for (var x = 0; x < domains.length; x++){
do {
page = AdminDirectory.Groups.list({
domain: domains[x],
maxResults: 100,
pageToken: pageToken
});
var groups = page.groups;
if (groups) {
for (var i = 0; i < groups.length; i++) {
var group = groups[i];
//Logger.log(',%s,%s', group.name, group.email);
listGroupMembers(group.name,group.email);
}
} else {
Logger.log('No groups found.');
}
pageToken = page.nextPageToken;
} while (pageToken);
}
}
function listGroupMembers(grpName, grpEmail) {
var pageToken;
var page;
var allMembers = []
do {
page = AdminDirectory.Members.list(grpEmail,{
includeDerivedMembership: true,
maxResults: 100,
pageToken: pageToken
});
var members = page.members;
if (members) {
for (var i = 0; i < members.length; i++) {
// var member = AdminDirectory.Members.get(grpEmail,members[i].email)
var member = members[i];
allMembers.push(member);
}
} else {
Logger.log('No members found.');
}
pageToken = page.nextPageToken;
} while (pageToken);
return allMembers;
}
Upvotes: 0
Views: 1695
Reputation: 31
Turns out the line "includeDerivedMembership: true," was adding derived members which are not valid in AdminDirectory.Members.get(). Once this was removed the Resource Not Found error went away.
function listGroupMembers(grpName, grpEmail) {
var pageToken;
var page;
var allMembers = []
do {
page = AdminDirectory.Members.list(grpEmail,{
//includeDerivedMembership: true,
maxResults: 100,
pageToken: pageToken
});
var members = page.members;
if (members) {
for (var i = 0; i < members.length; i++) {
var memberResource = AdminDirectory.Members.get(grpEmail,members[i].email)
allMembers.push(memberResource);
}
} else {
Logger.log('No members found.');
}
pageToken = page.nextPageToken;
} while (pageToken);
return allMembers;
}
As a failsafe I added:
try {
var memberResource = AdminDirectory.Members.get(grpEmail,member.email);
} catch(err) {//incase there is an error
var mem = AdminDirectory.Members.insert(member,grpEmail);
memberResource = AdminDirectory.Members.get(grpEmail,mem.email);
}
Upvotes: 1
Reputation: 26796
is the error you will get if you call the function listGroupMembers
with the wrong parameter or with the wrong number of parameters.
Scenario:
Within function listAllGroups()
you call listGroupMembers(group.name,group.email)
, passing it two parameters (one of which, group.name
, is not necessary).
Now, if you define a function function listGroupMembers(grpEmail)
that expects only one parameter, but call it with two parameters - it will assume that the first parameter is group.email
. Shall it not be the case - the function will fail with error Resource Not Found: groupKey
.
Troubleshooting
Log group.email
at the beginning of function listGroupMembers
to understand which is the wrong parameter it receives.
Upvotes: 0