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を用意します。
Tabの用意
ページができましたので、そのページを参照するタブを作成します。
「アプリケーションの設定」⇒「作成」⇒「タブ」から、「Visualforce タブ」を新規作成します。
以上で一括登録用の画面ができました。
作成したタブから画面を参照してみましょう!
下記のような画面が見えていたら成功です。