Apex 共享即将支持标准对象使用自定义行原因(Winter'27)
保护 Apex 共享:标准对象上的自定义行原因
两项冬季'27 改进,简化 Salesforce 中的记录共享。学习如何在所有权变更时保留手动共享,并在标准对象上使用自定义行原因以减少变通,改善共享管理。
十多年来,标准对象不支持自定义行原因。当你需要从 Apex 分享记录时,必须使用手动行原因。.由于 Salesforce 在记录所有者变更时会删除手动共享,所以你必须想办法绕过。
有两个增强功能消除了这些变通的必要。“ 转移记录时保留手动共享 ”设置现已开放。自定义行原因,也称为 Apex 共享原因,正在 Metadata API 中为标准对象推广 ,预计将在十月底前覆盖所有组织。
在这篇文章中,我们将探讨记录转移时的“保持手动共享”和标准对象的自定义行原因。
手动共享记录转移
可用性 :目前已经可用了。
在共享设置中,在传输记录时开启“保留手动共享 ”。手动共享则能在所有权变更中存活,你可以移除之前为此设计的变通方法。

标准对象的自定义行原因
可用性 :正在上线;所有组织将在十月底前获得。
Apex 管理共享需要 Apex 共享理由。Salesforce 将其存储在 每个共享记录的 RowCause 字段中;本文称之为自定义行原因 。你现在可以在标准对象上定义一个,就像在自定义对象上定义一样。详情请参见使用 Apex 共享记录 。
以下示例定义了案件中值班专家分享的原因,使用元数据 API:
<?xml version="1.0" encoding="UTF-8"?>
<CustomObject xmlns="http://soap.sforce.com/2006/04/metadata">
<sharingReasons>
<fullName>On_Call_Expert__c</fullName>
<label>On-Call Expert</label>
</sharingReasons>
</CustomObject>
用一个 package.xml 部署,Case.On_Call_Expert__c 是 SharingReason 成员。
然后你可以在 Apex 中使用:
CaseShare share = new CaseShare();
share.CaseId = caseId;
share.UserOrGroupId = userId;
share.CaseAccessLevel = 'Edit';
share.RowCause = Schema.CaseShare.RowCause.On_Call_Expert__c;
insert share;
你也可以在 Flow 中自定义行原因。
自定义行可以让你的 Apex 共享与用户手动共享分开,Salesforce 在所有者更换时不会删除它们。在共享表中,管理员可以看到每个用户为何拥有访问权限。因为每个理由都是独立的,你可以为一个原因更新或删除共享,而不会涉及其他原因。与“保留手动共享”设置不同,自定义行原因不会改变用户手动共享的行为。11 月,你可以在 AIforce 和 Agentforce 设置中管理自定义行原因 。
结论
2027年冬季,当记录所有者变更时,你有两种方式可以保留共享。
- 如果你没有在代码中创建共享,在转移记录时开启“保留手动共享”。这是一个组织范围的环境。
- 如果代码、流程或集成在标准对象上创建了共享,请切换到自定义行原因。你的共享能在所有者变更后保存下来,与用户的手动共享保持独立,并显示每个用户为何有访问权限。
你可能只需要其中一个。首先,审查创建 CaseShare、AccountShare 或其他标准共享记录的代码。
浙公网安备 33010602011771号