Установка checkbox триггером before insert/before update
Здравствуйте. Я недавно совсем познакомился с VIsualforce. Много чего не понятно пока. Поэтому ищу помощи у знающих. У меня имеется объект, хранящий в себе информацию о каких-то товарах. На странице же необходимо автоматически выставлять поле есть/нет в наличии (checkbox) триггером before insert/before update в зависимости от значения в поле количество. Как провернуть это колдунство, подскажите пожалуйста.
public String inputName{get;set;} public String inputNameDel{get;set;} public String inputPrice{get;set;} public String inputNumber{get;set;} public String inputType{get;set;} public String inputDate{get;set;} public String inputRelease{get;set;} public String inputNameSearch{get;set;} public Boolean Availb=false;
private Product__c merchandise; public DisplayProducts(Product__c item) { this.merchandise = item; } public String name { get { return merchandise.Name__c; } } public Decimal price{ get { return merchandise.Price__c; } } public Decimal kolvo{ get { return merchandise.Kolvo__c; } } public String type{ get { return merchandise.Type__c; } } public String date_add{ get { return merchandise.Date_Add__c.format(); } } public String date_del{ get { return merchandise.Date_Del__c.format(); } } public Boolean availability{ get { return merchandise.Availability__c; } }
} }
Я прекрасно понимаю, как плохо выглядит мой код) Но пока ничего лучше не получилось)
Тестовое задание В apex/triggers создаешь триггер с именем name, где name - твое название туда пишешь
trigger name on Product__c (before insert, before update) {//product__c замени на своё,как и названия остальных объектов for (Product__c p : Trigger.new) { if (g.Count__c == 0) {//само условие - если количество товара == 0 p.Availability__c = false;//чекбокс 0 } else p.Availability__c = true;//чекбокс 1 } }
p.s по крайней мере, я делал так и колдунства тут нет, колдунство начнется к моменту создания тестового класса По твоему коду - Id__c и Name__c можно было не создавать - они создаются автоматически, а давать объектам "транслитные(Kolvo__c)" названия - нехорошо.
Во-первых, FROM Product__c без WHERE - можно влететь в лимиты. Если на орге больше 50000 продуктов, то получишь exception Во-вторых, почему if(inputNameDel.equals(pr.Name__c)){ не переместить в WHERE запроса?
FROM Product__c WHERE Name__c = :inputNameDel
B третьих, у ВСЕХ объектов в Salesforce по-умолчанию есть поле Name. Зачем делать кастомное Name__c И напоследок самое страшное - DML операция внутри FOR!!! (DML операция - это "delete pr;")
Всю твою красоту что ты написал выше можно преобразовать в одну строчку:
delete [SELECT Id FROM Product__c WHERE Name__c = :inputNameDel LIMIT 10000];
Если разберешься что эта строчка делает по каждому элементу - поймешь очень многое в SF
Не знаю как там у вас задача тестовая ставится, но вообще вот так массово удалять записи только по имени - это большое зло! На продакшен такое никак нельзя выпускать :))) Вообще во всем мире delete операции под большим запретом - если хотите удалить запись - лучше сделать поле isDeleted (Boolean) и ставить его в TRUE. Естественно во всех запросах после этого надо добавить проверку что isDelete = FALSE чтобы не выбирать такие записи. Но поверьте, бизнес только спасибо скажет
А вот еще: При добавлении или удалении записей, по нажатию кнопки страница обновляется, но без изменений. Запись добавляется (или удаляется) только после того, как я ручками обновлю страницу. Так ведь быть не должно?
А вот еще: При добавлении или удалении записей, по нажатию кнопки страница обновляется, но без изменений. Запись добавляется (или удаляется) только после того, как я ручками обновлю страницу. Так ведь быть не должно?
Есть у меня еще уж больно глупый вопрос) В apex workbook, в разделе Lesson 2: Adding Test Methods описаны действия для добавдения тестовых методов, а именно: 1.In the Repository tab, click Classes in the Setup Entity Type section, and then click New. Так вот: я не могу найти эту вкладку Repository(( Где же она?
И еще:
Для обновления записей в таблице без перезагрузки страницы Dmitry Shnyrev в соседней ветке советовал обернуть ее в
Есть у меня еще уж больно глупый вопрос) В apex workbook, в разделе Lesson 2: Adding Test Methods описаны действия для добавдения тестовых методов, а именно: 1.In the Repository tab, click Classes in the Setup Entity Type section, and then click New. Так вот: я не могу найти эту вкладку Repository(( Где же она?