вот мой триггер,не могу понять пошагово что нужно сделать с триггером
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. У тебя и так все записи обработаются. Да, если их там миллионы, то может вылететь по времени обработки.
Первый вариант полностью соответствует требованию.
Второй вариант - нерабочий (не помню как там ошибка правильно звучит, но нельзя изменять объект которые находится в контексте триггера в обход этого контекста).
хорошо, а как проверить, что он не упадет при вставке в базу более 200 записей?
[quote="Dmitry Shnyrev"]bulky trigger я так понимаю имеется в виду сделать триггер который будет поддерживать массовые DML операции (когда в Trigger.new больше одной записи). Первый вариант полностью соответствует требованию. Второй вариант - нерабочий (не помню как там ошибка правильно звучит, но нельзя изменять объект которые находится в контексте триггера в обход этого контекста).[/quote] хорошо, а как проверить, что он не упадет при вставке в базу более 200 записей?
[quote="Andrii Muzychuk"]хорошо, а как проверить, что он не упадет при вставке в базу более 200 записей?[/quote]хорошо, а как проверить, что он не упадет при вставке в базу более 200 записей?
Написать тест, который вставляет 201 запись ;-)
Написать тест, который вставляет 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
самая жуниорская ошибка.
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/