Apex Batch Class 从自定义对象字段更新联系人字段
Apex Batch Class to update Contact field from custom object field
我有一个顶点批次 class,我需要根据相关自定义对象字段的状态更新联系人布尔字段 '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){
}
}
看起来您的联系人列表一开始是空的,因此 return 不会有任何结果。但是对于你的查询,你为什么不做类似
的事情呢?
[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
我有一个顶点批次 class,我需要根据相关自定义对象字段的状态更新联系人布尔字段 '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){
}
}
看起来您的联系人列表一开始是空的,因此 return 不会有任何结果。但是对于你的查询,你为什么不做类似
的事情呢?[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