Extracting Values from a Delimited File Part Deux
Since working on this Trigger last I've been reading a lot about Trigger best practice.
I particularly like the requirement of having a single Trigger per Object in Production environments and will move to this model over time.
With that set, here is v2 of this trigger.
I particularly like the requirement of having a single Trigger per Object in Production environments and will move to this model over time.
With that set, here is v2 of this trigger.
trigger TaggedState on NVMStatsSF__NVM_Agent_Summary__c (before insert, before update) {
NVMStatsSF__NVM_Agent_Summary__c[] agentSummaries = Trigger.new;
TaggedState.applyCustomStates(agentSummaries);
}
and the class that now contains all of the logic:
public class TaggedState {
public static void applyCustomStates(NVMStatsSF__NVM_Agent_Summary__c[] agentSummaries) {
final String CHKSTR_END_CHAR_REGEX = '\\|';
List<String> customStates = new List<String>();
//Set up the CustomState variables
String customState1 = 'Administration';
String customState2 = 'Desk Work';
String customState3 = 'Assigned Task';
String customState4 = 'Feedback';
String customState5 = 'Working Email';
String customState6 = 'Escalation';
//Set up MinorState variables
String minorState1 = 'Break';
String minorState2 = 'Comfort Break';
String minorState3 = 'Lunch';
String minorState4 = 'Team Meeting';
String minorState5 = 'Training';
for (NVMStatsSF__NVM_Agent_Summary__c b :agentSummaries){
String keyString = b.NVMStatsSF__Key_Event_String__c;
//No processing if the Key Events String is empty
if (keyString != null ) {
//We need to replace Custom State 320 etc with acual values
b.NVMStatsSF__Key_Event_String__c = b.NVMStatsSF__Key_Event_String__c.replaceAll('Custom State 320', customState1);
b.NVMStatsSF__Key_Event_String__c = b.NVMStatsSF__Key_Event_String__c.replaceAll('Custom State 321', customState2);
b.NVMStatsSF__Key_Event_String__c = b.NVMStatsSF__Key_Event_String__c.replaceAll('Custom State 322', customState3);
b.NVMStatsSF__Key_Event_String__c = b.NVMStatsSF__Key_Event_String__c.replaceAll('Custom State 324', customState4);
b.NVMStatsSF__Key_Event_String__c = b.NVMStatsSF__Key_Event_String__c.replaceAll('Custom State 325', customState5);
b.NVMStatsSF__Key_Event_String__c = b.NVMStatsSF__Key_Event_String__c.replaceAll('Custom State 326', customState6);
//First lets check for each of the Custom States in the Key Event String:
Boolean cState1 = keyString.contains(customState1);
Boolean cState2 = keyString.contains(customState2);
Boolean cState3 = keyString.contains(customState3);
Boolean cState4 = keyString.contains(customState4);
Boolean cState5 = keyString.contains(customState5);
Boolean cState6 = keyString.contains(customState6);
//Then search for the standard values:
Boolean mState1 = keyString.contains(minorState1);
Boolean mState2 = keyString.contains(minorState2);
Boolean mState3 = keyString.contains(minorState3);
Boolean mState4 = keyString.contains(minorState4);
Boolean mState5 = keyString.contains(minorState5);
//Blank the values on the Custom States if no matches
if (!cState1) { b.Custom_State_1__c = 0; }
if (!cState2) { b.Custom_State_2__c = 0; }
if (!cState3) { b.Custom_State_3__c = 0; }
if (!cState4) { b.Custom_State_4__c = 0; }
if (!cState5) { b.Custom_State_5__c = 0; }
if (!cState6) { b.Custom_State_6__c = 0; }
//Blank values on Minor State fields
if (!mState1) { b.Break__c = 0; }
if (!mState2) { b.Comfort_Break__c = 0; }
if (!mState3) { b.Lunch__c = 0; }
if (!mState4) { b.Training__c = 0; }
if (!mState5) { b.Team_Meeting__c = 0; }
//After initial checks split the string by the pipe character
customStates = (''+b.NVMStatsSF__Key_Event_String__c).split(CHKSTR_END_CHAR_REGEX);
String cs1tempValue;
Integer cs1value;
Integer cs1FinalValue;
Integer cState1Value;
String cs2tempValue;
Integer cs2value;
Integer cs2FinalValue;
Integer cState2Value;
String cs3tempValue;
Integer cs3value;
Integer cs3FinalValue;
Integer cState3Value;
String cs4tempValue;
Integer cs4value;
Integer cs4FinalValue;
Integer cState4Value;
String cs5tempValue;
Integer cs5value;
Integer cs5FinalValue;
Integer cState5Value;
String cs6tempValue;
Integer cs6value;
Integer cs6FinalValue;
Integer cState6Value;
String ms1tempValue;
Integer ms1value;
Integer ms1FinalValue;
Integer mState1Value;
String ms2tempValue;
Integer ms2value;
Integer ms2FinalValue;
Integer mState2Value;
String ms3tempValue;
Integer ms3value;
Integer ms3FinalValue;
Integer mState3Value;
String ms4tempValue;
Integer ms4value;
Integer ms4FinalValue;
Integer mState4Value;
String ms5tempValue;
Integer ms5value;
Integer ms5FinalValue;
Integer mState5Value;
for (Integer i = 0; i < customStates.size(); i++) {
//Inner loop addding up values
/* Start of each CustomState */
Boolean i1 = customStates[i].contains(customState1);
if (i1) {
cs1tempValue = customStates[i].right(5);
cs1tempValue = cs1tempValue.replaceAll('[^0-9.]', '');
cs1value = integer.valueOf(cs1tempValue);
system.debug('value is ' + cs1value + ' second value is ' + cs1FinalValue);
if (cs1FinalValue == null){
cs1FinalValue = cs1value;
}
else if (cs1FinalValue != null) {
cs1FinalValue = cs1FinalValue + cs1value;
}
}
/* End of each CustomState */
/* Start of each CustomState */
Boolean i2 = customStates[i].contains(customState2);
if (i2) {
cs2tempValue = customStates[i].right(5);
cs2tempValue = cs2tempValue.replaceAll('[^0-9.]', '');
cs2value = integer.valueOf(cs2tempValue);
system.debug('value is ' + cs2value + ' second value is ' + cs2FinalValue);
if (cs2FinalValue == null){
cs2FinalValue = cs2value;
}
else if (cs2FinalValue != null) {
cs2FinalValue = cs2FinalValue + cs2value;
}
}
/* End of each CustomState */
/* Start of each CustomState */
Boolean i3 = customStates[i].contains(customState3);
if (i3) {
cs3tempValue = customStates[i].right(5);
cs3tempValue = cs3tempValue.replaceAll('[^0-9.]', '');
cs3value = integer.valueOf(cs3tempValue);
system.debug('value is ' + cs3value + ' second value is ' + cs3FinalValue);
if (cs3FinalValue == null){
cs3FinalValue = cs3value;
}
else if (cs3FinalValue != null) {
cs3FinalValue = cs3FinalValue + cs3value;
}
}
/* End of each CustomState */
/* Start of each CustomState */
Boolean i4 = customStates[i].contains(customState4);
if (i4) {
cs4tempValue = customStates[i].right(5);
cs4tempValue = cs4tempValue.replaceAll('[^0-9.]', '');
cs4value = integer.valueOf(cs4tempValue);
system.debug('value is ' + cs4value + ' second value is ' + cs4FinalValue);
if (cs4FinalValue == null){
cs4FinalValue = cs4value;
}
else if (cs4FinalValue != null) {
cs4FinalValue = cs4FinalValue + cs4value;
}
}
/* End of each CustomState */
/* Start of each CustomState */
Boolean i5 = customStates[i].contains(customState5);
if (i5) {
cs5tempValue = customStates[i].right(5);
cs5tempValue = cs5tempValue.replaceAll('[^0-9.]', '');
cs5value = integer.valueOf(cs5tempValue);
system.debug('value is ' + cs5value + ' second value is ' + cs5FinalValue);
if (cs5FinalValue == null){
cs5FinalValue = cs5value;
}
else if (cs5FinalValue != null) {
cs5FinalValue = cs5FinalValue + cs5value;
}
}
/* End of each CustomState */
/* Start of each CustomState */
Boolean i6 = customStates[i].contains(customState6);
if (i6) {
cs6tempValue = customStates[i].right(5);
cs6tempValue = cs6tempValue.replaceAll('[^0-9.]', '');
cs6value = integer.valueOf(cs6tempValue);
system.debug('value is ' + cs6value + ' second value is ' + cs6FinalValue);
if (cs6FinalValue == null){
cs6FinalValue = cs6value;
}
else if (cs6FinalValue != null) {
cs6FinalValue = cs6FinalValue + cs6value;
}
}
/* End of each CustomState */
/* Start of each MinorState */
Boolean m1 = customStates[i].contains(minorState1);
if (m1) {
ms1tempValue = customStates[i].right(5);
ms1tempValue = ms1tempValue.replaceAll('[^0-9.]', '');
ms1value = integer.valueOf(ms1tempValue);
system.debug('value is ' + ms1value + ' second value is ' + ms1FinalValue);
if (ms1FinalValue == null){
ms1FinalValue = ms1value;
}
else if (ms1FinalValue != null) {
ms1FinalValue = ms1FinalValue + ms1value;
}
}
/* End of each MinorState */
/* Start of each MinorState */
Boolean m2 = customStates[i].contains(minorState2);
if (m2) {
ms2tempValue = customStates[i].right(5);
ms2tempValue = ms2tempValue.replaceAll('[^0-9.]', '');
ms2value = integer.valueOf(ms2tempValue);
system.debug('value is ' + ms2value + ' second value is ' + ms2FinalValue);
if (ms2FinalValue == null){
ms2FinalValue = ms2value;
}
else if (ms2FinalValue != null) {
ms2FinalValue = ms2FinalValue + ms2value;
}
}
/* End of each MinorState */
/* Start of each MinorState */
Boolean m3 = customStates[i].contains(minorState3);
if (m3) {
ms3tempValue = customStates[i].right(5);
ms3tempValue = ms3tempValue.replaceAll('[^0-9.]', '');
ms3value = integer.valueOf(ms3tempValue);
system.debug('value is ' + ms3value + ' second value is ' + ms3FinalValue);
if (ms3FinalValue == null){
ms3FinalValue = ms3value;
}
else if (ms3FinalValue != null) {
ms3FinalValue = ms3FinalValue + ms3value;
}
}
/* End of each MinorState */
/* Start of each MinorState */
Boolean m4 = customStates[i].contains(minorState4);
if (m4) {
ms4tempValue = customStates[i].right(5);
ms4tempValue = ms4tempValue.replaceAll('[^0-9.]', '');
ms4value = integer.valueOf(ms4tempValue);
system.debug('value is ' + ms4value + ' second value is ' + ms4FinalValue);
if (ms4FinalValue == null){
ms4FinalValue = ms4value;
}
else if (ms4FinalValue != null) {
ms4FinalValue = ms4FinalValue + ms4value;
}
}
/* End of each MinorState */
/* Start of each MinorState */
Boolean m5 = customStates[i].contains(minorState5);
if (m5) {
ms5tempValue = customStates[i].right(5);
ms5tempValue = ms5tempValue.replaceAll('[^0-9.]', '');
ms5value = integer.valueOf(ms5tempValue);
system.debug('value is ' + ms5value + ' second value is ' + ms5FinalValue);
if (ms5FinalValue == null){
ms5FinalValue = ms5value;
}
else if (ms5FinalValue != null) {
ms5FinalValue = ms5FinalValue + ms5value;
}
}
/* End of each MinorState */
} //end for loop
//Time to set Custom State fields
b.Custom_State_1__c = cs1FinalValue;
b.Custom_State_2__c = cs2FinalValue;
b.Custom_State_3__c = cs3FinalValue;
b.Custom_State_4__c = cs4FinalValue;
b.Custom_State_5__c = cs5FinalValue;
b.Custom_State_6__c = cs6FinalValue;
//Minor State fields
b.Break__c = ms1FinalValue;
b.Comfort_Break__c = ms2FinalValue;
b.Lunch__c = ms3FinalValue;
b.Training__c = ms4FinalValue;
b.Team_Meeting__c = ms5FinalValue;
}
} // end of loop
}
}
and finally the test class:
@IsTest
public class TestTaggedCustomState {
static testMethod void insertNewAgentSummary() {
List<NVMStatsSF__NVM_Agent_Summary__c> summaryToCreate = new List<NVMStatsSF__NVM_Agent_Summary__c>();
//Populate fields
//Insert 5 with Custom States
for (Integer i = 0; i < 5; i++) {
NVMStatsSF__NVM_Agent_Summary__c s = new NVMStatsSF__NVM_Agent_Summary__c();
String TEST_STRING = '53344Custom State 320:20|53344Custom State 321:21|53344Custom State 322:22|53344Custom State 323:23|53344Custom State 324:24|53344Custom State 325:25|53344Custom State 326:26| 53344TComfort Break 320:20| 53344Lunch 320:20';
s.NVMStatsSF__Key_Event_String__c = TEST_STRING;
s.NVMStatsSF__dateAgentId__c = 'a9918237aaaa' + i;
s.NVMStatsSF__AgentID__c = '123a' + i;
summaryToCreate.add(s);
}
try {
//Insert the record
System.debug('summaryToCreate is ' + summaryToCreate.size());
insert summaryToCreate;
} catch (DmlException e) {
//
for (Integer i = 0; i < e.getNumDml(); i++) {
// Process exception here
System.debug(e.getDmlMessage(i));
}
}
//Check all records were inserted
Integer i = 0;
for (NVMStatsSF__NVM_Agent_Summary__c tmp : [SELECT Comfort_Break__c, Lunch__c, Training__c, Team_Meeting__c, Custom_State_1__c, Custom_State_2__c, Custom_State_3__c, Custom_State_4__c, Custom_State_5__c, Custom_State_6__c, CreatedDate FROM NVMStatsSF__NVM_Agent_Summary__c ORDER By CreatedDate DESC]) {
i++;
System.debug(i);
}
System.debug('Records returned = ' + i);
System.AssertEquals(5, i);
List<NVMStatsSF__NVM_Agent_Summary__c> summaryToCreate2 = new List<NVMStatsSF__NVM_Agent_Summary__c>();
//Insert 5 without any Custom or Minor
for (Integer j = 0; j < 5; j++) {
NVMStatsSF__NVM_Agent_Summary__c m = new NVMStatsSF__NVM_Agent_Summary__c();
String TEST_STRING = '123123123 | 2342 34234 234 | 329472347234 | 53344Training 320:20| 53344Break 320:20| 53344Escalation 320:20';
m.NVMStatsSF__Key_Event_String__c = TEST_STRING;
m.NVMStatsSF__dateAgentId__c = 'a9918237aaaa' + j;
m.NVMStatsSF__AgentID__c = '123b' + j;
summaryToCreate2.add(m);
}
//5 with Custom States
for (Integer h = 0; h < 5; h++) {
NVMStatsSF__NVM_Agent_Summary__c m = new NVMStatsSF__NVM_Agent_Summary__c();
String TEST_STRING = '123123123 | 2342 34234 234 | 329472347234 | 53344Custom State 320:20 | 53344Team Meeting 320:20';
m.NVMStatsSF__Key_Event_String__c = TEST_STRING;
m.NVMStatsSF__dateAgentId__c = 'a9918237aaaa' + h;
m.NVMStatsSF__AgentID__c = '123c' + h;
summaryToCreate2.add(m);
}
try {
//Insert the record
System.debug('summaryToCreate2 is ' + summaryToCreate2.size());
insert summaryToCreate2;
} catch (DmlException e) {
//
for (Integer j = 0; j < e.getNumDml(); j++) {
// Process exception here
System.debug(e.getDmlMessage(j));
}
}
//Check all records were inserted
Integer j = 0;
for (NVMStatsSF__NVM_Agent_Summary__c tmp2 : [SELECT Comfort_Break__c, Lunch__c, Training__c, Team_Meeting__c, Custom_State_1__c, Custom_State_2__c, Custom_State_3__c, Custom_State_4__c, Custom_State_5__c, Custom_State_6__c, CreatedDate FROM NVMStatsSF__NVM_Agent_Summary__c WHERE Custom_State_1__c = 20 ORDER By CreatedDate DESC]) {
j++;
System.debug(i);
}
System.debug('Records returned = ' + j);
System.AssertEquals(5, j);
} //end of method
} //end of test class
Comments
Post a Comment