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

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

原创
作者头像
repick
发布2022-05-10 13:45:38
4070
发布2022-05-10 13:45:38
举报
文章被收录于专栏:SalesforceSalesforce

一.通常状态下的访问权限

现有Profile是【Standard User】的两个User,User名分别是【Garza Laura】,【Chavez Julie】,通常状态下两个用户是不可以相互访问对方的数据。

1.【Sharing Settings】中首先设置Contact表的访问权限为【私有】

2.以User【Garza Laura】进行登录,并做成一条自己的数据

数据【Laura Test001】做成

3.以User【Chavez Julie】进行登录

看是否可以查看数据【Laura Test001】

我们发现不能查看数据【Laura Test001】,因为只有管理员和自己可以查看,接下来做共有设定,让这个User可以进行访问

二.共有规则做成

1.公开Group做成

2.共有规则做成

通过以下查询,发现已经做成Share的数据

代码语言:javascript
复制
SELECT Id, ContactId, UserOrGroupId, UserOrGroup.Name, ContactAccessLevel, RowCause
FROM ContactShare WHERE Contact.Name = 'Laura Test001'

3.测试

再次以User【Chavez Julie】进行登录,发现还是不能查看【Laura】做成的数据

原因分析:通过Contact表数据情况,发现AccountId的值是空的,我们试着插入一个值

插入后

这时我们发现Julie这个User就可以访问Laura做成的数据了。

4.自动插入AccountId的Trigger做成

插入Contact数据时,AccountId是可以为空值的,下边通过Trigger自动做成一条Account数据,然后关联到Contact表

ContactTrigger.trigger

代码语言:javascript
复制
trigger ContactTrigger on Contact (before insert, after insert) {
    if(Trigger.isinsert && Trigger.isBefore ){
        ContactHelper.BeforeInsert(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;
    }
}

效果展示:

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一.通常状态下的访问权限
    • 1.【Sharing Settings】中首先设置Contact表的访问权限为【私有】
      • 2.以User【Garza Laura】进行登录,并做成一条自己的数据
        • 3.以User【Chavez Julie】进行登录
        • 二.共有规则做成
          • 1.公开Group做成
            • 2.共有规则做成
              • 3.测试
                • 4.自动插入AccountId的Trigger做成
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档