You need to sign in to do that
Don't have an account?
William Roach-Barrette
Not using ID to insert? Insert failed: FIELD_CUSTOM_VALIDATION_EXCEPTION, Please provide either an Email Address or Phone Number: []
I am having trouble understanding this error and how its being caused. I am trying to pull user data in the form of JSON from an external website then Im trying to store that data in the contacts record. I know that every JSON string has a name, email and contact ID present. So how is it I can get an error like this?
For testing purposes I had to create a mock response by implimenting the HTTPMockUp class, you can see my code below. Can I add some kind of logic check that would keep this from happening? im really close to passing all my orgs tests.
Wrapper for JSON:
Callout Class and updater:
My test class:
HttpCalloutMock implementation:
My trigger:
And here is a picture of my errors:
System.DmlException: Insert failed. First exception on row 0; first error: FIELD_CUSTOM_VALIDATION_EXCEPTION, Please provide either an Email Address or Phone Number: []
For testing purposes I had to create a mock response by implimenting the HTTPMockUp class, you can see my code below. Can I add some kind of logic check that would keep this from happening? im really close to passing all my orgs tests.
Wrapper for JSON:
public class GDPRWrapper{ public GDPRWrapper(List<GDPRData> templst){ GDPRList = templst; } public List<GDPRData> GDPRList {get; set;} public class GDPRData { public Integer gdprId {get; set;} //26636 public String firstName {get; set;} public String lastName {get; set;} public String email {get; set;} public String phone {get; set;} public String accountName {get; set;} public String contactId {get; set;} //AA111222333AAAe public String emailHash {get; set;} //78fcb5ad502033c46d35abcecb3615bd92757fb0451485a19b27b7515f6d82d0 public String createDate {get; set;} //2018-05-17T15:19:37.000+0000 public String responseDate {get; set;} //2018-05-21T10:38:53.000+0000 public String notifyDate {get; set;} public boolean marketing {get; set;} public boolean security {get; set;} public boolean support {get; set;} public boolean contactPhone {get; set;} public boolean contactEmail {get; set;} public boolean contactOther {get; set;} public boolean invalid {get; set;} } public static List<GDPRData> parse(httpResponse json){ return (List<GDPRData>) System.JSON.deserialize(json.getBody(), List<GDPRData>.class); } }
Callout Class and updater:
public class JSONDeserialize { public GDPRWrapper wrapper {get;set;} public HttpResponse httpResponse {get;set;} @future(callout=true) public static void deserialize() { GDPRWrapper wrapper; HttpResponse httpResponse = new HttpResponse(); Http h = new Http(); HttpRequest request = new HttpRequest(); request.setEndPoint('https://private'); Blob headerValue = Blob.valueOf('d18849ea4155:d83ce6ef3dbe'); String authorizationHeader = ('Basic ' + EncodingUtil.base64Encode(headerValue)); request.setHeader('Authorization', authorizationHeader); request.setMethod('GET'); HttpResponse response = new HttpResponse(); try{ response = h.send(request); System.debug('JSON RESPONSE: ' + response); List<GDPRWrapper.GDPRData> obj = GDPRWrapper.parse(response); wrapper = new GDPRWrapper(obj); System.assert(wrapper.GDPRList!=null); updateData(wrapper); }catch(JSONException j){ System.debug('An unexpected error has occured: ' + j.getMessage()); } } public static void UpdateData(GDPRWrapper wrapper){ List<Contact> contactPref = new List<Contact>(); List<Contact> newContacts = new List<Contact>(); for(Integer i = 0; i < wrapper.GDPRList.size(); i ++){ if(wrapper.GDPRList[i].contactId.length() > 3){ if(wrapper.GDPRList[i].contactId.subString(0,3) == '003'){ Contact toInsert = new Contact(); toInsert.firstName = wrapper.GDPRList[i].firstName; toInsert.lastName = wrapper.GDPRList[i].lastName; toInsert.email = wrapper.GDPRList[i].email; toInsert.Email_Hash__c = wrapper.GDPRList[i].emailHash; toInsert.Id = wrapper.GDPRList[i].contactId; toInsert.Sales_and_Marketing__c = wrapper.GDPRList[i].marketing; toInsert.Critical_Security_Notes__c = wrapper.GDPRList[i].security; toInsert.Product_Information__c = wrapper.GDPRList[i].support; toInsert.Contact_Via_Text__c = wrapper.GDPRList[i].contactPhone; toInsert.Contact_Via_Email__c = wrapper.GDPRList[i].contactEmail; contactPref.add(toInsert); } } else{ Contact toInsert = new Contact(); toInsert.firstName = wrapper.GDPRList[i].firstName; toInsert.lastName = wrapper.GDPRList[i].lastName; toInsert.email = wrapper.GDPRList[i].email; toInsert.Email_Hash__c = wrapper.GDPRList[i].emailHash; toInsert.Sales_and_Marketing__c = wrapper.GDPRList[i].marketing; toInsert.Critical_Security_Notes__c = wrapper.GDPRList[i].security; toInsert.Product_Information__c = wrapper.GDPRList[i].support; toInsert.Contact_Via_Text__c = wrapper.GDPRList[i].contactPhone; toInsert.Contact_Via_Email__c = wrapper.GDPRList[i].contactEmail; newContacts.add(toInsert); } } try{ if(contactPref.size()>0){ upsert contactPref; } if(NewContacts.size()>0){ // insert NewContacts; } } catch(DmlException e){ System.debug('An unexpected error has occured: ' + e.getMessage()); } } }
My test class:
@isTest private class JSONDeserializeTest { @isTest static void testCalloutWithStaticResource(){ Test.setMock(HttpCalloutMock.class, new Test_callApply1()); JSONDeserialize.deserialize(); System.assert(true); } }
HttpCalloutMock implementation:
@isTest global class Test_callApply1 implements HttpCalloutMock { // Implement this interface method global HTTPResponse respond(HttpRequest req) { // Optionally, only send a mock response for a specific endpoint // and method. //System.assertEquals('http://example.com/example/test', req.getEndpoint()); //System.assertEquals('GET', req.getMethod()); // Create a fake response HttpResponse res = new HttpResponse(); res.setHeader('Content-Type','application/json'); res.setBody('PRIVATE JSON DATA'); res.setStatusCode(200); return res; } }
My trigger:
trigger GDPR_Prefrences_Updater on Contact (after insert, after update) { if(System.IsBatch() == false && System.isFuture() == false && !Test.isRunningTest()) { System.debug('i got triggered!!!'); JSONDeserialize.deserialize(); } }
And here is a picture of my errors:
You need to insert an email or phone into the Object in your test classes
https://releasenotes.docs.salesforce.com/en-us/winter16/release-notes/rn_deployment_change_sets_test_levels.htm
Run Specified Tests
Only the tests that you specify are run. Provide the names of test classes in a comma-separated list.