Introduction
This article describes the steps to create TaroWorks Mobile User records from existing active Platform Licensed users or Salesforce Licensed Users.
Before you Begin:
- You must be on TaroWorks 7.3.X or above.
-
The Platform Licensed users and Salesforce Licensed Users must be active.
- Go to Setup > Developer Console.
- Click Debug >Open Execute Anonymous Window.
- Copy and paste the below script on the anonymous window.
List<User> currentUsers = [Select Id, Email From User Where isActive = true and Id =: UserInfo.getUserId() and Profile.Name = 'System Administrator'];
if(currentUsers.isEmpty()) return;
//Comma separated values can be added as {'id1','id2','id3'}
Set<Id> userIds = new Set<Id> { '<user id>' };
List<gfsurveys__TaroWorks_Mobile_User__c> trList = new List<gfsurveys__TaroWorks_Mobile_User__c>();
Map<Id, List<String>> userGroupInformationMap = getUserRelatedGroupInformationMap(userIds);
Id userRecordType = [Select Id from RecordType where SobjectType = 'gfsurveys__TaroWorks_Mobile_User__c' And DeveloperName = 'Users'].Id;
String successCsvHeader = 'TMU Record Id, UserName \n', FailedCsvHeader = 'TMU Record Id, UserName \n';
Integer successCount = 0,failedCount = 0;
map<string,string>dupMap=new map<string,string>();
for (gfsurveys__TaroWorks_Mobile_User__c tr: [Select Id,gfsurveys__Username__c From gfsurveys__TaroWorks_Mobile_User__c Where gfsurveys__User__c In: userids]) {
dupMap.put(tr.gfsurveys__Username__c,tr.gfsurveys__Username__c);
}
for (User u: [Select Id, LanguageLocaleKey, FirstName, LastName, Alias, Email, Username, IsActive, Profile.Name From User Where Id In: userids and isActive=true]) {
if(!dupMap.containsKey(u.UserName)){
gfsurveys__TaroWorks_Mobile_User__c tr = new gfsurveys__TaroWorks_Mobile_User__c();
tr.gfsurveys__First_Name__c = u.FirstName;
tr.gfsurveys__Last_Name__c = u.LastName;
tr.gfsurveys__Username__c = u.Username;
tr.gfsurveys__Email__c = u.Email;
tr.gfsurveys__User__c = u.id;
tr.gfsurveys__Profile__c = u.Profile.name;
tr.gfsurveys__Alias__c = u.Alias;
tr.gfsurveys__Language__c = u.LanguageLocaleKey;
tr.RecordTypeId = userRecordType;
tr.gfsurveys__Active__c = u.IsActive;
if (userGroupInformationMap.get(u.Id) != null && userGroupInformationMap.get(u.Id).size() > 1) {
// Sort the group names
List<String> groupNames = userGroupInformationMap.get(u.Id).get(1).split(',');
groupNames.sort();
tr.gfsurveys__Assigned_Public_Group_Names__c = String.join(groupNames, ', ');
tr.gfsurveys__Assigned_Public_Group_IDs__c = userGroupInformationMap.get(u.Id).get(0);
}
trList.add(tr);
}
}
if(trList.size() > 0){
List <Database.saveResult> result = Database.insert(trList, false);
for (Integer i = 0; i < result.size(); i++) {
if(result.get(i).isSuccess()){
successCsvHeader += result.get(i).Id + ',' + trList[i].gfsurveys__Username__c + '\n';
successCount++;
} else {
FailedCsvHeader += ' ' + ',' + trList[i].gfsurveys__Username__c + '\n';
failedCount++;
}
}
}
List<Messaging.EmailFileAttachment> attachments;
Messaging.EmailFileAttachment successAttachment = new Messaging.EmailFileAttachment();
Messaging.EmailFileAttachment failedAttachment = new Messaging.EmailFileAttachment();
Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
mail.setSenderDisplayName('TaroWorks Mobile User Creation');
mail.setToAddresses(new List<String>{currentUsers[0].Email});
if(failedCount > 0){
attachments = new List<Messaging.EmailFileAttachment>();
List<Messaging.SingleEmailMessage> mails = new List<Messaging.SingleEmailMessage> ();
mail.setSubject('Creation of some TaroWorks Mobile Users Failed');
String body = '';
body += successCount + ' Records were processed successfully.' + failedCount + ' Records failed.<br/>';
body += 'The following error has occurred in your Salesforce Organization :';
body += ' An unexpected error occurred while creating Taroworks Mobile Users.<br/>';
body += 'Attached are the details of failed record(s).\n';
body += '<br/>Please submit a <a href="https://taroworks.zendesk.com/hc/en-us/requests/new">support ticket</a> with TaroWorks support containing these details.\n';
body += '<br/><br/> Thank You,<br/> TaroWorks Team.';
mail.setHtmlBody(body);
failedAttachment.setFileName('FailedRecords.csv');
failedAttachment.setBody(Blob.valueOf(FailedCsvHeader));
attachments.add(failedAttachment);
mail.setFileAttachments(attachments);
mails.add(mail);
Messaging.sendEmail(mails);
}
if(successCount > 0){
attachments = new List<Messaging.EmailFileAttachment>();
List<Messaging.SingleEmailMessage> mails = new List<Messaging.SingleEmailMessage> ();
successAttachment.setFileName('SuccessRecords.csv');
successAttachment.setBody(Blob.valueOf(successCsvHeader));
attachments.add(successAttachment);
mail.setSubject('TaroWorks Mobile User Creation Successful');
String body = successCount + ' TaroWorks Mobile User records created successfully ' + '\n';
body += '<br/><br/> Thank You,<br/> TaroWorks Team.';
mail.setHtmlBody(body);
mail.setFileAttachments(attachments);
mails.add(mail);
Messaging.sendEmail(mails);
}
public Map<Id, List<String>> getUserRelatedGroupInformationMap(Set<Id> userIdSet) {
Map<Id, List<String>> groupInformationMap = new Map<Id, List<String>>();
Set<Id> groupIdsSet = new Set<Id>();
List<GroupMember> groupWithAllPartnerUsers = [SELECT Id, GroupId,UserOrGroupId,Group.Name FROM GroupMember WHERE (UserOrGroupId IN (SELECT Id FROM Group WHERE DeveloperName = 'AllInternalUsers')) AND (Group.Type = 'Regular')];
for(Id userId: userIdSet) {
for(GroupMember allPartnerGroup : groupWithAllPartnerUsers) {
List<String> groupInformationList = new List<String>();
if(!groupInformationMap.containsKey(userId)) {
groupInformationList.add(allPartnerGroup.GroupId);
groupInformationList.add(allPartnerGroup.Group.Name);
groupIdsSet.add(allPartnerGroup.GroupId);
} else {
groupInformationList = groupInformationMap.get(userId);
if(!groupInformationList.isEmpty()) {
groupInformationList[0] += ',' + allPartnerGroup.GroupId;
groupInformationList[1] += ',' + allPartnerGroup.Group.Name;
groupIdsSet.add(allPartnerGroup.GroupId);
}
}
groupInformationMap.put(userId, groupInformationList);
}
}
for(GroupMember member : [SELECT Id, GroupId, UserOrGroupId, Group.Name FROM GroupMember WHERE (UserOrGroupId IN :userIdSet) AND (Group.Type = 'Regular') Order By Group.Name]) {
List<String> groupInformationList = new List<String>();
if(!groupInformationMap.containsKey(member.UserOrGroupId)) {
groupInformationList.add(member.GroupId);
groupInformationList.add(member.Group.Name);
} else {
groupInformationList = groupInformationMap.get(member.UserOrGroupId);
if(!groupInformationList.isEmpty()) {
if(!groupIdsSet.contains(member.GroupId)) {
groupInformationList[0] += ',' + member.GroupId;
groupInformationList[1] += ',' + member.Group.Name;
}
}
}
groupInformationMap.put(member.UserOrGroupId, groupInformationList);
}
return groupInformationMap;
} - Paste the User Ids.
- Click Execute.
- You will receive an email with the subject, "TaroWorks Mobile User Creation Successful" when the User creation is complete.
Note :
- Only 50,000 records are processed by the script.
- TaroWorks Mobile Users can be created from many different license types at the same time.
- The script ignores inactive users and does not create TaroWorks Mobile Users from them.
Comments
0 comments
Please sign in to leave a comment.