Salesforce Trailhead 取引先の取引先責任者を挿入する Queueable Apex クラスを作成する方法
環境
Salesforce Apex
Trailhead
概要
取引先の取引先責任者を挿入する Queueable Apex クラスを作成する。
特定の州の各取引先に同じ取引先責任者を挿入する Queueable Apex クラスを作成します。
Apex クラスを作成する:
名前: AddPrimaryContact
インターフェース: Queueable
第 1 引数として Contact sObject、第 2 引数として州の略称の文字列を受け入れるクラスのコンストラクタを作成する
execute メソッドでは、コンストラクタに渡された州の略称で指定された BillingState を持つ最大 200 件の取引先をクエリし、各取引先に関連付けられた Contact sObject レコードを挿入する。sObject clone() メソッドを参照する。
名前: AddPrimaryContact
インターフェース: Queueable
第 1 引数として Contact sObject、第 2 引数として州の略称の文字列を受け入れるクラスのコンストラクタを作成する
execute メソッドでは、コンストラクタに渡された州の略称で指定された BillingState を持つ最大 200 件の取引先をクエリし、各取引先に関連付けられた Contact sObject レコードを挿入する。sObject clone() メソッドを参照する。
名前: AddPrimaryContact インターフェース: Queueable 第 1 引数として Contact sObject、第 2 引数として州の略称の文字列を受け入れるクラスのコンストラクタを作成する execute メソッドでは、コンストラクタに渡された州の略称で指定された BillingState を持つ最大 200 件の取引先をクエリし、各取引先に関連付けられた Contact sObject レコードを挿入する。sObject clone() メソッドを参照する。
Apex テストクラスを作成する:
名前: AddPrimaryContactTest
テストクラスで、BillingState NY の取引先レコード 50 件と BillingState CA の取引先レコード 50 件を挿入する
AddPrimaryContact クラスのインスタンスを作成し、ジョブをキューに登録し、BillingState が CA の 50 件の取引先それぞれについて取引先責任者レコードが挿入されたことを確認する
単体テストは AddPrimaryContact クラスに含まれるすべてのコード行をカバーし、結果のコードカバー率が 100% になる必要がある
実装サンプル
1.AddPrimaryContactクラスの定義
public class AddPrimaryContact implements Queueable {
private Contact cont;
private String str;
public AddPrimaryContact(Contact cont, String str){
this.cont = cont;
this.str = str;
}
public void execute(QueueableContext context) {
List<Contact> contList = new List<Contact>();
List<Account> accList = [select id FROM Account WHERE BillingState = :str LIMIT 200];
for(Account uu : accList){
Contact c = cont.clone(false,false);
c.AccountId = uu.Id;
contList.add(c);
}
insert contList;
}
}
public class AddPrimaryContact implements Queueable {
private Contact cont;
private String str;
public AddPrimaryContact(Contact cont, String str){
this.cont = cont;
this.str = str;
}
public void execute(QueueableContext context) {
List<Contact> contList = new List<Contact>();
List<Account> accList = [select id FROM Account WHERE BillingState = :str LIMIT 200];
for(Account uu : accList){
Contact c = cont.clone(false,false);
c.AccountId = uu.Id;
contList.add(c);
}
insert contList;
}
}
public class AddPrimaryContact implements Queueable { private Contact cont; private String str; public AddPrimaryContact(Contact cont, String str){ this.cont = cont; this.str = str; } public void execute(QueueableContext context) { List<Contact> contList = new List<Contact>(); List<Account> accList = [select id FROM Account WHERE BillingState = :str LIMIT 200]; for(Account uu : accList){ Contact c = cont.clone(false,false); c.AccountId = uu.Id; contList.add(c); } insert contList; } }
2.テストクラスAddPrimaryContactTestの定義
@isTest
public class AddPrimaryContactTest {
@isTest
static void aaa(){
List<Account> accList = new List<Account>();
for(Integer i = 0;i<50;i++){
Account acc = new Account ();
acc.Name = 'Test'+i;
acc.BillingState = 'NY';
accList.add(acc);
}
for(Integer i = 0;i<50;i++){
Account acc = new Account ();
acc.Name = 'Test'+i+i;
acc.BillingState = 'CA ';
accList.add(acc);
}
insert accList;
Contact con = new Contact(LastName='aaa');
insert con;
AddPrimaryContact target = new AddPrimaryContact (con,'CA');
System.Test.startTest();
System.enqueueJob(target);
System.Test.stopTest();
}
}
@isTest
public class AddPrimaryContactTest {
@isTest
static void aaa(){
List<Account> accList = new List<Account>();
for(Integer i = 0;i<50;i++){
Account acc = new Account ();
acc.Name = 'Test'+i;
acc.BillingState = 'NY';
accList.add(acc);
}
for(Integer i = 0;i<50;i++){
Account acc = new Account ();
acc.Name = 'Test'+i+i;
acc.BillingState = 'CA ';
accList.add(acc);
}
insert accList;
Contact con = new Contact(LastName='aaa');
insert con;
AddPrimaryContact target = new AddPrimaryContact (con,'CA');
System.Test.startTest();
System.enqueueJob(target);
System.Test.stopTest();
}
}
@isTest public class AddPrimaryContactTest { @isTest static void aaa(){ List<Account> accList = new List<Account>(); for(Integer i = 0;i<50;i++){ Account acc = new Account (); acc.Name = 'Test'+i; acc.BillingState = 'NY'; accList.add(acc); } for(Integer i = 0;i<50;i++){ Account acc = new Account (); acc.Name = 'Test'+i+i; acc.BillingState = 'CA '; accList.add(acc); } insert accList; Contact con = new Contact(LastName='aaa'); insert con; AddPrimaryContact target = new AddPrimaryContact (con,'CA'); System.Test.startTest(); System.enqueueJob(target); System.Test.stopTest(); } }