Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- trigger CAP_AG_ProjectShare on CAP_AG_Project__c(after insert,after update) {
- Set<Group> allGroups = new Set<Group>();
- Set<ID> deleteProjectSharesIdSet = new Set<ID>();
- List<CAP_AG_Project__share> projectShares = New List<CAP_AG_Project__share>();
- List<CAP_AG_Project__share> deleteprojectShares = New List<CAP_AG_Project__share>();
- map<String,List<Id>> groupToProjectMembers = new map<String,List<Id>>();
- map<String,List<Id>> groupToProjectToDelete = new map<String,List<Id>>();
- LIST<ID> ownerIdsSet = new LIST<ID>();
- for(CAP_AG_Project__c project: trigger.new){
- if(project.CAP_AG_Country__c != Null && project.CAP_AG_Private_Project__c != true){
- if(project.CAP_AG_Country__c.trim().length()>0){
- String cleanCountryName = project.CAP_AG_Country__c.trim().left(40);
- String namePrefixedCountryName = ('CTRY_' + cleanCountryName.replace('.','_').replace(' ','_').replace('-','').replace('(','').replace(')','').replace(''','').replace(',','').replace('__','_')).left(40);
- namePrefixedCountryName=namePrefixedCountryName.removeEnd('_');
- allGroups.add(new Group(DeveloperName=namePrefixedCountryName,Name=('Country - ' + cleanCountryName).left(40)));
- if(!groupToProjectMembers.containsKey(namePrefixedCountryName)){
- groupToProjectMembers.put(namePrefixedCountryName,new List<Id>());
- }
- groupToProjectMembers.get(namePrefixedCountryName).add(project.Id);
- }
- }
- if((Trigger.IsInsert && project.CAP_AG_Private_Project__c == true)
- || (Trigger.IsUpdate && project.CAP_AG_Private_Project__c == true)
- || (Trigger.IsUpdate && !(trigger.oldmap).isEmpty() && trigger.oldmap.get(project.id) != null && trigger.oldmap.get(project.id).CAP_AG_Country__c != null &&
- trigger.oldmap.get(project.id).CAP_AG_Country__c != project.CAP_AG_Country__c)
- )
- {
- ownerIdsSet.add(project.OwnerId);
- deleteProjectSharesIdSet.add(project.id);
- }
- }
- for(CAP_AG_Project__share projShare: [Select id,UserOrGroupID,ParentId,AccessLevel from CAP_AG_Project__share where ParentId IN: deleteProjectSharesIdSet and UserOrGroupID NOT IN :ownerIdsSet and RowCause = 'Manual'])
- {
- deleteProjectShares.add(projShare);
- }
- if(!deleteProjectShares.isEmpty())
- {
- database.delete(deleteProjectShares);
- }
- ***database.upsert(new List<Group>(allGroups),Schema.Group.Name);***
- for(Group g:allGroups){
- if(groupToProjectMembers.containsKey(g.DeveloperName)){
- For(Id projectId : groupToProjectMembers.get(g.DeveloperName)){
- projectShares.add(new CAP_AG_Project__share(UserOrGroupID=g.id, ParentId=projectId,AccessLevel='Read'));
- }
- }
- }
- database.insert(projectShares);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement