前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >添加Contact表的共有情报(二)

添加Contact表的共有情报(二)

原创
作者头像
repick
发布2022-05-16 12:49:35
5300
发布2022-05-16 12:49:35
举报
文章被收录于专栏:SalesforceSalesforce

之前通过SharingSetting的共有规则,可以做成ContactShare的数据,进行两个User之间的数据共享,下边把SharingSetting的共有规则删除,试着使用Trigger来实现相同功能。

ContactTrigger.trigger

因为需要向ContactShare表中插入数据,所以使用AfterInsert来实现。

代码语言:javascript
复制
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

代码语言:javascript
复制
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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档