You need to sign in to do that
Don't have an account?
Kristen Aldrich 14
Communities self-register error "accountId parameter not valid" related to Apex Class
I've been receiving email notifications with Subject: Registration error in site AMC_Community with the body: "AMC_Community registration accountID parameter value is not valid". This issue seems to happen when someone tries to self register for our Community for the first time. If they have a preexisting contact in SF, they are able to register a user in the Community. Otherwise, this error is thrown. After speaking with SF support, we narrowed down the issue to the Apex Class 'CommunitiesSelfRegController'
but I'm at a loss as to what is wrong with the code, which was developed and implemented by a consultant we no longer work with. I'll paste the code here. Any help is greatly appreciated!
/** * An apex page controller that supports self registration of users in communities that allow self registration */ public class CommunitiesSelfRegController { public String firstName {get; set;} public String lastName {get; set;} public String email {get; set;} public String password {get; set {password = value == null ? value : value.trim(); } } public String confirmPassword {get; set { confirmPassword = value == null ? value : value.trim(); } } //public String communityNickname {get; set { communityNickname = value == null ? value : value.trim(); } } public String Zipcode{get;set;} public String City{get;set;} public String Street{get;set;} String userId; String userName ; List<Contact> ConList = new list<contact>(); Map<id,user> MapOfUser = new Map<id,user>(); user u; user[] UsrOld; boolean CheckCon = false; DateTime currentTime = System.now(); Long timeInMili = currentTime.getTime()/1000; map<id,contact> MapofExternalContact = new map<id,contact>(); Map<id,id> MapofUserContact = new map<id,id>(); set<id> SetOfContacts = new set<id>(); boolean createaccount=true; //Aman public String country {get;set;} public String state {get;set;} //Aman public CommunitiesSelfRegController() {getCountries();getStates();} private boolean isValidPassword() { return password == confirmPassword; } public List<SelectOption> getCountries() { List<SelectOption> options = new List<SelectOption>(); options.add(new SelectOption('None','--- Select ---')); options.add(new SelectOption('United States','United States')); options.add(new SelectOption('Canada','Canada')); return options; } public List<SelectOption> getStates() { List<SelectOption> options = new List<SelectOption>(); if(country == 'United States') { options.add(new SelectOption('None','--- Select ---')); List<countrystates__c> CountryList= [select country__c,state__c,abbrevation__c from countrystates__c where country__c ='United States' order by state__c]; For(Countrystates__c CS : CountryList){ options.add(new SelectOption(Cs.abbrevation__c ,CS.State__c)); } } else if(country == 'Canada') { options.add(new SelectOption('None','--- Select ---')); List<countrystates__c> CountryList= [select country__c,state__c,abbrevation__c from countrystates__c where country__c ='Canada']; For(Countrystates__c CS : CountryList){ options.add(new SelectOption(Cs.abbrevation__c ,CS.State__c)); } } else { options.add(new SelectOption('None','--- Select ---')); } return options; } public PageReference registerUser() { // it's okay if password is null - we'll send the user a random password in that case if (!isValidPassword()) { ApexPages.Message msg = new ApexPages.Message(ApexPages.Severity.ERROR, Label.site.passwords_dont_match); ApexPages.addMessage(msg); return null; } try { for(contact con : [select id,name,firstname,lastname,mailingpostalcode,email,accountid from contact where email = :email]){ MapofExternalContact.put(con.id,con); SetOfContacts.add(con.id); } for(user u : [select id,contactid from user where contactid in : SetOfContacts]){ if(u.id != null){ MapofUserContact.put(u.contactid,u.id); } } if(MapofExternalContact.isempty()==false){ for(contact c :MapofExternalContact.values()){ if(c.email == email && MapofUserContact.containskey(c.id)){ ApexPages.Message msg1 = new ApexPages.Message(ApexPages.Severity.ERROR, 'User already exists in database'); ApexPages.addMessage(msg1); return null; }else if (!MapofUserContact.containskey(c.id) && c.firstname.equals(firstname) && c.lastname == lastname && c.mailingpostalcode == Zipcode && c.email == email){ u = CreateCommUser.CreateUser(label.ProfileID,firstName,LastName,email, c.id); userId = (String)u.id; checkcon=true; }else if (!MapofUserContact.containskey(c.id) && c.email == email ) { String profileId = label.ProfileID;// To be filled in by customer. String roleEnum = '';// To be filled in by customer. String accountId = c.accountid; // To be filled in by customer. userName = email; List<string> split = Email.split('@', 0); User u = new User(); u.Username = userName; u.Email = email; u.FirstName = firstName; u.LastName = lastName; u.CommunityNickname = split[0]+timeInMili; u.ProfileId = label.ProfileID; If(!String.isBlank(Zipcode) || zipcode<>null){ u.PostalCode=zipcode; } If((!String.isBlank(Country) || country<>null) && (Country=='Canada'||country=='United States')){ u.country=country; } If(!String.isBlank(city) || city<>null){ u.city=city; } If((!String.isBlank(State) || state<>null) && state!= 'None'){ u.state=state;} If(!String.isBlank(street) || street<>null){ u.street=street;} u.EmailEncodingKey = 'UTF-8'; u.LanguageLocaleKey = 'en_US'; u.LocalesIdKey = 'en_US'; u.TimezonesIdKey = 'America/New_York'; userId = Site.createExternalUser(u, accountId, password); createaccount=false; } } } else if(MapofExternalContact.isempty()==true){ String profileId = label.ProfileID;// To be filled in by customer. String roleEnum = '';// To be filled in by customer. String accountId = Label.CommunityHouseHoldAccount; // To be filled in by customer. userName = email; List<string> split = Email.split('@', 0); User u = new User(); u.Username = userName; u.Email = email; u.FirstName = firstName; u.LastName = lastName; u.CommunityNickname = split[0]+timeInMili; u.ProfileId = label.ProfileID; If(!String.isBlank(Zipcode) || zipcode<>null){ u.PostalCode=zipcode; } If((!String.isBlank(Country) || country<>null) && (Country=='Canada'||country=='United States')){ u.country=country; } If(!String.isBlank(city) || city<>null){ u.city=city; } If((!String.isBlank(State) || state<>null) && state!= 'None'){ u.state=state;} If(!String.isBlank(street) || street<>null){ u.street=street;} u.EmailEncodingKey = 'UTF-8'; u.LanguageLocaleKey = 'en_US'; u.LocalesIdKey = 'en_US'; u.TimezonesIdKey = 'America/New_York'; userId = Site.createExternalUser(u, accountId, password); } }catch(exception ex) { string errors = ex.getMessage(); integer linenumber = ex.getLineNumber(); ApexPages.Message msg = new ApexPages.Message(ApexPages.Severity.ERROR, errors); ApexPages.addMessage(msg); } if (userId != null) { if (password != null && password.length() > 1) { //return Site.login(userName, password, ApexPages.currentPage().getParameters().get('startURL')); } else { PageReference page = System.Page.CommunitiesSelfRegConfirm; page.setRedirect(true); if(Checkcon == false){ CreateCommUser.CreateUpdateAccount(userid,createaccount); } return page; } } return null; } }
but I'm at a loss as to what is wrong with the code, which was developed and implemented by a consultant we no longer work with. I'll paste the code here. Any help is greatly appreciated!