更新商机阶段时创建合同记录

时间:2014-03-11 04:09:06

标签: triggers salesforce apex

您好我是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);
    }

}

任何帮助都是高度赞赏的。

由于

1 个答案:

答案 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{}

}