オブジェクト数制限で泣く前に…。マスタデータを静的リソースのJSONで管理してみる!
こんにちは!
今日は、 マスタデータ管理について紹介したいと思います! Salesforceでマスタデータ管理というと… カスタムオブジェクトや、カスタム設定、カスタムメタデータタイプ等々、いくつか思い浮かびますが、 今日は静的リソースを使った管理方法についての紹介です。 それぞれメリット・デメリットありますが、 静的リソースの特徴は、JSONファイルで管理できる点にあります。
あとは、 カスタムオブジェクトやカスタム項目をポチポチ作る必要がない、 データローダを使わない所も良いですね! 今回は、ありがちな「都道府県データ」を例に、早速やっていきますよ~。
・サンプルのJSONデータを用意する。
まずは、静的リソースに格納するJSONデータを用意します。
[
{ "no": "1", "name": "北海道"},
{ "no": "2", "name": "青森県"},
{ "no": "3", "name": "岩手県"},
{ "no": "4", "name": "宮城県"},
{ "no": "5", "name": "秋田県"},
{ "no": "6", "name": "山形県"},
{ "no": "7", "name": "福島県"},
{ "no": "8", "name": "茨城県"},
{ "no": "9", "name": "栃木県"},
{ "no": "10", "name": "群馬県"},
{ "no": "11", "name": "埼玉県"},
{ "no": "12", "name": "千葉県"},
{ "no": "13", "name": "東京都"},
{ "no": "14", "name": "神奈川県"},
{ "no": "15", "name": "新潟県"},
{ "no": "16", "name": "富山県"},
{ "no": "17", "name": "石川県"},
{ "no": "18", "name": "福井県"},
{ "no": "19", "name": "山梨県"},
{ "no": "20", "name": "長野県"},
{ "no": "21", "name": "岐阜県"},
{ "no": "22", "name": "静岡県"},
{ "no": "23", "name": "愛知県"},
{ "no": "24", "name": "三重県"},
{ "no": "25", "name": "滋賀県"},
{ "no": "26", "name": "京都府"},
{ "no": "27", "name": "大阪府"},
{ "no": "28", "name": "兵庫県"},
{ "no": "29", "name": "奈良県"},
{ "no": "30", "name": "和歌山県"},
{ "no": "31", "name": "鳥取県"},
{ "no": "32", "name": "島根県"},
{ "no": "33", "name": "岡山県"},
{ "no": "34", "name": "広島県"},
{ "no": "35", "name": "山口県"},
{ "no": "36", "name": "徳島県"},
{ "no": "37", "name": "香川県"},
{ "no": "38", "name": "愛媛県"},
{ "no": "39", "name": "高知県"},
{ "no": "40", "name": "福岡県"},
{ "no": "41", "name": "佐賀県"},
{ "no": "42", "name": "長崎県"},
{ "no": "43", "name": "熊本県"},
{ "no": "44", "name": "大分県"},
{ "no": "45", "name": "宮崎県"},
{ "no": "46", "name": "鹿児島県"},
{ "no": "47", "name": "沖縄県"}
]
今回は、都道府県コード(key:no)と都道府県名(key:name)を用意しました。 うーん、どこからどうみてもマスタデータ。 UTF8で保存して静的リソースへアップロード。簡単です!
・ApexでJSONデータを扱う。
静的リソースの準備が出来たら、 早速、SOQLで静的リソースに格納されているJSONデータを取得しましょう。
SELECT Id,Name,Body FROM StaticResource WHERE Name = 'samplejson'
次に、ApexでJSONを扱うために、下記のメソッドでJSONからApexのデータに変換していきます。 JSON Methods | deserialize(String jsonString, System.Type apexType) deserializeメソッドは、引数に、 StringのJSONデータと、JSONデータを格納するためのクラスを渡す必要があります。 なので、今回の都道府県データに沿った下記のApexクラスを用意して、第2引数とします。
public class SampleClass {
public Integer no;
public String name;
}
・匿名実行で動作確認。
ここまで準備出来たら、開発者コンソールで動作を確認してみましょう!
StaticResource sr = [SELECT Id,Name,Body FROM StaticResource WHERE Name = 'samplejson'];
String jsonData = sr.Body.toString();
List<jsonList> jsonList = (List<jsonList>)JSON.deserialize(jsonData, List<jsonList>.class);
System.debug('***** 都道府県リスト *****');
for (SampleClass s : jsonList) {
System.debug(s.no+':'+s.name);
}
記事で紹介しているJSONデータを静的リソースに上げれば、同様の結果が確認できますよー。 Apexクラスを用意するステップが無ければもっと楽なんだけどなーっと思います。