1

I am trying to create a community user in an after update trigger of account. I am setting the UserRoleId = null but still am getting MIXED_DML_OPERATION exception. As per documentation:

You can insert a user in a transaction with other sObjects in Apex code saved using Salesforce API version 15.0 and later if UserRoleId is specified as null.

Here is my simple method that return a User object:

public class UtilClass {
    
    /*
        * Created by : Sarang D
        * Description: Method to create user.
    */
    public static User createUser(String profileId, String federationId, String firstname, String lastName,
                                     String alias, String email, String username, String communityNickname, Id contactId, String TimeZoneSidKey,
                                    String EmailEncodingKey, String LanguageLocaleKey, String LocaleSidKey, Id UserRoleId){
        return new User(
        FirstName=firstname,
        LastName = lastName,
        Alias = alias,
        Email = email,
        Username = username,
        ProfileId = profileId,
        communityNickname = communityNickname,
        contactId = contactId,
        TimeZoneSidKey = TimeZoneSidKey,
        EmailEncodingKey = EmailEncodingKey,
        LanguageLocaleKey = LanguageLocaleKey,
        LocaleSidKey = LocaleSidKey,
        FederationIdentifier = federationId,
        UserRoleId = UserRoleId);
    }
}

And calling this from an after update trigger in a for loop:

List<User> communityUserListTOBeCreated = new List<User>();
for(Account_Relationship__c acRelationship : []){      // Somme query
           communityUserListTOBeCreated.add(UtilClass.createUser(
    //Passing data here, specifically setting UserRoleId = null.
));
}
insert communityUserListTOBeCreated ;  //Throws exception here.
4
  • Are you creating the contact record first as that is required for a community user? I don't see where you are passing a Null value to the UserRoleId from the code you have included in the question.
    – Dave Humm
    Oct 9 '20 at 9:31
  • Yes, my contact record is already created and I am passing contactId as well. Did not mention all the fields to keep the questions short...I am passing UserRoleId to method createUser
    – Sarang
    Oct 9 '20 at 9:34
  • Do you also add Permission Set Assignments?
    – ytiq
    Oct 9 '20 at 12:48
  • no didn't add permission set.
    – Sarang
    Oct 9 '20 at 13:06
1

There was a workflow rule on user object that was updating the user object and since it is called from account trigger transaction, and updation of user is not allowed in same transaction as standard objects, this error is produced.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.