Friday, October 5, 2012

Activity Type Field Overcome:

Activity Type Field Overcome:
Type field has some restrictions in salesforce activity ,To overcome this by using custom field and trigger

  1. Work in a sandbox (duh)
  2. Create a picklist field on Activity (ActivityType__c).
  3. Disable all Activity workflow rules, Chatter feeds, triggers, etc.
  4. Using DataLoader, copy values from Type to ActivityType__c.
  5. Using Field Level Security, hide Type from all profiles.  It's just not necessary.
  6. Edit/reactivate all your workflow, feeds, triggers, etc.
  7. Use/adapt the code below.
  8. Test thoroughly and deploy to production
  9. Type cannot be the controlling field for a dependent picklist.
  10. On an Event list view (/007), even when specifying record type, the Type field cannot be edited.
  11. Salesforce requires you to select a default value for this picklist, as well as a default value for inbound emails... yet when I bcc my Email-To-Salesforce address, the resulting tasks have no Type value.
public with sharing class ActivityHelper {
 
    public static void UpdateEventType(Event[] events){
        for (Event e : events){
            if(e.ActivityType__c == '' || e.ActivityType__c == null){
                if(e.Subject.contains('Email'))
                    e.ActivityType__c = 'Email';
                else if(e.Subject.contains('Call'))
                    e.ActivityType__c = 'Call';
                else if (e.Subject.contains('Meet') || e.Subject.contains('Webinar'))
                    e.ActivityType__c = 'Meeting';
            }
        }
    }
     
    public static void UpdateTaskType(Task[] tasks){
        for (Task t : tasks){
            if(t.ActivityType__c == '' || t.ActivityType__c == null){
                if(t.Subject.contains('Email ') || t.Subject.contains('Email:'))
                    t.ActivityType__c = 'Email';
                else if(t.Subject.contains('Call'))
                    t.ActivityType__c = 'Call';
                else if (t.Subject.contains('Meet') || t.Subject.contains('Webinar'))
                    t.ActivityType__c = 'Meeting';
            }
        }
    }
     
    private static Event newTestEvent(string subject){
        Event e = new Event();
        e.Subject = subject;
        e.startdatetime = datetime.now();
        e.DurationInMinutes = 60;
        e.ActivityType__c = ''; // To account for default value.
        return e;
    }
 
    private static Task newTestTask(string subject){
        Task t = new Task();
        t.Subject = subject;
        t.Priority = 'Medium';
        t.Status = 'New';
        t.ActivityType__c = ''; // To account for default value.
        return t;
    }  
 
    static TestMethod void TestEvents(){
        test.starttest();
        List<Event> ourevents = new List<Event>();
        ourevents.add(newTestEvent('e1'));
        ourevents.add(newTestEvent('Email: Thank you'));
        ourevents.add(newTestEvent('Call: (212) 555-1212'));
        ourevents.add(newTestEvent('Webinar tomorrow'));
        ourevents.add(newTestEvent('Meet Jack'));
        ourevents.add(newTestEvent('Sales time'));
        insert ourevents;
        update ourevents;
        for (Event e : [SELECT id, Type from Event WHERE id in :ourEvents]){
            system.debug('EVENT TYPE: ' + e.ActivityType__c);
        }
        test.stoptest();
    }
     
    static TestMethod void TestTasks(){
        test.starttest();
        List<Task> ourTasks = new List<Task>();
        ourTasks.add(newTestTask('e1'));
        ourTasks.add(newTestTask('Email: Thank you'));
        ourTasks.add(newTestTask('Call: (212) 555-1212'));
        ourTasks.add(newTestTask('Webinar tomorrow'));
        ourTasks.add(newTestTask('Meet Jack'));
        ourTasks.add(newTestTask('Sales time'));
        insert ourTasks;
        update ourTasks;
        for (Task t : [SELECT id, Type from Task WHERE id in :ourTasks]){
            system.debug('TASK TYPE: ' + t.ActivityType__c);
        }
        test.stoptest();
    }
     
    static testMethod void IndividualActivityTest() {
      Event e = newTestEvent('e1');
      Task t = newTestTask('t1');
      test.starttest();
      insert e;
      insert t;
      e.subject = 'Meeting';
      update e;
      e.subject = 'Call: Geoff Peterson';
      update e;
      e.subject = 'Email: Here we go';
      update e;
      e.subject = 'Webinar';
      update e;
      t.subject = 'Meeting';
      update t;
      t.subject = 'Call';
      update t;
      t.subject = 'Email';
      update t;
      t.subject = 'Webinar';
      update t;
      test.stoptest();
    }
}

trigger EventTrigger on Event (before insert, before update) {
     ActivityHelper.UpdateEventType(Trigger.new);
}

trigger TaskTrigger on Task (before insert, before update) {
     ActivityHelper.UpdateTaskType(Trigger.new);
}

No comments:

Post a Comment