You need to sign in to do that
Don't have an account?
Sharon Crenshaw
Apex Test Class Error
I keep getting the following error while running my Apex Test Class. If I could please get assistance in resolving the problem I would appreciate it. I continue getting the following error:
System.DmlException: Insert failed. First exception on row 0; first error: STRING_TOO_LONG, Alias: data value too large: Sminull90 (max length=8): [Alias]
Below is my code:
Apex Class:
public class NewUtilStaffProcess {
@future
public static void createUtlUser(Id recid) {
Contact gcon = [SELECT Email, Lastname, Firstname, Middlename, AcctId
FROM Contact
WHERE Id = :recid];
Profile p = [SELECT Id FROM Profile WHERE Name='HAVNA City Public Utility Group'];
Id acctsTypeId = [SELECT Id
FROM RecordType
WHERE SObjectType = 'Account'
AND Name = 'Account Source'].Id;
String groleId = [SELECT Id FROM UserRole WHERE Name = 'Utility Staff' LIMIT 1].Id;
String formatUsrName;
String setUsrLoc;
Account retAcct = [SELECT Id, HAVNA_Country__r.HAVNA_Letter_Code__c, Hav_Locality__c, Hav_Street__c
FROM Account
WHERE Id = :gcon.AcctId
AND recordTypeId = :acctsTypeId
LIMIT 1];
if (retAcct.Hav_Street__c == 'Local/Surveyor')
setUsrLoc = retAcct.HAVNA_Country__r.HAVNA_Letter_Code__c+retAcct.Hav_Locality__c;
if (retAcct.Hav_Street__c == 'City/Surveyor')
setUsrLoc = retAcct.HAVNA_Country__r.HAVNA_Letter_Code__c+'C1';
if (retAcct.Hav_Street__c == 'State/Surveyor')
setUsrLoc = retAcct.HAVNA_Country__r.HAVNA_Letter_Code__c+'C2';
if (gcon.middlename == null) {
formatUsrName = gcon.Lastname.deleteWhitespace().toLowercase().trim()+'.'+gcon.Firstname.deleteWhitespace().toLowercase().trim()+'.cnastaff'+setUsrLoc+'@HAVNA.gmail';
} else {
Integer midSize = gcon.Middlename.length();
if (midSize == 1) {
formatUsrName = gcon.Lastname.deleteWhitespace().toLowercase().trim()+'.'+gcon.Firstname.deleteWhitespace().toLowercase().trim()+'.'+gcon.middlename.deleteWhitespace().toLowercase().trim()+'.cnastaff'+setUsrLoc+'@HAVNA.gmail';
} else {
formatUsrName = gcon.Lastname.deleteWhitespace().toLowercase().trim()+'.'+gcon.Firstname.deleteWhitespace().toLowercase().trim()+'.'+gcon.middlename.deleteWhitespace().trim().substring(0,1).toLowercase()+'.cnastaff'+setUsrLoc+'@HAVNA.gmail';
}
}
System.debug('Formatted Username: '+formatUsrName);
User u = new User(Alias = gcon.Lastname.deleteWhitespace().trim().length() > 4 ? gcon.Lastname.deleteWhitespace().trim().substring(0,3)+setUsrLoc: gcon.lastname+setUsrLoc,
Email = gcon.Email,
EmailEncodingKey = 'UTF-8',
LastName = gcon.Lastname,
FirstName = gcon.Firstname,
MiddleName = gcon.Middlename,
LanguageLocaleKey = 'en_US',
LocaleSidKey = 'en_US',
ProfileId = p.Id,
UserRoleId = groleid,
TimeZoneSidKey = 'America/New_York',
UserName = formatUsrName);
Insert(u);
System.debug(u.id);
UtilStaffPermSet.assgnPermissionSet(recId, u.Id);
System.resetPassword(u.Id, True);
}
}
Apex Test Class:
@isTest
public class NewUtilStaffProcessTest {
public static testMethod void InitialTest() {
/* Get Record Id Type */
Id conTypeId;
Id acctTypeId;
String formatUsrName;
String setUsrLoc;
conTypeId = [SELECT Id
FROM RecordType
WHERE SObjectType = 'Contact'
AND Name = 'Utility Staffer'].Id;
Id acctsTypeId = [SELECT Id
FROM RecordType
WHERE SObjectType = 'Account'
AND Name = 'Account Source'].Id;
Profile p = [SELECT Id FROM Profile WHERE Name='HAVNA City Public Utility Group'];
String groleId = [SELECT Id FROM UserRole WHERE Name = 'Utility Staff' LIMIT 1].Id;
Integer midsize;
//Create new State record; initialize required field(s), then insert
HAV_State_and_Country__c state = new HAV_State_and_Country__c();
state.Name = 'Oregon';
state.HAV_Letter_Code__c = 'OR';
state.HAV_Type__c = 'State';
Insert state;
//Create new Account record; initialize required field(s), then insert
Account acct = new Account(Name='Oregon Local 7');
acct.Hav_Locality__c = '90';
acct.Hav_Street__c = 'Local/Surveyor';
acct.RecordTypeId = AcctTypeId;
acct.HAV__Country__c = state.id;
insert acct;
//Create new Contact record; initialize required field(s), then insert
Contact con = new Contact();
con.FirstName = 'Ralph';
con.LastName = 'Smith';
con.Middlename = 'Otis';
con.RecordTypeId = conTypeId;
con.email = 'rsmith8@verizon.com';
con.AcctId = acct.id;
//Insert Contact
Insert con ;
System.debug(con.id);
Account retAcct = [SELECT Id, HAV_Country__r.HAV_Letter_Code__c, Hav_Locality__c, Hav_Street__c
FROM Account
WHERE Id = :con.AcctId
AND recordTypeId = :nomsTypeId
LIMIT 1];
if (retAcct.Hav_Street__c == 'Local/Surveyor')
setUsrLoc = retAcct.HAV_Country__r.HAV_Letter_Code__c+retAcct.Hav_Locality__c;
if (con.middlename == null) {
System.debug('3: '+setUsrLoc);
formatUsrName = con.Lastname.deleteWhitespace().toLowercase().trim()+'.'+con.Firstname.deleteWhitespace().toLowercase().trim()+'.cnastaff'+setUsrLoc+'@HAVNA.gmail';
} else {
System.debug('4: '+setUsrLoc);
midSize = con.Middlename.length();
if (midSize == 1) {
System.debug('5: '+setUsrLoc);
formatUsrName = con.Lastname.deleteWhitespace().toLowercase().trim()+'.'+con.Firstname.deleteWhitespace().toLowercase().trim()+'.'+con.middlename.deleteWhitespace().toLowercase().trim()+'.cnastaff'+setUsrLoc+'@HAVNA.gmail';
} else {
System.debug('6: '+setUsrLoc);
formatUsrName = con.Lastname.deleteWhitespace().toLowercase().trim()+'.'+con.Firstname.deleteWhitespace().toLowercase().trim()+'.'+con.middlename.deleteWhitespace().trim().substring(0,1).toLowercase()+'.cnastaff'+setUsrLoc+'@HAVNA.gmail';
}
}
User thisUser = [SELECT Id FROM User WHERE Id = :UserInfo.getUserId()];
system.runAs(thisUser){
User u = new User(Alias = con.LastName.deleteWhitespace().trim().length() > 4 ? con.LastName.deleteWhitespace().trim().substring(0,4)+setUsrLoc: con.LastName+setUsrLoc,
Email = con.email,
EmailEncodingKey = 'UTF-8',
LastName = con.LastName,
FirstName = con.Firstname,
MiddleName = con.Middlename,
LanguageLocaleKey = 'en_US',
LocaleSidKey = 'en_US',
ProfileId = p.Id,
UserRoleId = groleid,
TimeZoneSidKey = 'America/New_York',
UserName = formatUsrName);
Insert(u);
System.debug(u.id);
Test.startTest();
NewUtilStaffProcess.createUtlUser(con.id);
Test.stopTest();
system.debug('Done');
}
}
}
Thanks.
System.DmlException: Insert failed. First exception on row 0; first error: STRING_TOO_LONG, Alias: data value too large: Sminull90 (max length=8): [Alias]
Below is my code:
Apex Class:
public class NewUtilStaffProcess {
@future
public static void createUtlUser(Id recid) {
Contact gcon = [SELECT Email, Lastname, Firstname, Middlename, AcctId
FROM Contact
WHERE Id = :recid];
Profile p = [SELECT Id FROM Profile WHERE Name='HAVNA City Public Utility Group'];
Id acctsTypeId = [SELECT Id
FROM RecordType
WHERE SObjectType = 'Account'
AND Name = 'Account Source'].Id;
String groleId = [SELECT Id FROM UserRole WHERE Name = 'Utility Staff' LIMIT 1].Id;
String formatUsrName;
String setUsrLoc;
Account retAcct = [SELECT Id, HAVNA_Country__r.HAVNA_Letter_Code__c, Hav_Locality__c, Hav_Street__c
FROM Account
WHERE Id = :gcon.AcctId
AND recordTypeId = :acctsTypeId
LIMIT 1];
if (retAcct.Hav_Street__c == 'Local/Surveyor')
setUsrLoc = retAcct.HAVNA_Country__r.HAVNA_Letter_Code__c+retAcct.Hav_Locality__c;
if (retAcct.Hav_Street__c == 'City/Surveyor')
setUsrLoc = retAcct.HAVNA_Country__r.HAVNA_Letter_Code__c+'C1';
if (retAcct.Hav_Street__c == 'State/Surveyor')
setUsrLoc = retAcct.HAVNA_Country__r.HAVNA_Letter_Code__c+'C2';
if (gcon.middlename == null) {
formatUsrName = gcon.Lastname.deleteWhitespace().toLowercase().trim()+'.'+gcon.Firstname.deleteWhitespace().toLowercase().trim()+'.cnastaff'+setUsrLoc+'@HAVNA.gmail';
} else {
Integer midSize = gcon.Middlename.length();
if (midSize == 1) {
formatUsrName = gcon.Lastname.deleteWhitespace().toLowercase().trim()+'.'+gcon.Firstname.deleteWhitespace().toLowercase().trim()+'.'+gcon.middlename.deleteWhitespace().toLowercase().trim()+'.cnastaff'+setUsrLoc+'@HAVNA.gmail';
} else {
formatUsrName = gcon.Lastname.deleteWhitespace().toLowercase().trim()+'.'+gcon.Firstname.deleteWhitespace().toLowercase().trim()+'.'+gcon.middlename.deleteWhitespace().trim().substring(0,1).toLowercase()+'.cnastaff'+setUsrLoc+'@HAVNA.gmail';
}
}
System.debug('Formatted Username: '+formatUsrName);
User u = new User(Alias = gcon.Lastname.deleteWhitespace().trim().length() > 4 ? gcon.Lastname.deleteWhitespace().trim().substring(0,3)+setUsrLoc: gcon.lastname+setUsrLoc,
Email = gcon.Email,
EmailEncodingKey = 'UTF-8',
LastName = gcon.Lastname,
FirstName = gcon.Firstname,
MiddleName = gcon.Middlename,
LanguageLocaleKey = 'en_US',
LocaleSidKey = 'en_US',
ProfileId = p.Id,
UserRoleId = groleid,
TimeZoneSidKey = 'America/New_York',
UserName = formatUsrName);
Insert(u);
System.debug(u.id);
UtilStaffPermSet.assgnPermissionSet(recId, u.Id);
System.resetPassword(u.Id, True);
}
}
Apex Test Class:
@isTest
public class NewUtilStaffProcessTest {
public static testMethod void InitialTest() {
/* Get Record Id Type */
Id conTypeId;
Id acctTypeId;
String formatUsrName;
String setUsrLoc;
conTypeId = [SELECT Id
FROM RecordType
WHERE SObjectType = 'Contact'
AND Name = 'Utility Staffer'].Id;
Id acctsTypeId = [SELECT Id
FROM RecordType
WHERE SObjectType = 'Account'
AND Name = 'Account Source'].Id;
Profile p = [SELECT Id FROM Profile WHERE Name='HAVNA City Public Utility Group'];
String groleId = [SELECT Id FROM UserRole WHERE Name = 'Utility Staff' LIMIT 1].Id;
Integer midsize;
//Create new State record; initialize required field(s), then insert
HAV_State_and_Country__c state = new HAV_State_and_Country__c();
state.Name = 'Oregon';
state.HAV_Letter_Code__c = 'OR';
state.HAV_Type__c = 'State';
Insert state;
//Create new Account record; initialize required field(s), then insert
Account acct = new Account(Name='Oregon Local 7');
acct.Hav_Locality__c = '90';
acct.Hav_Street__c = 'Local/Surveyor';
acct.RecordTypeId = AcctTypeId;
acct.HAV__Country__c = state.id;
insert acct;
//Create new Contact record; initialize required field(s), then insert
Contact con = new Contact();
con.FirstName = 'Ralph';
con.LastName = 'Smith';
con.Middlename = 'Otis';
con.RecordTypeId = conTypeId;
con.email = 'rsmith8@verizon.com';
con.AcctId = acct.id;
//Insert Contact
Insert con ;
System.debug(con.id);
Account retAcct = [SELECT Id, HAV_Country__r.HAV_Letter_Code__c, Hav_Locality__c, Hav_Street__c
FROM Account
WHERE Id = :con.AcctId
AND recordTypeId = :nomsTypeId
LIMIT 1];
if (retAcct.Hav_Street__c == 'Local/Surveyor')
setUsrLoc = retAcct.HAV_Country__r.HAV_Letter_Code__c+retAcct.Hav_Locality__c;
if (con.middlename == null) {
System.debug('3: '+setUsrLoc);
formatUsrName = con.Lastname.deleteWhitespace().toLowercase().trim()+'.'+con.Firstname.deleteWhitespace().toLowercase().trim()+'.cnastaff'+setUsrLoc+'@HAVNA.gmail';
} else {
System.debug('4: '+setUsrLoc);
midSize = con.Middlename.length();
if (midSize == 1) {
System.debug('5: '+setUsrLoc);
formatUsrName = con.Lastname.deleteWhitespace().toLowercase().trim()+'.'+con.Firstname.deleteWhitespace().toLowercase().trim()+'.'+con.middlename.deleteWhitespace().toLowercase().trim()+'.cnastaff'+setUsrLoc+'@HAVNA.gmail';
} else {
System.debug('6: '+setUsrLoc);
formatUsrName = con.Lastname.deleteWhitespace().toLowercase().trim()+'.'+con.Firstname.deleteWhitespace().toLowercase().trim()+'.'+con.middlename.deleteWhitespace().trim().substring(0,1).toLowercase()+'.cnastaff'+setUsrLoc+'@HAVNA.gmail';
}
}
User thisUser = [SELECT Id FROM User WHERE Id = :UserInfo.getUserId()];
system.runAs(thisUser){
User u = new User(Alias = con.LastName.deleteWhitespace().trim().length() > 4 ? con.LastName.deleteWhitespace().trim().substring(0,4)+setUsrLoc: con.LastName+setUsrLoc,
Email = con.email,
EmailEncodingKey = 'UTF-8',
LastName = con.LastName,
FirstName = con.Firstname,
MiddleName = con.Middlename,
LanguageLocaleKey = 'en_US',
LocaleSidKey = 'en_US',
ProfileId = p.Id,
UserRoleId = groleid,
TimeZoneSidKey = 'America/New_York',
UserName = formatUsrName);
Insert(u);
System.debug(u.id);
Test.startTest();
NewUtilStaffProcess.createUtlUser(con.id);
Test.stopTest();
system.debug('Done');
}
}
}
Thanks.
The User Alias field has default size limit which is Maximum 8 characters. But code generating more than 8 character (Sminull90).
Your code generating the alias dynamically so you have to handle the characters limit. And also avoid the null by using proper null check because am seeing null got genereated in alias Sminull90.
Alias = con.LastName.deleteWhitespace().trim().length() > 4 ? con.LastName.deleteWhitespace().trim().substring(0,4)+setUsrLoc: con.LastName+setUsrLoc
Thanks,
Maharajan.C
All Answers
The User Alias field has default size limit which is Maximum 8 characters. But code generating more than 8 character (Sminull90).
Your code generating the alias dynamically so you have to handle the characters limit. And also avoid the null by using proper null check because am seeing null got genereated in alias Sminull90.
Alias = con.LastName.deleteWhitespace().trim().length() > 4 ? con.LastName.deleteWhitespace().trim().substring(0,4)+setUsrLoc: con.LastName+setUsrLoc
Thanks,
Maharajan.C
Thank you for the response, it told me why I am getting the null, but it does not tell me how to fix the problem in the Apex Test Class. The null should not be in Sminull90. I was hoping to get SmiOR90. My Apex class does it correctly, but when I run tthe test class it get the null problem. I have tried a number of things in the test class, but the null remain. I am assuming there is something in the test class that needs to be set that is not. If you can please help me in this matter it will be appreciated.
I revised my code as follows:
Apex Class:
I changed the code Alias = con.LastName.deleteWhitespace().trim().length() > 4 ? con.LastName.deleteWhitespace().trim().substring(0,4)+setUsrLoc: con.LastName+setUsrLoc
to
Alias = con.LastName.deleteWhitespace().trim().length() > 4 ? con.LastName.deleteWhitespace().trim().substring(0,2)+setUsrLoc: con.LastName+setUsrLoc
Apex Test Class:
@isTest
public class NewUtilStaffProcessTest {
public static testMethod void InitialTest() {
/* Get Record Id Type */
Id conTypeId;
Id acctTypeId;
String formatUsrName;
String setUsrLoc;
conTypeId = [SELECT Id
FROM RecordType
WHERE SObjectType = 'Contact'
AND Name = 'Utility Staffer'].Id;
Id acctsTypeId = [SELECT Id
FROM RecordType
WHERE SObjectType = 'Account'
AND Name = 'Account Source'].Id;
Profile p = [SELECT Id FROM Profile WHERE Name='HAVNA City Public Utility Group'];
String groleId = [SELECT Id FROM UserRole WHERE Name = 'Utility Staff' LIMIT 1].Id;
Integer midsize;
//Create new State record; initialize required field(s), then insert
HAV_State_and_Country__c state = new HAV_State_and_Country__c();
state.Name = 'Oregon';
state.HAV_Letter_Code__c = 'OR';
state.HAV_Type__c = 'State';
Insert state;
//Create new Account record; initialize required field(s), then insert
Account acct = new Account(Name='Oregon Local 7');
acct.Hav_Locality__c = '90';
acct.Hav_Street__c = 'Local/Surveyor';
acct.RecordTypeId = AcctTypeId;
acct.HAV__Country__c = state.id;
insert acct;
//Create new Contact record; initialize required field(s), then insert
Contact con = new Contact();
con.FirstName = 'Ralph';
con.LastName = 'Smith';
con.Middlename = 'Otis';
con.RecordTypeId = conTypeId;
con.email = 'rsmith8@verizon.com';
con.AcctId = acct.id;
//Insert Contact
Insert con ;
System.debug(con.id);
User thisUser = [SELECT Id FROM User WHERE Id = :UserInfo.getUserId()];
system.runAs(thisUser){
Test.startTest();
NewUtilStaffProcess.createUtlUser(con.id);
Test.stopTest();
system.debug('Done');
}
}
}
In the Actual class am seeing the HAVNA_Country__r.HAVNA_Letter_Code__c from Account. But in test class you are creating record for HAV_State_and_Country__c lookup on Account. So insert the data for HAVNA_Country__c lookup.
Thanks,
Maharajan.C
Maybe I am misinterpreting what you are saying.
I changed the Apex Class and Apex test class as follows, reran, but is still getting the null.
Apex Class:
public class NewUtilStaffProcess {
@future
public static void createUtlUser(Id recid) {
Contact gcon = [SELECT Email, Lastname, Firstname, Middlename, AccountId
FROM Contact
WHERE Id = :recid];
Profile p = [SELECT Id FROM Profile WHERE Name='HAVNA City Public Utility Group'];
Id acctsTypeId = [SELECT Id
FROM RecordType
WHERE SObjectType = 'Account'
AND Name = 'Account Source'].Id;
String groleId = [SELECT Id FROM UserRole WHERE Name = 'Utility Staff' LIMIT 1].Id;
String formatUsrName;
String setUsrLoc;
Account retAcct = [SELECT Id, HAVNA_Country_Id__r.HAVNA_Letter_Code__c, HAVNA_Locality__c, Hav_Street__c
FROM Account
WHERE Id = :gcon.AccountId
AND recordTypeId = :acctsTypeId
LIMIT 1];
if (retAcct.Hav_Street__c == 'Local/Surveyor')
setUsrLoc = retAcct.HAVNA_Country_Id__r.HAVNA_Letter_Code__c+retAcct.HAVNA_Locality__c;
if (retAcct.Hav_Street__c == 'City/Surveyor')
setUsrLoc = retAcct.HAVNA_Country_Id__r.HAVNA_Letter_Code__c+'C1';
if (retAcct.Hav_Street__c == 'State/Surveyor')
setUsrLoc = retAcct.HAVNA_Country_Id__r.HAVNA_Letter_Code__c+'C2';
if (gcon.middlename == null) {
formatUsrName = gcon.Lastname.deleteWhitespace().toLowercase().trim()+'.'+gcon.Firstname.deleteWhitespace().toLowercase().trim()+'.cnastaff'+setUsrLoc+'@HAVNA.gmail';
} else {
Integer midSize = gcon.Middlename.length();
if (midSize == 1) {
formatUsrName = gcon.Lastname.deleteWhitespace().toLowercase().trim()+'.'+gcon.Firstname.deleteWhitespace().toLowercase().trim()+'.'+gcon.middlename.deleteWhitespace().toLowercase().trim()+'.cnastaff'+setUsrLoc+'@HAVNA.gmail';
} else {
formatUsrName = gcon.Lastname.deleteWhitespace().toLowercase().trim()+'.'+gcon.Firstname.deleteWhitespace().toLowercase().trim()+'.'+gcon.middlename.deleteWhitespace().trim().substring(0,1).toLowercase()+'.cnastaff'+setUsrLoc+'@HAVNA.gmail';
}
}
System.debug('Formatted Username: '+formatUsrName);
User u = new User(Alias = gcon.Lastname.deleteWhitespace().trim().length() > 4 ? gcon.Lastname.deleteWhitespace().trim().substring(0,3)+setUsrLoc: gcon.lastname+setUsrLoc,
Email = gcon.Email,
EmailEncodingKey = 'UTF-8',
LastName = gcon.Lastname,
FirstName = gcon.Firstname,
MiddleName = gcon.Middlename,
LanguageLocaleKey = 'en_US',
LocaleSidKey = 'en_US',
ProfileId = p.Id,
UserRoleId = groleid,
TimeZoneSidKey = 'America/New_York',
UserName = formatUsrName);
Insert(u);
System.debug(u.id);
UtilStaffPermSet.assgnPermissionSet(recId, u.Id);
System.resetPassword(u.Id, True);
}
}
Apex Test Class:
@isTest
public class NewUtilStaffProcessTest {
public static testMethod void InitialTest(
/* Get Record Id Type */Id conTypeId
Id acctTypeId;
String formatUsrName;
String setUsrLoc;
conTypeId = [SELECT Id
FROM RecordType
WHERE SObjectType = 'Contact'
AND Name = 'Utility Staffer'].Id;
Id acctsTypeId = [SELECT Id
FROM RecordType
WHERE SObjectType = 'Account'
AND Name = 'Account Source'].Id;
Profile p = [SELECT Id FROM Profile WHERE Name='HAVNA City Public Utility Group'];
String groleId = [SELECT Id FROM UserRole WHERE Name = 'Utility Staff' LIMIT 1].Id;
Integer midsize;
//Create new State record; initialize required field(s), then insert
HAVNA_State_and_Country__c state = new HAVNA_State_and_Country__c();
state.Name = 'Oregon';
state.HAVNA_Letter_Code__c = 'OR';
state.HAVNA_Type__c = 'State';
Insert state;
//Create new Account record; initialize required field(s), then insert
Account acct = new Account(Name='Oregon Local 7');
acct.HAVNA_Locality__c = '90';
acct.Hav_Street__c = 'Local/Surveyor';
acct.RecordTypeId = AcctTypeId;
acct.HAVNA_Country_id__c = state.id;
insert acct;
//Create new Contact record; initialize required field(s), then insert
Contact con = new Contact();
con.FirstName = 'Ralph';
con.LastName = 'Smith';
con.Middlename = 'Otis';
con.RecordTypeId = conTypeId;
con.email = 'rsmith8@verizon.com';
con.Accountid = acct.id;
//Insert Contact
Insert con ;
System.debug(con.id);
User thisUser = [SELECT Id FROM User WHERE Id = :UserInfo.getUserId()];
system.runAs(thisUser){
Test.startTest();
NewUtilStaffProcess.createUtlUser(con.id);
Test.stopTest();
system.debug('Done');
}
}
}
I did not send an attitude status nor understand why you referred to one..