2015-09-06 4 views
0

2 пользовательские объектыApex Trigger с пользовательскими объектами

1.Merchandise
2.invoice

всякий раз, когда новый товар создается авто-фактура должен быть created.As новичок в вершине , пожалуйста, медведь со мной. Любой, пожалуйста, исправьте мой код.

код:

trigger createinvoice on Merchandise2__c (after insert,after update) { 

list<Invoice2__c>line = new list<Invoice2__c>(); 

for(Merchandise2__c mer:Trigger.new){ 
    Invoice2__c li = new Invoice2__c(); 
    line =[select id from Invoice2__c ]; 
    li.name = mer.Name; 
    li.Status__c='open'; 
    li.id = mer.id; 

    line.add(li); 
} 

    insert line; 
} 
+0

Пожалуйста, помните одно золотое правило в программировании Apex .... НИКОГДА НЕ PUT SOQL запрос в цикле !!! ..... вы поразите губернатор легко ограничивается –

+0

@BlackMamba привет благодарю за золотое правило. – Sravanthy

ответ

0

Сначала удалите после обновления с вашего триггера, если вы не хотите новый счет-фактуру, созданную каждый раз, когда кто-то обновляет запись товар.

Я не уверен, что вы пытались выполнить с помощью строки выбора. "line = [select id from Invoice__c];" это, кажется, ничего не делает. Также вы пытаетесь установить поле id счета-фактуры на идентификатор товарной записи. Вы не можете этого сделать. Вам потребуется поле поиска в записи счета, указывающее на товар. Ниже я назвал это merchandiseKeyField.

Надеюсь, это поможет.

trigger createinvoice on Merchandise2__c (after insert,after update) { 
    //if you don't remove after Update then check which trigger 
    if(Trigger.IsInsert){ 
     list<Invoice2__c> invoices = new list<Invoice2__c>(); 
     for(Merchandise__c mer: trigger.new){ 
      invoices.add(new Invoice2__c(li.name = mer.name, 
              li.merchandiseKeyField = mer.id); 
     } 
     insert invoices; 
    } 
} 
+0

@Psymm ... привет благодарю вас за предложение мне .... я внесет изменения в код, как вы упомянули, и попробует agian выполнить код. – Sravanthy

0

заменить петлю с этим:

for(Merchandise2__c mer:Trigger.new){ 
    Invoice2__c li = new Invoice2__c(); 
    li.name = mer.Name; 
    li.Status__c='open'; 
    line.add(li); 
} 
+0

@ Daniel ... hey tnq для ur кода я попробовал, но это не сработало .... я просто могу создать товарную запись, так как товар и счет-фактура не имеют отношения отношения поиска, мне нужно сопоставить идентификатор товара со счетом-фактурой id .... но я не могу сделать tat ... – Sravanthy

+0

@Sravanthy жаль, что я не следую ... что вы имеете в виду, что у них нет поиска, но вам нужно соответствовать идентификаторам ... , если вы не может сохранить счет-фактуру, можете ли вы выслать нам какую ошибку вы получите? – Daniel