Salesforce:如果记录具有标记为false的复选框字段,如何防止记录的“ upsert”(从顶点作业执行)?

时间:2019-05-31 19:42:36

标签: salesforce apex apex-code

Salesforce问题:

我们必须从计划的Job中更新帐户。插入新记录没有问题,但是仅当特定复选框字段设置为true时才应更新现有记录(否则不更新)。同样,由于我们知道顶点代码是从系统上下文运行的。

我正在寻找一种方法,该方法不涉及通过使用ID搜索然后在升序之前检查该字段值来从代码中提取记录。

感谢您的帮助。

代码

List<Account> accountList = new List<Account>(accountsToUpdate);           
upsert accountList MY_COMPOSITE_KEY__c;

1 个答案:

答案 0 :(得分:0)

使验证规则仅将Your_Checkbox__c作为错误条件。或者在帐户上创建一个before insert, before update触发器(如果您还没有),它将检查trigger.new中的所有记录并对其调用addError()。验证规则是首选,因为它只是配置,没有代码。

两者的问题是,它将导致您的整个交易终止。如果您的批次更新200个帐户,并且其中一个具有此复选框,则此失败将阻止全部更新。这样做是为了确保系统状态稳定(阅读有关“原子操作”或“ ACID”的信息),您将不需要半途更新的数据...

因此,您可能必须通过调用Database.upsert(accountsToUpdate, External_ID__c, false);来减轻这种情况,这样它才能保存它可以和不抛出异常的内容...