誰かがこのトリガーを変更するのを手伝ってくれるかどうか疑問に思っていました. 商談が成立/成立した後に更新され、古い (正しいマネージャー) が担当者の現在のマネージャーで上書きされるという問題があります。これは、Actuals を作成するトリガーがあり、Actuals を編集して古い Manager ではなく現在の Manager に書き込むため、問題です。これを編集するのに最適な場所はどこか、本当に混乱しています。トリガーの古いマップで StageName が Closed/Won であり、StageName が現在 Closed/Won に等しい場合、if ステートメントの配置と ifelse ステートメントの後の下部です。現在の実績を更新しないでください。トリガーは次のとおりです。
trigger CreateActualsAndTargets on Opportunity (after insert, after update)
{
if(Trigger.isUpdate || Trigger.isInsert)
{
Map<ID,Opportunity> l_OpportunityOwners = new Map<ID,Opportunity> ([Select id,o.Owner.ManagerId,Contract_ID__c,StageName,Amount,AccountId,CloseDate, o.OwnerId, Type From Opportunity o where id in:trigger.newMap.keySet()]);
GooalAndActuals l_oGooalAndActuals = new GooalAndActuals ();
for(Opportunity l_oOpportunityNew:l_OpportunityOwners.values())
{
System.debug('********************Trigger Start***********************');
if(l_oOpportunityNew.StageName=='Closed/Won')
{
ID SalesRepGoalID,ManagerGoalID;
//modified
l_oGooalAndActuals = new GooalAndActuals ();
l_oGooalAndActuals.opportunityNew=l_oOpportunityNew;
//Goal Creation
SalesRepGoalID=l_oGooalAndActuals.CreateGoal(l_oOpportunityNew.OwnerId);//SalesRep Goal Creation
if(l_oOpportunityNew.Owner.ManagerId!= null)
{
ManagerGoalID=l_oGooalAndActuals.CreateGoal(l_oOpportunityNew.Owner.ManagerId);//Manager Goal Creation
}
//Actual Deletion
if(Trigger.isUpdate)
{
l_oGooalAndActuals.DeleteActual(l_oOpportunityNew.Id);
}
//Actual Creation
l_oGooalAndActuals.CreateActual(l_oOpportunityNew.OwnerId,SalesRepGoalID);//SalesRep Actual Creation
if(l_oOpportunityNew.Owner.ManagerId!= null)
{
l_oGooalAndActuals.CreateActual(l_oOpportunityNew.Owner.ManagerId,ManagerGoalID);//Manager Actual Creation
}
}
/*
Start: Project
* Author |Author-Email |Date |Comment
* ----------------|------------------------|-----------|--------------------------------------------------
* Sakonent Admin |abrar.haq@sakonent.com |02.16.2012 |Initial code
* Purpose: It will remove Actual record(s) associated to Opportunity if Stage goes from 'Closed/Won' to some other stage.
*/
else if(Trigger.isUpdate)
{
if(Trigger.oldMap.get(l_oOpportunityNew.Id).StageName == 'Closed/Won' && l_oOpportunityNew.StageName != 'Closed/Won')
{
l_oGooalAndActuals = new GooalAndActuals ();
l_oGooalAndActuals.opportunityNew=l_oOpportunityNew;
l_oGooalAndActuals.DeleteActual(l_oOpportunityNew.Id);
}
}
/*End: Project */
}
}
}