Apex のパッチコード > 前処理①
public class SampleBatchJob implements Database.Batchable {
public Database.QueryLocator start(Database.BatchableContext BC) {
return Database.getQueryLocator([SELECT Id FROM Contact]);
}
duplicated_contacts = Contact.all
Slide 23
Slide 23 text
Apex のパッチコード > 前処理①
public class SampleBatchJob implements Database.Batchable<
SObject> {
public void execute(
Database.BatchableContext BC,
List duplicatedContacts
) {
// Collect all emails from the contacts
Set duplicatedContactEmails = new Set();
for (Contact duplicatedContact : duplicatedContacts) {
duplicatedContactEmails
.add(contact.Email);
}
leads = Lead
.where(
email: duplicated_contacts.pluck(:email)
)
Slide 24
Slide 24 text
Apex のパッチコード > 前処理①
// ...続き...
// Query leads with emails matching the duplicatedContact emails
Map leadsMap = new Map();
for (Lead lead :
[SELECT Id, Email FROM Lead WHERE Email IN :contactEmails]
) {
if (!leadsMap.containsKey(lead.Email)) {
leadsMap.put(lead.Email, lead);
}
}
// ...本処理へ...
leads = Lead
.where(email: duplicated_contacts.pluk(:email) )
.group_by(:email)
Slide 25
Slide 25 text
Ruby の模擬コード > 本処理①
class RubySampleBatchJob < BatchJob
def perform
# ...
duplicated_contacts.each do |duplicated_contact|
lead = leads[duplicated_contact.email]
Slide 26
Slide 26 text
Apex のパッチコード > 本処理①
for (Contact duplicatedContact : duplicatedContacts) {
Lead lead = leadsMap.get(contact.Email);
lead = leads[duplicated_contact.email]
Slide 27
Slide 27 text
Ruby の模擬コード > 本処理②
if lead
Database.LeadConvert leadConvert = new Database.LeadConvert();
Database.LeadConvertResult result =
Database.convertLead(leadConvert);
if (!result.isSuccess())
puts "Lead conversion failed ..."
next
end
技術検証 した Apex のコード
Slide 28
Slide 28 text
Apex のパッチコード > 本処理②
if (lead != null) {
Database.LeadConvert leadConvert = new Database.LeadConvert();
leadConvert.setLeadId(lead.Id);
Database.LeadConvertResult result =
Database.convertLead(leadConvert);
if (!result.isSuccess()) {
System.debug('Lead conversion failed ...');
continue;
}
技術検証 した Apex のコード
Apex のパッチコード > 本処理③
Contact originalContact =
[SELECT Id FROM Contact WHERE Id = :result.getContactId()];
mergeContacts(originalContact, duplicatedContact);
っぽい関数が実際の関数になった!