2
2
Singleton Class implements the custom field history
3
3
tracking dynamically through custom metadata configuration
4
4
*/
5
- public with sharing class FieldTrackerService {
5
+ public without sharing class FieldTrackerService {
6
6
// Static members
7
7
private static FieldTrackerService instance ;
8
8
@@ -17,60 +17,81 @@ public with sharing class FieldTrackerService {
17
17
private String objectName ;
18
18
private Set <String > fields ;
19
19
private List <Field_Tracker_Field__mdt > trackedFields ;
20
+ private Field_Tracker_Object__mdt ftObject ;
20
21
21
22
private FieldTrackerService (String objectName ) {
22
23
this .objectName = objectName ;
23
24
24
- Field_Tracker_Object__mdt ftObject = Field_Tracker_Object__mdt .getInstance (
25
- objectName
26
- );
27
- trackedFields = [
28
- SELECT Field__c , Field_Label__c
29
- FROM Field_Tracker_Field__mdt
30
- WHERE Field_Tracker_Object__c = : ftObject .Id AND Is_Active__c = TRUE
31
- ];
32
- fields = Schema .getGlobalDescribe ()
33
- .get (objectName )
34
- .getDescribe ()
35
- .fields .getMap ()
36
- .keySet ();
25
+ ftObject = Field_Tracker_Object__mdt .getInstance (objectName );
26
+
27
+ if (ftObject .Is_Active__c ) {
28
+ trackedFields = [
29
+ SELECT Field__c , Field_Label__c , Is_Long_Text__c
30
+ FROM Field_Tracker_Field__mdt
31
+ WHERE
32
+ Field_Tracker_Object__c = : ftObject .Id
33
+ AND Is_Active__c = TRUE
34
+ ];
35
+ fields = Schema .getGlobalDescribe ()
36
+ .get (objectName )
37
+ .getDescribe ()
38
+ .fields .getMap ()
39
+ .keySet ();
40
+ }
37
41
}
38
42
39
43
// OldMap should be null in case of Insert trigger.
40
44
public void saveFieldHistories (
41
45
List <SObject > records ,
42
46
Map <Id , SObject > oldMap
43
47
) {
44
- List <Field_History__c > fieldHistories = new List <Field_History__c >();
45
- Boolean isNew = oldMap == null ;
46
- for (SObject record : records ) {
47
- SObject oldRecord = oldMap ?. get (record .Id );
48
- for (Field_Tracker_Field__mdt trackedField : trackedFields ) {
49
- if (
50
- String .isNotBlank (trackedField .Field__c ) &&
51
- fields .contains (trackedField .Field__c .toLowerCase ()) &&
52
- (isNew ||
53
- oldRecord .get (trackedField .Field__c ) !=
54
- record .get (trackedField .Field__c ))
55
- ) {
56
- fieldHistories .add (
57
- new Field_History__c (
48
+ if (
49
+ ftObject != null &&
50
+ ftObject .Is_Active__c &&
51
+ trackedFields != null &&
52
+ ! trackedFields .isEmpty ()
53
+ ) {
54
+ List <Field_History__c > fieldHistories = new List <Field_History__c >();
55
+ Boolean isNew = oldMap == null ;
56
+ for (SObject record : records ) {
57
+ SObject oldRecord = oldMap ?. get (record .Id );
58
+ for (Field_Tracker_Field__mdt trackedField : trackedFields ) {
59
+ if (
60
+ String .isNotBlank (trackedField .Field__c ) &&
61
+ fields .contains (trackedField .Field__c .toLowerCase ()) &&
62
+ (isNew && record .get (trackedField .Field__c ) != null ||
63
+ ! isNew &&
64
+ oldRecord .get (trackedField .Field__c ) !=
65
+ record .get (trackedField .Field__c ))
66
+ ) {
67
+ Field_History__c history = new Field_History__c (
58
68
Tracked_Object__c = objectName ,
59
69
Tracked_Field_Label__c = trackedField .Field_Label__c ,
60
70
Tracked_Field_API__c = trackedField .Field__c ,
61
- Tracked_Record_Id__c = record .Id ,
62
- New_Value__c = String .valueOf (
71
+ Tracked_Record_Id__c = record .Id
72
+ );
73
+
74
+ if (! trackedField .Is_Long_Text__c ) {
75
+ history .New_Value__c = String .valueOf (
63
76
record .get (trackedField .Field__c )
64
- ),
65
- Old_Value__c = String .valueOf (
77
+ );
78
+ history . Old_Value__c = String .valueOf (
66
79
oldRecord ?. get (trackedField .Field__c )
67
- )
68
- )
69
- );
80
+ );
81
+ } else {
82
+ history .New_Value_Long_Text__c = String .valueOf (
83
+ record .get (trackedField .Field__c )
84
+ );
85
+ history .Old_Value_Long_Text__c = String .valueOf (
86
+ oldRecord ?. get (trackedField .Field__c )
87
+ );
88
+ history .Is_Long_Text__c = true ;
89
+ }
90
+ fieldHistories .add (history );
91
+ }
70
92
}
71
93
}
94
+ insert fieldHistories ;
72
95
}
73
-
74
- insert fieldHistories ;
75
96
}
76
97
}
0 commit comments