Salesforce Sales force触发器用于插入更新的\u字段\u无效

Salesforce Sales force触发器用于插入更新的\u字段\u无效,salesforce,Salesforce,下面的代码在VisualForce页面上一次更新/插入一条记录时工作正常,收到错误“Insert failed….用于插入更新的插入字段无效,使用数据加载器时无法在插入调用中指定Id”(错误指向代码“Insert amcRecord”)。有人知道怎么修理吗 trigger Status on Cl__c (after insert, after update)  { List<AMC__c> amcRecord = new List<AMC__c>();

下面的代码在VisualForce页面上一次更新/插入一条记录时工作正常,收到错误“Insert failed….用于插入更新的插入字段无效,使用数据加载器时无法在插入调用中指定Id”(错误指向代码“Insert amcRecord”)。有人知道怎么修理吗

trigger Status on Cl__c (after insert, after update) 
{
    List<AMC__c> amcRecord = new List<AMC__c>();
    for (Cl__c cls: Trigger.new ) 
    {
        Cl__c oldcls = Trigger.oldMap.get(cls.Id);
        if (cls.Status__c == 'Completed' && (oldcls.Status__c != 'Completed'  )) 
        {
            AMC__c newAMC = new AMC__c();
            newAMC.Cl__c = cls.ID;
            newAMC.Default__c = true;  
            amcRecord.add(newAMC); 
            insert amcRecord;
        }
    }
}
Cl______c上的触发器状态(插入后、更新后) { List amcRecord=新列表(); 用于(Cl_u c cls:Trigger.new) { Cl\uu c oldcls=Trigger.oldMap.get(cls.Id); 如果(cls.Status\uu c=='Completed'&(oldcls.Status\uu c!='Completed')) { AMC__cnewamc=新的AMC__c(); newAMC.Cl_uuc=cls.ID; newAMC.Default_uuc=true amcRecord.add(newAMC) 插入amcRecord; }   } } 已更改

insert amcRecord;


它现在似乎正在工作。

amcRecord是一个列表,不是单个项目,但您正在为请求中的每个项目调用insert[对于UI而言,这将仅为1,但对于数据加载器,最多为200。您需要在for(…Trigger.new)循环完成后将insert amcRecord行移动到,以便只调用一次,例如

trigger Status on Cl__c (after insert, after update) 
{
    List<AMC__c> amcRecord = new List<AMC__c>();
    for (Cl__c cls: Trigger.new ) 
    {
        Cl__c oldcls = Trigger.oldMap.get(cls.Id);
        if (cls.Status__c == 'Completed' && (oldcls.Status__c != 'Completed'  )) 
        {
            AMC__c newAMC = new AMC__c();
            newAMC.Cl__c = cls.ID;
            newAMC.Default__c = true;  
            amcRecord.add(newAMC); 
        }
    }
    insert amcRecord;
}
Cl______c上的触发器状态(插入后、更新后) { List amcRecord=新列表(); 对于(Cl__CCLS:Trigger.new) { Cl\uu c oldcls=Trigger.oldMap.get(cls.Id); 如果(cls.Status\uuu c=='Completed'&(oldcls.Status\uu c!='Completed')) { AMC__cnewamc=新的AMC__c(); newAMC.Cl_uuc=cls.ID; newAMC.Default_uuuc=true; amcRecord.add(newAMC); } } 插入amcRecord; }
您不应该在循环内执行DML。如果您尝试插入已插入的记录,则会出现此异常

Account a =new Account();
a.name='Hello';
insert a;
insert a;
Account a =new Account();
a.name='Hello';
insert a;
insert a;