salesforce - 我需要关于顶点触发问题解决方案之一的建议
问题描述
我有一个带有 3 个自定义字段的自定义对象“任务跟踪”:
1) Lookup to user object.
2) Number of open task (number field)
3) Number if closed task (number field)
当用户 A 创建任务,让我们保持状态为 IN PROGRESS 时,我需要在 Task Tracking 对象中使用以下详细信息创建记录:
1) Lookup field = user A
2) Number of open task = 1
3) Number of closed task = 0;
现在下一次,当同一个用户 A 创建另一个任务时,不应该创建新的任务跟踪记录,而应该只更新任务编号字段。
我已经尝试了很多。每当创建任务时,我都能够创建任务跟踪记录,但它正在为我正在创建的每个任务创建新的任务跟踪对象
trigger TrackTask2 on Task (before insert) {
List<sujya__Task_Tracking__c> li = new List<sujya__Task_Tracking__c>();
sujya__Task_Tracking__c s = new sujya__Task_Tracking__c();
if(Trigger.isBefore && Trigger.isInsert){
for(Task t:Trigger.new){
s.sujya__User__c = t.CreatedById;
li.add(s);
}
insert li;
}
}
解决方案
您应该先查询系统以查看是否存在。如果是,则更新它,如果不是,则创建一个。
trigger TrackTask2 on Task (before insert) {
Set<Id> users = new Set<Id>();
for (Task t : Trigger.new) {
users.add(t.ownerId); //might be t.whoId;
}
List<sujya__Task_Tracking__c> existingTrackers = [SELECT Id, sujya__User__c, number_open_task__c, number_closed_task__c FROM sujya__Task_Tracking__c WHERE sujya__User__c IN :users];
Map<Id, sujya__Task_Tracking__c> userTrackerMap = new Map<Id, sujya__Task_Tracking__c>();
for (sujya__Task_Tracking__c tracker : existingTrackers) {
userTrackerMap.put(tracker.sujya__User__c, tracker);
}
for (Task t : Trigger.new) {
sujya__Task_Tracking__c userTracker = existingTrackers.get(t.ownerId);
if (userTracker == null) {
userTracker = new sujya__Task_Tracking__c();
userTracker.number_open_task__c = 1;
userTracker.sujya__User__c = t.ownerId;
} else {
userTracker.number_open_task__c += 1;
}
userTrackerMap.put(userTracker.sujya__User__c, userTracker);
}
upsert userTrackerMap.getValues();
}
这将帮助您完成大部分工作,但是您将不得不为关闭任务添加逻辑以减少打开任务的数量和关闭任务的数量。
推荐阅读
- excel - 读取 Excel 数据
- python - 如何在 Github 中保存和编辑 .py 文件
- java - Azure 自定义视觉参数 this.client.endpoint() 是必需的,不能为空
- python - Python:解压字典时为什么不需要 2 个变量?
- ruby-on-rails - Shrine 中未定义的方法“图像”
- css - 单击时更改的带有 css 的动画
- python - 如何创建自定义异常?此异常不起作用
- r - 如何遍历for循环中的参数
- javascript - javascript:针对元素数组查找元素字符串的出现。出现返回 0
- laravel - 如何在 Cpanel 中为实时服务器安装 gRPC 扩展