Salesforceの画面からcsvファイルをアップロードし、カスタムオブジェクトを生成(登録)する方法
How to upload from sfdc page and create custom object.
これも仕事で実装することになったのですが、通常、csvによるデータのロードにはDataloaderを使用しますよね。
これを使うと柔軟なデータロードができるので、我々技術者としては重宝していると思います。
ただ、お客様が通常の運用で利用するには、少し敷居が高いような気がしています。
今回の案件では、お客様がデータの入力を担当しますが、一回に入力するデータの件数が多いことが想定されるため、一括登録できることが望ましくなっています。
Leadであれば「Web to Lead」の機能があったり、管理者であればカスタムオブジェクト用のウィザードを利用することもできるのですが、権限の制限されているprofileのユーザだとそうもいきません。
また、Javaのアプリを作成してAPIでオブジェクト生成という手もありますが、アプリの配布が難しかったり、端末に制限がある場合もあります。
そこで今回は、SFDCの画面から、「ファイルの選択」ボタンでcsvファイルを指定して、「Upload」ボタンで一括登録を行うことを考えました。
Uploadするファイルに不正なレコードが含まれていたら、CustomObjectのcreateを行わないよう、Validation Checkも行うこととします。
まずは、今回のサンプル用にカスタムオブジェクトを作成します。それから、csvファイルをアップロードして、サンプルオブジェクトを生成するapexクラスとvisualforceページを作成してみることにしましょう。
カスタムオブジェクトの用意
SampleCustomObjという名前で、サンプルのカスタムオブジェクトを作成します。
項目は、Nameと、ObjNoという名前のテキスト型項目とします。APIでの参照名はそれぞれ、NameとObjNo__cになりますね。
Upload用ApexClassの用意
最初にUploadを行うApexクラスを作成します。今回は「SamleObjUploader」という名前にしましょう。
public with sharing class SamleObjUploader { //最大アップロード件数(Maximam Upload record count) public Integer MAX_RECORD_NUM = 100; public String MSG_OVER_MAX_RECORD = 'Over Max upload record count!'; public string nameFile{get;set;} public Blob contentFile{get;set;} public String[] filelines = new String[]{}; public List datatoupload = new List(); String strSampleObjNo; String strSampleObjName; //エラーの件数。(Error count) public Integer errorCnt = 0; public Pagereference ReadFile() { nameFile=contentFile.toString(); filelines = nameFile.split('n'); Integer recordCnt = filelines.size(); //最大アップロード件数チェック(Maximam Upload record count check) if (recordCnt > MAX_RECORD_NUM) { ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR, MSG_OVER_MAX_RECORD)); return null; } try{ for (Integer i=1;i getuploadedDatas() { if (datatoupload!= NULL) if (datatoupload.size() > 0) return datatoupload; else return null; else return null; } public boolean checkInputData(String[] inputvalues) { boolean checkResult = true; strSampleObjNo = inputvalues[0]; strSampleObjName = inputvalues[1]; //chack something if(strSampleObjNo.length()==0) { ApexPages.Message errormsg = new ApexPages.Message(ApexPages.severity.ERROR,'Error!!'); ApexPages.addMessage(errormsg); errorCnt++; checkResult = false; }else { //chack something } return checkResult; } }
UploadTemplate用静的リソースの用意
次に、お客様に利用してもらう、サンプルのcsvファイルをSFDCのVisualForcePageから利用できるように、静的リソースとして 登録します。
詳しくは、前回の記事「Salesforceの画面で利用できる、静的リソースを登録する方法」を参考にしてください。
今回は、「SampleTemplate」という名前で登録しました。
Upload用VisualForcePageの用意
次に、一括登録を行うVisualForcePageを用意します。
* Please use this file for Template.Here
Tabの用意
ページができましたので、そのページを参照するタブを作成します。
「アプリケーションの設定」⇒「作成」⇒「タブ」から、「Visualforce タブ」を新規作成します。
以上で一括登録用の画面ができました。
作成したタブから画面を参照してみましょう!
左記のような画面が見えていたら成功です。
コラム
salesforce関連の本って少ないですよね。また、Web上の情報は詳しいのですが、広大すぎて、調べようと思ったときに手元にリファレンス的な本があると助かります。以下は私のおすすめの本です。
Force.comのすべて ~設計・開発 実践マニュアル~ 初めてSalesForceでWebアプリを作ろうとしたとき、どこから手を付けていいか迷いました。そんなときに役立つ初心者向けの本です。細かいところに手が届くたぐいの本ではないですが、一通り、体系的に学べるので、役に立ちます。
改訂新版 Salesforceプログラミングバイブル すこし高い本ですが、豊富なソースが載っており、上の本を勉強して次の段階に進んだ技術者には役立。こんなことってSalesForceでできないの?と思ったときにも役に立ちます。
タグ:Salesforce
[…] 以前の記事で、お客様アップロードするcsvファイルをSalesForce上のカスタムオブジェクトとして登録する方法を書いたのですが、今回は、SFDCは単なるファイルストレージで、データを取 […]