blog
ブログ

オブジェクト数制限で泣く前に…。マスタデータを静的リソースのJSONで管理してみる!

泣く

こんにちは!

今日は、 マスタデータ管理について紹介したいと思います! Salesforceでマスタデータ管理というと… カスタムオブジェクトや、カスタム設定、カスタムメタデータタイプ等々、いくつか思い浮かびますが、 今日は静的リソースを使った管理方法についての紹介です。 それぞれメリット・デメリットありますが、 静的リソースの特徴は、JSONファイルで管理できる点にあります。

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クラスを用意するステップが無ければもっと楽なんだけどなーっと思います。

contact

ご相談・ご質問等ございましたら、お気軽にお問い合わせください。

翻訳

SFA/CRMに蓄積されている情報を活用する方法ガイド