Skip to content

Instantly share code, notes, and snippets.

@tstachl
Last active November 21, 2016 19:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tstachl/653996131301656e3f53 to your computer and use it in GitHub Desktop.
Save tstachl/653996131301656e3f53 to your computer and use it in GitHub Desktop.
global class FetchGroupsAndUsers implements Schedulable, Database.Batchable<DeskResource>, Database.AllowsCallouts
{
public static String CRON_EXPRESSION = '0 0 0 * * ? *';
global static final DeskClient DESK_CLIENT = new DeskClient(new Map<String, String>{
'username' => 'support@example.com',
'password' => 'somepassword',
'subdomain' => 'devel'
});
global Iterable<DeskResource> start(Database.BatchableContext ctx)
{
return DESK_CLIENT.getResource('groups').getEntries();
}
global void execute(Database.BatchableContext ctx, List<DeskResource> scope)
{
Map<String, User> userMap = new Map<String, User>();
for (User u : [Select Email From User]) {
userMap.put(u.Email, u);
}
List<User> users = new List<User>();
for (DeskResource res : scope) {
for (DeskResource usr : res.getResource('users').getEntries()) {
User u = userMap.get((String)usr.get('email'));
if (u != null /* && (u.DeskGroupId__c != res.getHref() || u.DeskUserId__c != usr.getHref()) */){
/*
u.DeskGroupId__c = g.getHref();
u.DeskUserId__c = usr.getHref();
users.add(u);
*/
}
}
}
if (users.size() > 0) update(users);
}
global void execute(SchedulableContext ctx)
{
FetchGroupsAndUsers batch = new FetchGroupsAndUsers();
// set batch size to five so we don't have problems with callouts
Database.executeBatch(batch, 5);
}
global void finish(Database.BatchableContext ctx)
{}
global String schedule() { return schedule('fetchGroupsAndUsers'); }
global String schedule(String jobName)
{
return System.schedule(jobName, FetchGroupsAndUsers.CRON_EXPRESSION, new FetchGroupsAndUsers());
}
global static void updateDeskCase(Integer deskCaseNumber, String deskGroupId, String deskUserId)
{
updateDeskCase(String.valueOf(deskCaseNumber), deskGroupId, deskUserId);
}
@future(callout=true)
global static void updateDeskCase(String deskCaseNumber, String deskGroupId, String deskUserId)
{
DESK_CLIENT.getResource('users').find(deskCaseNumber).patch(new Map<String, Object>{
'_links' => new Map<String, Object>{
'assigned_user' => new Map<String, Object>{
'href' => deskUserId
},
'assigned_group' => new Map<String, Object>{
'href' => deskGroupId
}
}
});
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment