【问题标题】:Not creating all records未创建所有记录
【发布时间】:2012-06-07 23:55:03
【问题描述】:

在顶点代码中,我编写了 2 个触发器。我有 2 个对象 A 和 B。创建 A 对象时,我需要创建 B 对象的记录。例如:当创建对象 A 的 1 条记录时,然后创建对象 B 的 4 条记录。我写了 2 个触发器 1 默认情况下是创建 A 对象时 B 对象中的某些字段(这是在插入之前,在更新之前)触发器和2触发器是在创建A的记录时创建对象B的记录(这是在插入之后,在更新之后)触发器。

但是当我创建对象 A 的记录时,创建了 4 个记录 ID。 但是,当使用 Apex Data Loader 创建对象 A 的记录时,当时为 A 创建了 2 条记录,但为 B 对象只创建了 4 条记录。这是为 A 对象的第二条记录创建的。

我把代码改成了

for(对象 e : Trigger.new){

for(){ 为 B 对象创建 4 条记录 }}

我这样做的时候遇到了这个错误

插入失败。第 0 行的第一个异常,ID 为 abcdef12345;第一个错误:INVALID_FIELD_FOR_INSERT_UPDATE,无法在插入调用中指定 Id:[Id]

任何机构都可以帮助我解决问题。 谢谢 阿努

【问题讨论】:

    标签: salesforce apex-code


    【解决方案1】:

    错误消息告诉您无法为 ID 字段分配值。 ID 字段受保护,其值由 Salesforce.com 自动生成。

    从插入语句中删除 ID 字段。

    【讨论】:

      【解决方案2】:

      在插入前触发器期间尚未填充 ID,因此您可能过早引用它,可能试图将 B 记录指向 A 记录。另一个问题是尝试为 B.Id 分配一个值。两个代码问题如下图所示:

      trigger trigA on A__c (before insert) {
          List<B__c> listB = new List<B__c>();
          for (A__c a : trigger.new) {
              B__c b = new B__c();
              B__c.reference_to_A__c = a.Id; // <-- Wrong! a.Id isn't populated yet in before insert
              B__c.Id = '...'; // <-- Wrong! Salesforce generates the Id field for you
              listB.add(b);
          }
          insert listB;
      }
      

      查看更多代码会很有帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多