LoginSignup
13
9

More than 3 years have passed since last update.

【SalesForce】外部CSVをレコードとして取り込む

Last updated at Posted at 2017-02-09

こんにちは。

SalesForceにCSVファイルを取り込みます。
そして、レコードとして環境内に新規作成します。

まずVFに操作用のテーブルを作ります。

<table border="0" style="width: 100%;">
  <tr>
    <td><apex:inputFile filename="{!cv.Title}" value="{!cv.VersionData}"/></td>
    <td>
      <apex:commandButton value="取込" action="{!ImportBtn}" />
    </td>
  </tr>
</table>

そしてApexにCSVを取り込む記述をします。
これがメインとなるクラスです。

/** 入力ファイル */
public ContentVersion cv {get; set;}

/** ボタン押した時のメソッド */
public PageReference ImportBtn(){

    // CSVリスト化してオブジェクトを作成しInsert
    List<List<String>> strListLists = new List<List<String>>();

    // 取込みCSV
    String csvFile = this.cv.VersionData.toString();
    //文字列からCSV行毎のリストを作成
    List<String> rowList = csvFile.split('\r\n', 0);
    //CSV行毎のリストから項目のリストを作成
    for(Integer i = 1 ; i < rowList.size() ; i++){
        // 項目単位にリスト化し、取込みCSVリストに追加
        List<String> strLists = rowList[i], ',';
        strListLists.add(strLists);
    }

    // リスト作成
    List<Target__c> targetList = insertCreator(strListLists);

    // 新規作成
    insert targetList;

    return null;
}

そしてこれはCSV内の文字列をリストに変換する処理

public List<Target__c> insertCreator(List<List<String>> targetStringList) {

    // 更新用のリストを作成
    List<Target__c> insertList = new List<Target__c>();

    // 対象の番号を付けてMapに保存
    numberCounter = 0;
    Map<Integer,String> targetStringMap = new Map<Integer,String>();
    for (String targetString : stringList) {
        targetStringMap.put(numberCounter,targetString);
        numberCounter += 1;
    }

    // Mapの値を取得して更新用リストに詰める
    for (List<String> stringList : targetStringList) {
        Target__c target = new Target__c();
        target.Name = targetStringMap.get(0);
        insertList.add(target);
    }

    return insertList;
}

これで読み込みたいCSVファイルを選択して、ボタン押したら取込み出来ます。

ついでに出来上がったことをメールにして誰かに送りつけてやりましょう。

まずメールの送信設定の中を書き換える必要があります。
設定⇒メール管理⇒送信⇒アクセス権を『すべてのメール』に設定。
※設定してあったらそのままで。

private void sendMail() {

    // メールアドレス設定(送り先・送り主)
    String labelAddress = 'watachan@test.jp';
    String userAddress = UserInfo.getUserEmail();
    String[] address =labelAddress.split(',');
    address.add(userAddress);

    // 件名
    String subject = '';

    // メール本文
    String body = '';

    // ログオブジェクト
    BatchLog log = new BatchLog();

    // メールを新規作成
    Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();

    // 件名
    subject = '【 成功のお知らせ 】\r\n';
    body += '成し遂げたぜ。\r\n';

    // メール設定
    mail.setToAddresses(address);
    mail.setSubject(subject);
    mail.setPlainTextBody(body);

    // メール送信
    Messaging.sendEmail(new Messaging.SingleEmailMessage[] {mail});

}

以上です。

13
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
9