Возможность обновления, когда лидерство вводится через триггер в Salesforce - PullRequest
0 голосов
/ 04 мая 2011

Я хочу написать групповой триггер (с учетом ограничений правительства), чтобы при вставке нового отведения, значение поля x которого было равно значению поля y некоторой возможности, оно обновляет поле z из эта возможность.

Я новичок в Salesforce и Apex, поэтому столкнулся с проблемой.

Любая помощь будет оценена.

Спасибо

Jitendra

1 Ответ

1 голос
/ 05 мая 2011

Есть ли у вас опыт разработки? С какими записями вы имеете дело? Если у вас есть более 10 000 возможностей, то вы очень быстро столкнетесь с проблемами!

(непроверенный) код, приведенный ниже, должен иметь смысл, если вы разработчик, но помните, что вы можете выполнять только 20 запросов SOQL, что позволяет 19 обновлений вызовов с 200 записями на вызов - так что это будет работать, только если у вас максимум 3800 возможности с любым заданным значением Y. Если вам нужно больше, вам нужно написать класс, который использует интерфейс Batchable и запустить его из триггера - вам нужно будет пройти через список значений X перед вызовом execute для него так что вы можете использовать их в запросе (см. здесь для документов на Batch Apex .

trigger LeadAfterInsert on Lead (after insert)
{
    // assuming string for the type of fields X & Y
    set<string> setXValues = new set<string>();
    list<Opportunity> liOpptysToUpdate = new list<Opportunity>();

    for(Lead sLead : trigger.new)
    {
        setXValues.add(sLead.FieldX);
    }

    for(Opportunity [] sOpportunityArr : [select Id, FieldZ, FieldY
                                            from Opportunity
                                            where FieldY in : setXValues
                                            limit 1000])
    {
        for(Opportunity sOpportunity : sOpportunityArr)
        {
            // field logic here, e.g.
            if(sOppty.FieldY != 0)
            {
                sOppty.FieldZ ++;
            }

            liOpptysToUpdate.add(sOppty);

            // can only update 200 records at once so we check the list size here
            if(liOpptysToUpdate.size() == 200)
            {
                update liOpptysToUpdate;
                liOpptysToUpdate.clear();
            }
        }
    }

    // deal with any stragglers
    if(liOpptysToUpdate.size() > 0)
    {
        update liOpptysToUpdate;
    }
}
...