Triggers 用于防止用户向opportunity添加多个产品的触发器

Triggers 用于防止用户向opportunity添加多个产品的触发器,triggers,salesforce,apex,Triggers,Salesforce,Apex,因此,我编写了一个触发器,以防止用户在同一个opportunity中输入多个opportunity product,但问题是,当用户同时添加多个opportunity product时,我的触发器不会触发,salesforce将其视为一个产品。 我可以在触发器中添加什么来修复此问题 我的触发器: trigger OpportunityLineItemBeforeInsert on OpportunityLineItem (before insert) { Set<Id>opp

因此,我编写了一个触发器,以防止用户在同一个opportunity中输入多个opportunity product,但问题是,当用户同时添加多个opportunity product时,我的触发器不会触发,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');

        }

    }
}

提前谢谢。

我可能会忽略任何与Oppty有关的内容

您只需要创建一个产品,因此在创建时,要么LI的数量为0,您可以创建一个,要么它不是0,您不能创建任何产品


我会在Oppty上创建一个汇总字段,计算产品数量。如果是伯爵0,则验证失败。如果计数=0,则在trigger.new和If=1,失败。

您应该在产品上创建一个存储父商机id的字段,使该字段唯一,并通过工作流或process builder使用父商机id填充值,而不是编写代码来执行此操作。这样,如果添加了第二个产品,惟一约束将触发并阻止插入记录

另一个选项是创建opportunity汇总以统计opportunity产品的数量,然后添加一个验证规则,如果产品数量>1,则该规则将显示错误。这样做的好处是,您可以使用第一个选项设置错误消息,而不是一般的重复错误消息