salesforce - Apex 批处理类从自定义对象字段更新联系人字段
问题描述
我有一个顶点批处理类,我需要根据相关自定义对象字段的状态更新联系人布尔字段“Active_Subscriptions__c”。
自定义对象“Subscriptions__c”有一个“Contact__c”主详细信息字段,还有一个“IsActive__c”布尔字段。
我想运行一个批处理,以查找与按 ID 的联系人记录相关的任何订阅。如果发现任何活动订阅,则需要将联系人记录上的“Active_Subscriptions__c”设置为 true,否则设置为 false。
我对 apex 还很陌生,似乎无法触发我需要的结果,在此先感谢。
global class BatchContactUpdate implements Database.Batchable<sObject>{
List <Subscription__c> mapSubs = new List <Subscription__c> ();
List <Contact> contactlist = new List <Contact> ();
global Database.QueryLocator start(Database.BatchableContext BC) {
return DataBase.getQueryLocator([SELECT Id, Contact__c FROM Subscription__c WHERE Contact__c =:contactlist]);
}
global void execute(Database.BatchableContext BC , List <Subscription__c> mapSubs) {
for (Subscription__c sub : mapSubs){
for (Contact con : contactList){
if (con.Id == sub.Contact__c && sub.IsActive__c == true){
contactlist.add(new Contact(
Active_Subscriptions__c = true
));
} else {
contactlist.add(new Contact(
Active_Subscriptions__c = false
));
}
}
}
update contactlist;
}
global void finish(Database.BatchableContext BC){
}
}
解决方案
看起来你的联系人列表一开始是空的,所以它不会返回任何结果。但是对于您的查询,您为什么不做类似的事情
[SELECT Id, (SELECT Id FROM Subscriptions__r WHERE Is_Active__c = true) FROM Contact];
在你的执行中
List<Contact> cList = new List<contact>();
for(Contact c : scope){
c.Active_Subscriptions__c = c.Subscriptions__r.size() > 0;
cList.add(c);
}
//etc... to start
推荐阅读
- java - 是否可以在 Thrift 结构中定义联合、嵌套结构和容器的默认值?
- python - Pytorch、Keras 风格的多个输出
- c# - C# DataTable 更新字符串列,格式为 exeption
- javascript - $(document).keydown/up 在使用辅助键时不起作用
- notepad++ - 如何添加用户定义语言的功能和相关描述?
- c++ - 如何修复不推荐使用的枚举的 Doxygen 警告?
- circuit-sdk - 电路中的斜线命令
- laravel - Laravel - mariaDB 连接被拒绝
- c# - 重新开始的滚动列表
- jhipster - 在配置文件 jhipster 中启用 prometheus 启动失败