View difference between Paste ID: CRYNFQ9P and 9ku6xDgW
SHOW: | | - or go back to the newest paste.
1
/*
2
 * @see https://success.salesforce.com/answers?id=90630000000hdCVAAY
3
 */
4
trigger LaatsteCallMobileMiles on Task (after insert) {
5
6
    // Retrieve the email addresses of CreatedBy users for tasks currently
7
    // being processed by the trigger
8
9
    List<Task> newTasks = [
10
        SELECT Id, WhatId, Subject, CreatedDate, CreatedBy.Email
11
        FROM Task
12
        WHERE Id IN :Trigger.new
13
    ];
14
15-
    // Initialize a map of accounts to update, based on the Related To
15+
    // Initialize a map of qualyfing tasks, keyed on the Related To (WhatId)
16-
    // (WhatId) field on the task. The map will be keyed on the Account ID,
16+
    // field on the task. This will be used later to pull in Task.CreatedDate
17-
    // to make sure the same account is not included twice in a single DML
17+
    // when updating accounts
18-
    // operation.
18+
19
    Map<Id, Task> qualifyingTasksByWhatId = new Map<Id, Task>();
20-
    Map<Id, Account> affectedAccountsById = new Map<Id, Account>();
20+
21
    // Go through the new tasks and check to see whether the task qualifies
22-
    // Go through the new tasks and check to see whether the account shoudl
22+
    // based on the email address and subject criteria
23-
    // be updated, based on the email address and subject criteria
23+
24
    for (Task eachTask : newTasks) {
25
        if (eachTask.WhatId != null) {
26
            if (eachTask.CreatedBy.Email.contains('@mobilemiles.nl') 
27
                && eachTask.Subject.contains('Made call to')) {
28
29
                // Put the qualifying task in the map
30-
                // Construct the Account record to update
30+
31
                qualifyingTasksByWhatId.put(eachTask.WhatId, eachTask);
32-
                Account affectedAccount = new Account(
32+
33-
                    Id = eachTask.WhatId,
33+
34-
                    Laatste_activiteit_Mobile_Miles__c = eachTask.CreatedDate);
34+
35
36-
                // Put the affected account in the map
36+
    // Look for accounts that were affected, by querying the account object.
37
    // This avoids situations where the task is not related to an account but
38-
                affectedAccountsById.put(affectedAccount.Id, affectedAccount);
38+
    // to some other type of record in the system.
39
40
    List<Account> affectedAccounts = [
41
        SELECT Id 
42
        FROM Account 
43
        WHERE Id IN :qualifyingTasksByWhatId.keySet()
44
    ];
45-
    if (!affectedAccountsById.isEmpty())
45+
46-
        update affectedAccountsById.values();
46+
47
48
    if (affectedAccounts.size() > 0) {
49
        for (Account eachAccount : affectedAccounts) {
50
            eachAccount.Laatste_activiteit_Mobile_Miles__c =
51
                qualifyingTasksByWhatId.get(eachAccount.Id).CreatedDate;
52
        }
53
54
        update affectedAccounts;
55
    }
56
}