首页 > 解决方案 > Apex 中的条件逻辑

问题描述

使用此示例作为参考:

trigger CaseTrigger on Case (after insert, after update) {
    if (Trigger.isInsert && Trigger.isAfter) {
        JCFS.API.createJiraIssue('10000', '10002');
    }
    if (Trigger.isUpdate && Trigger.isAfter) {
        JCFS.API.pushUpdatesToJira();
    }
}

我有一个要boolean__c在运行前检查的自定义字段。我期待能够做这样的事情:

trigger CaseTrigger on Case (after insert, after update) {
    if (Trigger.isInsert && Trigger.isAfter && boolean__c=true) {
        JCFS.API.createJiraIssue('10000', '10002');
    }
    if (Trigger.isUpdate && Trigger.isAfter && boolean__c=true) {
        JCFS.API.pushUpdatesToJira();
    }
}

这样它只会在boolean__c为真时运行。添加此逻辑的正确方法是什么?

标签: salesforceapex-code

解决方案


你可以这样做

trigger CaseTrigger on Case (after insert, after update) {
    if (Trigger.isInsert && Trigger.isAfter && trigger[0].boolean__c=true) {
        JCFS.API.createJiraIssue('10000', '10002');
    }
    if (Trigger.isUpdate && Trigger.isAfter && trigger[0].boolean__c=true) {
        JCFS.API.pushUpdatesToJira();
    }
}

但它只会检查第一个元素。当您在 UI 中一次编辑 1 个案例时可以,当您批量编辑某些内容时就不那么好了。理想情况下,您会创建一些List<Case> scope = new List<Case>();,循环遍历trigger.new,如果为真,则添加到列表中。然后仅在实际需要它的记录上调用您的函数。

如果不更改函数就无法做到这一点,它们不带参数,所以看起来它们直接在 trigger.new 上运行。这有点糟糕,没有简单的方法来重用它们。您必须对它们进行一些修改才能接受List<Case>(或者更多,取决于它们的内部实现,例如它们是否也使用 trigger.oldMap )


推荐阅读