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

Posted

技术标签:

【中文标题】触发以防止用户向商机添加多个产品【英文标题】:Trigger to prevent User From Adding more than one product to an opportunity 【发布时间】:2018-06-29 08:09:20 【问题描述】:

所以我写了一个触发器来防止用户在同一个机会中输入多个机会产品,但问题是当他同时添加多个机会产品时,我的触发器不会触发,销售人员会接受它作为一个产品。 我可以在触发器中添加什么来解决这个问题?

我的触发器:

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');

        

    

提前谢谢你。

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

以上是关于触发以防止用户向商机添加多个产品的主要内容,如果未能解决你的问题,请参考以下文章

向函数添加 ID 以防止出现非空错误

防止 UIScrollView 中的 UISlider 触发滚动

防止使用 angular.js 提交多个表单 - 禁用表单按钮

sql 应用自定义逻辑以防止某些用户通过应用登录触发器登录MSSQL。这个特定的例子着眼于用户的na

锁定文件以防止多个用户访问它的最佳方法是啥

如何防止触发多个 jQuery UI droppables?