👻

【Apex】よく使う処理まとめ

2023/12/19に公開

はじめに

Apexで個人的によく使う処理をまとめました。

やりたいこと一覧

Listが空かどうか判定する

List<String> list1 = new List<String>();
List<String> list2 = new List<String>{'apple', 'banana'};

System.debug(list1.isEmpty());    // true
System.debug(list2.isEmpty());    // false

結論

list.isEmpty()

Tips

String.isEmpty(inputString) で文字列が '' 、もしくは null のときに true を返す。

String string1 = '';
String string2 = null;
String string2 = 'apple';

System.debug(String.isEmpty(string1));    // true
System.debug(String.isEmpty(string2));    // true
System.debug(String.isEmpty(string3));    // false

参考

https://developer.salesforce.com/docs/atlas.ja-jp.244.0.apexcode.meta/apexcode/apex_methods_system_list.htm#apex_System_List_isEmpty
https://developer.salesforce.com/docs/atlas.ja-jp.244.0.apexcode.meta/apexcode/apex_methods_system_string.htm#apex_System_String_isEmpty

Mapのキーをすべて取り出す

Map<String, String> colorCodes = new Map<String, String>();

colorCodes.put('Red', 'FF0000');
colorCodes.put('Blue', '0000A0');

System.debug(colorCodes.keySet());    // {'Red', 'Blue'}

結論

map.keySet()

Tips

map.keySet() の戻り値は Set

参考

https://developer.salesforce.com/docs/atlas.ja-jp.244.0.apexcode.meta/apexcode/apex_methods_system_map.htm#apex_System_Map_keySet

Mapの値をすべて取り出す

Map<String, String> colorCodes = new Map<String, String>();

colorCodes.put('Red', 'FF0000');
colorCodes.put('Blue', '0000A0');

System.debug(colorCodes.values());    // ('FF00000', '0000A0')

結論

map.values()

Tips

map.values() の戻り値は List

参考

https://developer.salesforce.com/docs/atlas.ja-jp.244.0.apexcode.meta/apexcode/apex_methods_system_map.htm#apex_System_Map_values

ListやSetに特定の要素を含むか判定する

List<String> fruitsList = new List<String>{'apple', 'banana'};
Set<String> fluitsSet = new Set<String>(fruitsList);

System.debug(fruitsList.contains('apple'));   // true
System.debug(fruitsList.contains('melon'));   // false
System.debug(fruitsSet.contains('apple'));    // true
System.debug(fruitsSet.contains('melon'));    // false

結論

list.contains(value)
set.contains(value)

参考

https://developer.salesforce.com/docs/atlas.ja-jp.244.0.apexcode.meta/apexcode/apex_methods_system_list.htm#apex_System_List_contains
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_methods_system_set.htm#apex_System_Set_contains

複数の親レコードと子レコードを一括で取得する

List<Account> accounts = [SELECT Name, (SELECT Name FROM Contacts) 
                          FROM Account]; 

Map<Id, List<Contact>> contactMap = new Map<Id, List<Contact>>();
for (Account account : accounts) {
  contactMap.put(account.Id, account.Contacts);
}
System.debug(contactMap);
// {0015j000018dA4IAAU = (), 
//  0015j000019OUY9AAO = (
//    Contact:{AccountId = 0015j000019OUY9AAO,
//             Id = 0035j000019froQAAQ, 
//             Name = Gonzalez Rose}, 
//    Contact:{AccountId = 0015j000019OUY9AAO,
//             Id = 0035j000019froRAAQ, 
//             Name = Forbes Sean}),
//  0015j000019OUYAAA4 = (
//    Contact:{AccountId = 0015j000019OUYAAA4, 
//             Id = 0035j000019froSAAQ, 
//             Name = Rogers Jack})}

結論

List<ParentApi> records = [SELECT field1, 
                                  field2, 
                                  ..., 
                                  (SELECT field3,
                                          field4,
                                          ..., 
                                   FROM (Child Relationship Name)) 
                           FROM ParentApi]; 

Tips

取得した子レコードには、親レコードへの参照関係項目も含まれる。

参考

https://developer.salesforce.com/docs/atlas.ja-jp.soql_sosl.meta/soql_sosl/sforce_api_calls_soql_relationships_query_using.htm

終わりに

随時更新します。

Discussion