之前通过SharingSetting的共有规则,可以做成ContactShare的数据,进行两个User之间的数据共享,下边把SharingSetting的共有规则删除,试着使用Trigger来实现相同功能。
ContactTrigger.trigger
因为需要向ContactShare表中插入数据,所以使用AfterInsert来实现。
trigger ContactTrigger on Contact (before insert, after insert) {
if(Trigger.isinsert && Trigger.isBefore ){
ContactHelper.BeforeInsert(Trigger.new);
}
if(Trigger.isinsert && Trigger.isAfter ){
ContactHelper.AfterInsert(Trigger.new);
}
}
ContactHelper.cls
public with sharing class ContactHelper {
/**
* @name BeforeInsert
* @description
* @param List<Contact> newList
* @return void
**/
public static void BeforeInsert(List<Contact> newList){
List<Account> accList = new List<Account>();
Set<String> nameSets = new Set<String>();
for (Contact con : newList) {
if (con.AccountId == null) {
String accName = getContactName(con);
nameSets.add(accName);
Account accItem = new Account();
accItem.Name = accName;
accList.add(accItem);
}
}
insert accList;
List<Account> accNewList =[SELECT Id,Name FROM Account WHERE Name IN :nameSets];
Map<String, Id> accName2IdMaps = new Map<String, Id>();
if (accNewList != null && accNewList.size() >0) {
for (Account accItem : accNewList) {
accName2IdMaps.put(accItem.Name, accItem.Id);
}
}
for (Contact con : newList) {
if (con.AccountId == null && !accName2IdMaps.isEmpty()) {
String accName = getContactName(con);
con.AccountId = accName2IdMaps.get(accName);
}
}
}
private static String getContactName(Contact con) {
String accName = '';
if (con.LastName != null && con.FirstName != null) {
accName = con.LastName + ' ' + con.FirstName;
} else {
if (con.LastName != null) {
accName = con.LastName;
}
if (con.FirstName != null) {
accName = con.FirstName;
}
}
return accName;
}
public static void AfterInsert(List<Contact> newContactList){
List<User> userList = [SELECT Id, Name FROM User WHERE Name = 'Chavez Julie'];
User u = new User();
if (userList != null && userList.size() > 0) {
u = userList.get(0);
}
List<GroupMember> groupList = [SELECT Id, GroupId, UserOrGroupId, SystemModstamp FROM GroupMember];
Map<Id, Id> userId2GroupMap = new Map<Id, Id>();
if (groupList != null && groupList.size() > 0) {
for (GroupMember groupMemberItem : groupList) {
userId2GroupMap.put(groupMemberItem.UserOrGroupId, groupMemberItem.GroupId);
}
}
List<ContactShare> conShareList = new List<ContactShare>();
for (Contact con : newContactList) {
if (userId2GroupMap != null && !userId2GroupMap.isEmpty()) {
if (con.OwnerId != null) {
ContactShare conShare = new ContactShare();
conShare.ContactId = con.Id;
conShare.UserOrGroupId = userId2GroupMap.get(u.Id);
conShare.RowCause = 'Manual';
conShare.ContactAccessLevel = 'Edit';
conShareList.add(conShare);
}
}
}
insert conShareList;
}
}
测试:
使用Laura进行登录,并做成一个数据。
登录成功之后,会自动做成RowCause是Manual的ContactShare数据。
使用Juice用户登录,确认可以访问Laura做成的数据。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。