Я пытаюсь создать элементы заказа из элементов OpportunityLine, а также создать заказ в Opportunity. Но я получаю следующую ошибку

Ошибка: выполнение AfterUpdate, вызванное: System.TypeException: Недопустимое значение идентификатора для этого типа SObject: 00kq0000008mWXjAAM: Class.Autocreation .CreatingOrders:

в этой конкретной строке [ordr1.Id = oli.Id;]

Какой идентификатор нужно взять, я не понимаю. Может ли кто-нибудь мне помочь. Заранее спасибо.

public class Autocreation {

    public static void CreatingOrders(List<Opportunity> newlist){
          set<Id> oppId = new set<Id>();
        for(Opportunity opp : newList){
            oppId.add(opp.id); //Adding Opportunity's to Set.    
             }
        List<Opportunity> oppList = [select id,name,StageName,Accountid, (select Status,Account.name,enddate from Orders)
                                     from Opportunity where Id =: oppId];

         List<OpportunityLineItem> oppList1 = [SELECT id,Quantity,Product2Id,
                                      UnitPrice,Description, TotalPrice,PricebookEntry.Name, PricebookEntry.Product2.Family,
                                      OpportunityId FROM OpportunityLineItem where OpportunityId =: oppId];



        List<Order> insrtordrs = new List<Order>();
        List<OrderItem> insrtordrs1 = new List<OrderItem>();

        for(Opportunity opp1 : oppList){
            for(OpportunityLineItem oli : oppList1 ){  
            if (opp1.Orders.size()>0){
                system.debug('Orders exists*******************' +opp1.Orders);

            } 
            else if(opp1.StageName == 'Closed-Won') {
              Order ordr =new Order();
              ordr.AccountId = opp1.AccountId;
              ordr.OpportunityId = opp1.id;
              ordr.Status = 'Draft';
              ordr.EffectiveDate = system.today();
              //ordr.ContractId = opp1.ContractId; 
              insrtordrs .add(ordr);

                OrderItem ordr1 =new OrderItem();
                ordr1.Id = oli.Id;
                ordr1.PricebookEntryId = oli.PricebookEntryId;
                ordr1.UnitPrice        = oli.UnitPrice;
                ordr1.Description      = oli.Description;
                ordr1.Quantity         = oli.Quantity;
                insrtordrs1 .add(ordr1);  

            }   
           }
        }
        insert insrtordrs ;
        insert insrtordrs1 ;

     }
}
0
Vijay Ganji 4 Июн 2019 в 11:00

1 ответ

Лучший ответ

Идентификатор — это поле, сгенерированное системой. Нам нужно назначить идентификатор заказа с новым идентификатором позиции. Как я понял, между элементом заказа и элементом возможности нет никакой связи. Попробуйте назначить ниже и проверьте Ordr1.id=Ordr.id .

-1
Sayanta Dandapat 4 Июн 2019 в 11:03
Вы не можете выполнить insert DML с заполненным полем Id вообще.
 – 
David Reed
4 Июн 2019 в 15:08