0

「x」フィールドの値が商談の「y」フィールドの値と同じである新しいリードが挿入されたときに、この商談の「z」フィールドを更新するように、一括トリガーを作成したいと考えています (管理者の制限を念頭に置いてください)。

私はセールスフォースと頂点に慣れていないので、問題に直面しています。

どんな助けでも大歓迎です。

ありがとう

ジテンドラ

4

1 に答える 1

1

開発経験はありますか?何枚のレコードを扱っていますか?1万を超える機会がある場合は、すぐに問題が発生します。

以下の(テストされていない)コードは、開発者であれば意味がありますが、実行できるSOQLクエリは20回のみで、1回の呼び出しあたり200レコードで19回の更新呼び出しが可能です。したがって、これは、最大3800の機会がある場合にのみ機能します。 Yの値を指定します。さらに必要な場合は、Batchableインターフェイスを使用するクラスを作成し、トリガーから起動する必要があります。executeを呼び出す前に、X値のリストを通過する必要があります。クエリでそれらを使用します(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;
    }
}
于 2011-05-04T23:49:22.843 に答える