如何批量更新Salesforce中的帐户



我正试图通过匹配Salesforce Id来更新200多个Account实体的Description。我正在使用以下触发器,

Trigger MyNew_tr_U on Account (after update) {
set<ID> ids = Trigger.newMap.keyset(); 
for(ID id : ids) 
{
newChangeTable__c ch = new newChangeTable__c();
ch.Status__c = 'update'; 
ch.Url__c = id; 
ch.Process__c = false; 
insert ch;
}

}

但是当我做csv文件的数据导入时,我得到以下错误:

CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY:MyNew_tr_U: execution of AfterUpdate
caused by: System.DmlException: Insert failed. First exception on row 0; first error: 
STORAGE_LIMIT_EXCEEDED, storage limit exceeded: []

我怎样才能使触发器工作?

进一步了解下面的@眼霜答案。如果我在Name中没有过滤器,会出现同样的错误。

在帐户上触发MyNew_tr_U(更新后({列表<newChangeTable__c>toInsert=新列表<newChangeTable__c>((;

for(Account a : trigger.new){
Account old = trigger.oldMap.get(a.Id);
toInsert.add(new newChangeTable__c(
Status__c = 'update',
Url__c = a.Id,
Process__c = false
));        
}
insert toInsert;

}

数据库空间不足。转到安装程序->存储使用情况并查看。也许你可以删除一些东西,也许(如果是生产(你可以从SF购买更多的存储空间(每个"数据包"有10 GB,或者你购买的每个用户许可证都可以获得更多的存储(。这只适用于制作,沙盒的大小是固定的,所以你唯一的方法就是删除一些旧的东西。

至于扳机本身。。。

  • 如果您想要对其进行bulkify,请将insert语句移出循环
  • 您可能只想在某些关键字段实际发生更改时才运行它,而不是在每次编辑时都不更改任何内容
  • 这可能会很快占用您的存储空间,考虑使用标准字段历史跟踪表(可选地使用FAT,支付额外费用(,或者可能将数据存储在";Big Objects;而不仅仅是普通的自定义对象

类似这样的东西,只有在名称更改时,它才会插入您的东西。

Trigger MyNew_tr_U on Account (after update) {
List<newChangeTable__c> toInsert = new List<newChangeTable__c>();
for(Account a : trigger.new){
Account old = trigger.oldMap.get(a.Id);
if(a.Name != old.Name){
toInsert.add(new newChangeTable__c(
Status__c = 'update',
Url__c = a.Id,
Process__c = false
));
}
}
insert toInsert;
}

最新更新