「x」フィールドの値が商談の「y」フィールドの値と同じである新しいリードが挿入されたときに、この商談の「z」フィールドを更新するように、一括トリガーを作成したいと考えています (管理者の制限を念頭に置いてください)。
私はセールスフォースと頂点に慣れていないので、問題に直面しています。
どんな助けでも大歓迎です。
ありがとう
ジテンドラ
「x」フィールドの値が商談の「y」フィールドの値と同じである新しいリードが挿入されたときに、この商談の「z」フィールドを更新するように、一括トリガーを作成したいと考えています (管理者の制限を念頭に置いてください)。
私はセールスフォースと頂点に慣れていないので、問題に直面しています。
どんな助けでも大歓迎です。
ありがとう
ジテンドラ
開発経験はありますか?何枚のレコードを扱っていますか?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;
}
}