gpt4 book ai didi

salesforce - 有没有办法将保存结果(用于插入 DML 操作)链接回 sObjects?

转载 作者:行者123 更新时间:2023-12-02 22:39:44 26 4
gpt4 key购买 nike

背景

我有一个需要插入的 sObjects 列表,但我必须首先检查插入是否成功。所以,我在执行插入之前设置一个数据库保存点并检查保存结果(对于插入语句)。因为,我不想在有错误的情况下处理,如果插入结果有错误,数据库会回滚到保存点。

问题与问题

我需要收集每个保存(插入)结果的错误,并将每个错误与导致错误的特定 sObject 记录相关联。根据文档Save results包含错误列表、插入记录的 Salesforce ID(如果成功)和成功指示符( bool 值)。

如何将保存结果关联到插入的原始 sObject 记录?

代码/示例

这是我整理的一个示例,用于演示该概念。该示例存在缺陷,因为 InsertResults 并不总是与 sObjectsToInsert 匹配。它不完全是我在自定义类中使用的代码,但它使用相同的逻辑。

Map<Id,sObject> sObjectsToInsert; // this variable is set previously in the code
List<Database.SaveResult> InsertResults;

Map<String,sObject> ErrorMessages = new Map<String,sObject>();

System.SavePoint sp = Database.setSavepoint();

// 2nd parameter must be false to get all errors, if there are errors
// (allow partial successes)
InsertResults = Database.insert(sObjectsToInsert.values(), false);

for(Integer i=0; i < InsertResults.size(); i++)
{
// This method does not guarantee the save result (ir) matches the sObject
// I need to make sure the insert result matches
Database.SaveResult ir = InsertResults[i];
sObject s = sObjectsToInsert.values()[i];

String em = null; // error message
Integer e = 0; // errors

if(!ir.isSuccess())
{
system.debug('Not Successful');
e++;

for(Database.Error dbe : ir.getErrors()) { em += dbe.getMessage()+' '; }
ErrorMessages.put(em, s);
}
}

if(e > 0)
{
database.rollback(sp);

// log all errors in the ErrorMessages Map
}

最佳答案

您的评论说 SaveResult 列表不能保证按顺序排列,但我相信它是按顺序排列的。我多年来一直使用这种技术,从来没有遇到过问题。

关于salesforce - 有没有办法将保存结果(用于插入 DML 操作)链接回 sObjects?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10915904/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com