Регистрация  |  Вход

как сделать bulky trigger из моего

вот мой триггер,не могу понять пошагово что нужно сделать с триггером


trigger Availability_Trigger on Product__c (before insert, before update) {
for (Product__c p : Trigger.new) {
if (p.Quantity__c == 0 ||p.Quantity__c ==NULL) {
p.Availability__c = false;
}
else
p.Availability__c = true;
}
}


как я понимаю должно получится что то вроде такого


trigger Availability_Trigger on Product__c (before insert, before update) {
List<Product__c> pr = [SELECT Name__c, Price__c, Quantity__c, Type__c, Date__c, Release_Date__c, Availability__c FROM Product__c WHERE Id IN :Trigger.newMap.KeySet()];

for(Product__c p : pr){
if (p.Quantity__c == 0 ||p.Quantity__c ==NULL) {
p.Availability__c = false;
}
else
p.Availability__c = true;
}
}

вот мой триггер,не могу понять пошагово что нужно сделать с триггером 


trigger Availability_Trigger on Product__c (before insert, before update) {
    for (Product__c p : Trigger.new) {
        if (p.Quantity__c == 0 ||p.Quantity__c ==NULL) {
        p.Availability__c = false;
        }
        else
        p.Availability__c = true;
     }
}


как я понимаю должно получится что то вроде такого


trigger Availability_Trigger on Product__c (before insert, before update) {
        List<Product__c> pr = [SELECT Name__c, Price__c, Quantity__c, Type__c,  Date__c, Release_Date__c, Availability__c FROM Product__c WHERE Id IN :Trigger.newMap.KeySet()];
   
    	for(Product__c p : pr){
        if (p.Quantity__c == 0 ||p.Quantity__c ==NULL) {
            p.Availability__c = false;
            }
            else
            p.Availability__c = true;
            }
    }

bulky trigger я так понимаю имеется в виду сделать триггер который будет поддерживать массовые DML операции (когда в Trigger.new больше одной записи).

Первый вариант полностью соответствует требованию.

Второй вариант - нерабочий (не помню как там ошибка правильно звучит, но нельзя изменять объект которые находится в контексте триггера в обход этого контекста).

bulky trigger я так понимаю имеется в виду сделать триггер который будет поддерживать массовые DML операции (когда в Trigger.new больше одной записи).

Первый вариант полностью соответствует требованию.

Второй вариант - нерабочий (не помню как там ошибка правильно звучит, но нельзя изменять объект которые находится в контексте триггера в обход этого контекста).

Пока ты не делаешь SOQL или DML - там нечего bulkify. У тебя и так все записи обработаются. Да, если их там миллионы, то может вылететь по времени обработки.

Пока ты не делаешь SOQL или DML - там нечего bulkify. У тебя и так все записи обработаются. Да, если их там миллионы, то может вылететь по времени обработки.

Dmitry Shnyrev
bulky trigger я так понимаю имеется в виду сделать триггер который будет поддерживать массовые DML операции (когда в Trigger.new больше одной записи).

Первый вариант полностью соответствует требованию.

Второй вариант - нерабочий (не помню как там ошибка правильно звучит, но нельзя изменять объект которые находится в контексте триггера в обход этого контекста).

хорошо, а как проверить, что он не упадет при вставке в базу более 200 записей?

[quote="Dmitry Shnyrev"]bulky trigger я так понимаю имеется в виду сделать триггер который будет поддерживать массовые DML операции (когда в Trigger.new больше одной записи).

Первый вариант полностью соответствует требованию.

Второй вариант - нерабочий (не помню как там ошибка правильно звучит, но нельзя изменять объект которые находится в контексте триггера в обход этого контекста).[/quote]

хорошо, а как проверить, что он не упадет при вставке в базу более 200 записей?

Andrii Muzychuk
хорошо, а как проверить, что он не упадет при вставке в базу более 200 записей?
хорошо, а как проверить, что он не упадет при вставке в базу более 200 записей?

[quote="Andrii Muzychuk"]хорошо, а как проверить, что он не упадет при вставке в базу более 200 записей?[/quote]хорошо, а как проверить, что он не упадет при вставке в базу более 200 записей?

Написать тест, который вставляет 201 запись ;-)

Написать тест, который вставляет 201 запись ;-)

Andrii Muzychuk
Написать тест, который вставляет 201 запись ;-)

@isTest public static void TestTrigger3(){
Product__c pr3;
for(Integer i =0; i<250; i++)
{
pr3 = new Product__c();
insert pr3;
System.debug(pr3);
}
}

типа такого ?
В итоге в логе ошибка" too many DML statements: 151".

[quote="Andrii Muzychuk"]Написать тест, который вставляет 201 запись ;-)[/quote]

 @isTest public static void TestTrigger3(){
    Product__c pr3;
    for(Integer i =0; i<250; i++)
    {
       pr3 = new Product__c();
       insert pr3;
       System.debug(pr3); 
    } 
}

типа такого ?
В итоге в логе ошибка" too many DML statements: 151".

Ты тестовое задание делаешь? Что это за insert внутри for-цикла? Где ты видел такой пример?
https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_testing_utility_classes.htm
https://trailhead.salesforce.com/en/modules/apex_testing

Ты тестовое задание делаешь? Что это за insert внутри for-цикла? Где ты видел такой пример?  
https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_testing_utility_classes.htm
https://trailhead.salesforce.com/en/modules/apex_testing

cool
В итоге в логе ошибка" too many DML statements: 151".

самая жуниорская ошибка.
https://www.appseconnect.com/salesforce-apex-best-practices/

[quote="cool"]В итоге в логе ошибка" too many DML statements: 151".[/quote]
:D самая жуниорская ошибка.
https://www.appseconnect.com/salesforce-apex-best-practices/