SFDC 复合主键的一般实现方法
我们都知道,Salesforce的每个Record都是只能一个主键ID,并且ID是添加时自动生成的。 并且这个ID很特殊,Salesforce通过算法,可以通过这个ID能知道这条记录是哪个Object的记录。 这个以后我们再讨论。
今天我主要想跟大家讲一下,如何在Salesforce里实现多个字段共同达成唯一索引。 首先Salesforce本身 Text字段是支持 Unique设置的
但是不支持多个字段联合共同Unique。
解决方案
- 在Object中添加一个Text字段,勾选Unique设置的字段,Label,API参照名任意
- (可选)在Object中添加一个Formula(Text)字段,公式为想要实现复合Unique的字段用文本拼接,Label,API参照名任意
- 在创建时用Workflow Rule ,Process Builder,Flow Builder(Record Trigger),Apex Trigger(before insert)其中一种工具
- 将Formula(Text)字段的值(没添加的话就在这里拼接) 赋值 到 第一步创建的 Unique字段上即可
- 将公式字段和Unique字段从Page Layout上隐藏
这样就可以在添加记录时 实现类似复合字段Unique索引的效果
原理就是先用formula拼接复合主键,再用自动化工具来把复合主键值更新到设定好Unique的字段上,由于Unique字段不允许重复,所以重复的复合主键会插入失败。
例子,这里的支部Code(BranchCode__c)和年月(YearMonth__c) 两个共同构成主键,也就是要求支部Code(BranchCode__c)和年月(YearMonth__c)在Object里不能重复
我用 PK_Formula 字段来存放 支部Code(BranchCode__c)和年月(YearMonth__c) 拼接在一起后的值
BranchCode__c & YearMonth__c
支部コード-年月 是我设定的Unique Text字段
在添加时,我利用Process Builder,将 PK_Formula 字段的值赋值到 支部コード-年月 字段上
当我尝试登录一条同样支部Code和年月的记录时
Error发生了,没有保存成功,这样就达成了重复复合主键check。后面可以将 PK_Formula, 支部コード-年月 字段从page layout上隐藏。