0

我正在尝试通过匹配 Salesforce ID 来更新 200 多个客户实体的描述。我正在使用以下触发器,

 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: []

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

进一步到下面的@eyescream 答案。如果我没有名称中的过滤器怎么办,这会产生相同的错误。

在帐户上触发 MyNew_tr_U(更新后){ List<newChangeTable__c> toInsert = new List<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;

}

4

1 回答 1

1

您的数据库空间不足。转到设置 -> 存储使用情况并查看。也许您可以删除某些内容,也许(如果是生产)您可以从 SF 购买更多存储空间(每个“数据包”有 10 GB,或者您购买的每个用户许可证都会获得更多存储空间)。这只适用于产品,沙盒的大小是固定的,所以你唯一的方法是删除一些旧的东西。

至于触发器本身...

  • 你会想要扩大它,将插入语句移出循环
  • 您可能只想在某些关键字段实际更改时才运行它,而不是在每次没有更改任何内容的编辑时运行它?
  • 这可能会很快耗尽您的存储空间,考虑使用标准字段历史跟踪表(可选使用FAT,额外付费)或者可能将数据存储在“大对象”中,而不仅仅是普通的自定义对象

像这样的东西,只有在名称更改时才会插入你的东西。

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;
}
于 2022-03-03T10:45:16.350 回答