salesforce - 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
为真时运行。添加此逻辑的正确方法是什么?
解决方案
你可以这样做
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 )
推荐阅读
- python - 缺少 1 个必需的位置参数:函数中的“次”
- python - 类型错误:_append_dispatcher()
- ruby-on-rails - 任何避免使用 gsub 的方法!更换
- html - CSS中的文本居中或左边距和右边距不居中按钮
- json - 正则表达式匹配来自 JSON 的键值对
- oracle - Oracle 数据库读取监视器或计数器
- javascript - 为什么这个for循环运行了这么多次
- jupyter-notebook - 安装 Jupyter Lab Git 扩展的问题:前端/后端版本不匹配
- xaml - UWP:如何在绘画前获取元素大小
- python - 如何替换 Zeep 的默认布尔序列化程序?