您好我是salesforce的新手,我需要一些帮助来解决Apex触发器问题。
我尝试使用Opportunity上的触发器创建合约记录。当Opportunity SatgeName更改为“Pending win”时,以下代码会创建一个Contract记录。问题是当机会更新时,代码似乎不起作用。请让我知道我哪里出错了。
附上的是代码。
trigger CreateContract on Opportunity (after insert, before update) {
List<Contract> conttoinsert = new List<Contract>();
for (Opportunity opp : Trigger.new) {
// Create contract record only when the Stage is Updated to "Pending Win"
if (opp.StageName == 'Pending win') {
Contract con = new Contract();
con.Opportunity_Name__c = opp.id;
con.Account = opp.Account;
con.CurrencyIsoCode = opp.CurrencyIsoCode;
conttoinsert.add(con); // For Bulk processing of the Records.
} //end if
} // End of For
// Inserting the New Contract Record.
try {
insert conttoinsert;
} catch (system.Dmlexception e) {
system.debug (e);
}
}
任何帮助都是高度赞赏的。
由于
答案 0 :(得分:0)
通常你的代码似乎没问题,但请尝试下面的代码。我将触发器规则从before update
更改为after update
并删除了try..catch
语句,因为它会在异常上升的情况下隐藏您的信息。
如果您的代码有任何问题,您可以获得: 1.在插入记录不存在的情况下,我们在触发器中定义的CommonException 2.可能在旧版本中捕获的System.DMLException。如果出现这些错误,请在评论中分享。
请注意,这不是生产代码,此代码仅用于测试目的
trigger CreateContract on Opportunity (after insert, after update) {
List<Contract> conttoinsert = new List<Contract>();
for (Opportunity opp : Trigger.new) {
// Create contract record only when the Stage is Updated to "Pending Win"
if (opp.StageName == 'Pending win') {
Contract con = new Contract();
con.Opportunity_Name__c = opp.id;
con.Account = opp.Account;
con.CurrencyIsoCode = opp.CurrencyIsoCode;
conttoinsert.add(con); // For Bulk processing of the Records.
} //end if
} // End of For
// Inserting the New Contract Records if these records exist
if ( !conttoinsert.isEmpty()) {
insert conttoinsert;
} else {
throw new CommonException('There are no records for insertion');
}
// define own implementation of Exception
public class CommonException extends System.Exception{}
}