Name
sn_oe_sfs.CollabTeamsUserSync
Description
Synchronize collab users with Teams users.
Script
var CollabTeamsUserSync = Class.create();
CollabTeamsUserSync.prototype = {
initialize: function(providerId, pageSize) {
this.providerId = providerId;
this.pageSize = pageSize || 100;
this._usersById = {};
},
sync: function() {
var teamsUsers = {};
gs.info("Starting sync with provider: " + this.providerId);
do {
teamsUsers = this._fetchTeamUsersPage(teamsUsers.skip_token);
teamsUsers.users.forEach(this._processTeamsUserEntry, this);
gs.debug("got " + Object.keys(this._usersById).length + " users so far");
} while (teamsUsers.skip_token);
this._checkRemovedUsers();
},
//Private
_fetchTeamUsersPage: function(skipToken) {
var params = {
'page_size': this.pageSize
};
if (skipToken) {
params.skip_token = skipToken;
}
return sn_fd.FlowAPI.executeActionQuick('sn_oe_sfs.get_users', params);
},
_processTeamsUserEntry: function(user) {
gs.debug("User===> " + user.displayName);
this._usersById[user.id] = true;
var exGr = new GlideRecord("sys_cs_collab_provider_user_profile");
exGr.addQuery("provider_user_id", user.userPrincipalName);
exGr.query();
if (!exGr.next()) {
var sysUserQuery = new GlideRecord("sys_user");
var externalUser = true;
sysUserQuery.addQuery("email", user.mail);
sysUserQuery.query();
if (sysUserQuery.next()) {
externalUser = false;
}
var newCollabUser = new GlideRecord("sys_cs_collab_user");
newCollabUser.initialize();
newCollabUser.external_user = externalUser;
newCollabUser.create_external_conversation = externalUser;
if (!externalUser) {
newCollabUser.user = sysUserQuery.sys_id;
}
var newCollabUserId = newCollabUser.insert();
this._addCollabProfile(user, newCollabUserId);
gs.info("User " + user.displayName + " added");
}
},
_checkRemovedUsers: function() {
var existingExternal = new GlideRecord("sys_cs_collab_provider_user_profile");
existingExternal.addQuery("collab_user.external_user", true);
existingExternal.query();
while (existingExternal.next()) {
if (!this._usersById[existingExternal.external_user_id]) {
gs.info(existingExternal.display_name + " is no longer an external user");
existingExternal.deleteRecord();
}
}
},
_emailToUse: function(teamsUser) {
if (teamsUser.mail) {
return teamsUser.mail;
} else {
return teamsUser.userPrincipalName;
}
},
_addCollabProfile: function(teamsUser, collabUserId) {
var newGr = new GlideRecord("sys_cs_collab_provider_user_profile");
newGr.initialize();
newGr.provider_user_id = teamsUser.userPrincipalName;
newGr.display_name = teamsUser.displayName;
newGr.external_user_id = teamsUser.id;
newGr.provider = this.providerId;
newGr.active = true;
newGr.collab_user = collabUserId;
newGr.insert();
},
type: 'CollabTeamsUserSync'
};
Sys ID
dbdd2c64531e91101c1addeeff7b12d8