Запуск по определенному типу записи учетной записи - PullRequest
0 голосов
/ 02 июля 2018

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

Вот мой класс обработчика:

public class AP03_OpportunityLineItem {
    public static void preventmultipleOpportunityLineItems(List<OpportunityLineItem> listOppLineItems){
        Set<Id>opportunityIds = new Set<Id>();
        // get all parent IDs
        for(OpportunityLineItem oli : listOppLineItems)
        {
            //Condition to pick certain records
            opportunityIds.add(oli.OpportunityId);
        }
        // query for related Opportunity Line Items
        Map<Id, Opportunity> mapOpportunities = new Map<Id, Opportunity>([SELECT ID,
                                                                          (SELECT ID 
                                                                           FROM OpportunityLineItems) 
                                                                          FROM Opportunity 
                                                                          WHERE ID IN :opportunityIds]);
        // opp counter of new records
        Map<Id, Integer> mapOppCounter = new Map<Id, Integer>();
        for(OpportunityLineItem oli : listOppLineItems)
        {
            if(mapOppCounter.containsKey(oli.OpportunityId))
            {
                mapOppCounter.put(oli.OpportunityId, mapOppCounter.get(oli.OpportunityId)+1);
            }
            else
            {
                mapOppCounter.put(oli.OpportunityId, 1);
            }
        }
        //loop to add error if condition violated
        for(OpportunityLineItem olitems : listOppLineItems)
        {
            if(mapOpportunities.get(olitems.OpportunityId).OpportunityLineItems.size()+mapOppCounter.get(olitems.OpportunityId)>1 || olitems.Quantity > 1)
            {
                olitems.addError('Ce client peut seulement loué un seul véhicule.');
            }
        }
    }
}

Вот мой класс PAD:

public class PAD 
{
    public static String bypassTrigger; //List of bypassed triggers

        public static final User user;

        static {
            user = [Select BypassApex__c
                   from User 
                   where Id=:UserInfo.getUserId()];
            bypassTrigger = ';'+ user.BypassApex__c+ ';';                                                                                                                                   
            System.debug('>>>>> PAD constructor : END <<<<<'+bypassTrigger);
        }

        /**
        * Method used for the class PAD
        * @param c object of type JonctionServicePrestation__c
        * @return boolean
        */
         public static boolean canTrigger(string Name){
            return (bypassTrigger.indexof(';' + Name + ';') == -1);

         }



}

И вот мой триггер:

trigger OpportunityLineItemBeforeInsert on OpportunityLineItem (before insert) {
    if(PAD.canTrigger('AP03_OpportunityLineItem')){
        AP03_OpportunityLineItem.preventmultipleOpportunityLineItems(Trigger.new);
    }
}

1 Ответ

0 голосов
/ 03 июля 2018

Вам нужно будет циклически просмотреть свои возможности и создать список идентификаторов возможностей, затем запросить возможность, чьи учетные записи в списке, с типом записи, который вы хотите сопоставить, и создать набор идентификаторов, соответствующих указанному типу записи. затем проверьте, содержит ли набор accountId обрабатываемой возможности, чтобы узнать, пропустить или обработать ее.

Set<Id> recordTypeOpp = new Set<ID>();
SET<Id> opportunityIds = new Set<Id>();
Id recordTypeIdYouWant = Schema.SObjectType.Account.getRecordTypeInfosByName().get('Record Type Name').getRecordTypeId();

for(OpportunityLineItem  item : listOppLineItems){
    opportunityIds.add(item.OpportunityId);
}

for(Opportunity item : [SELECT Id FROM Opportunity WHERE opportunityIds IN :opportunityIds and Account.RecordTypeId = :recordTypeIdYouWant]){
    recordTypeOpp.add(item.Id);
}

 for(OpportunityLineItem olitems : listOppLineItems)
 {
    if(recordTypeOpp.contains(olitems.OpportunityId)){
      //do processing
    }
     else {
       continue;
    }
 }
...