我正试图通过匹配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;
}