触发以防止用户将多个产品添加到商机

时间:2018-06-29 08:09:20

标签: triggers salesforce apex

因此,我写了一个触发器,以防止用户向同一机会输入多个机会产品,但是问题是当他同时添加多个机会产品时,我的触发器没有触发,Salesforce接受了它。作为一种产品。 我可以在触发器中添加些什么来解决此问题?

我的触发器:

trigger OpportunityLineItemBeforeInsert on OpportunityLineItem (before insert) {
    Set<Id>opportunityIds = new Set<Id>();



    // get all parent IDs

    for(OpportunityLineItem i : trigger.new)

    {

        opportunityIds.add(i.OpportunityId);

    }

    // query for related Olis (Opportunity Line Items)

    Map<Id, Opportunity> opps = new Map<Id, Opportunity>([SELECT ID, 
                                                          (SELECT ID 
                                                           FROM OpportunityLineItems) 
                                                          FROM Opportunity 
                                                          WHERE ID IN :opportunityIds]);

    for(OpportunityLineItem i : trigger.new)

    {

        if(opps.get(i.OpportunityId).OpportunityLineItems.size()>0)

        {

            i.addError('Your Message');

        }

    }
}

谢谢。

2 个答案:

答案 0 :(得分:0)

我可能会忽略与Oppty有关的任何事情。

您只希望创建一种产品,因此在创建时,LI的数量为0且您可以创建的正好为1,或者不是0且不能创建任何产品。

我只是在Oppty上创建一个汇总字段,计算产品数量。如果计数!= 0,则验证失败。如果count = 0,则在trigger.new中计数Olis,如果!= 1,则失败。

答案 1 :(得分:0)

您应该代替在产品上创建一个字段来存储父机会的ID,使该字段唯一,然后通过工作流程或流程构建器使用父机会的ID填充值,而不是为此编写代码。这样,如果添加第二个产品,则唯一约束将触发并阻止插入记录。

另一个选择是创建机会汇总,以计算机会产品的数量,然后添加一个验证规则,如果产品数量> 1,则显示错误。这样做的好处是您可以将错误消息设置为与使用第一个选项的通用重复错误消息相反。