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

как сделать 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;
}
}

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

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

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

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

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

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

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

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

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

Написать тест, который вставляет 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".

Ты тестовое задание делаешь? Что это за 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/

Interesting information? Help us, post link to social media..