如何用Apex插入含不可写入必填字段的Salesforce自定义对象?
问题解决方案
核心原因
公式字段(如Cust_Id__c)是Salesforce自动计算的字段,本身不支持手动写入,直接在Apex中给它赋值会触发Field is not writeable错误。而且公式字段的“必填”要求,是指它的计算结果不能为空,而非需要手动输入值。
解决方法
插入记录时,只需要给公式字段依赖的源字段赋值,Salesforce会自动根据公式逻辑计算出Cust_Id__c的值,无需手动设置该字段:
- 先确认
Cust_Id__c的公式逻辑,找到它依赖的字段(比如自定义数字字段Cust_Number__c,公式为'Cust: ' & TEXT(Cust_Number__c))。 - 修改Apex代码,移除对公式字段的赋值操作,只给依赖字段赋值:
List<CustObj__c> CustList = new List<CustObj__c>(); // 仅给公式依赖的字段赋值,无需设置Cust_Id__c CustObj__c Item_0 = new CustObj__c(Name__c='TEST1', Cust_Number__c=123); CustList.add(Item_0); CustObj__c Item_1 = new CustObj__c(Name__c='TEST2', Cust_Number__c=456); CustList.add(Item_1); insert CustList;
自定义元数据对象的情况
自定义元数据对象的公式字段同样是自动计算,不支持手动赋值,处理逻辑和普通自定义对象一致:
- 无需手动设置公式字段的值,只需确保其依赖的字段有合法值,系统会自动计算。
- 注意:自定义元数据对象不能用普通Apex DML(
insert/update)操作,需要通过Metadata.Operations类、Setup界面或Metadata API进行部署维护。
内容的提问来源于stack exchange,提问作者Tracey
相关产品推荐
相关产品推荐

