我想将一个按钮添加到名为“插入产品”的机会标题记录中。这会将机会ID发送到一个visualforce页面,该页面将有一个选择文件按钮和一个插入按钮,该按钮将循环显示CSV并将记录插入相关机会。使用Apex批次类Salesforce for OpportunityLineItem插入CSV
这是非技术用户使用数据加载器不是一个选项。
我得到了这个使用标准apex类的工作,但是当我加载超过1,000条记录(这将定期发生)时达到了极限。
我需要将其转换为批处理,但我不知道如何做到这一点。
任何一个能够指向正确的方向?我知道一批应该有一个开始,执行和完成。但是我不知道我应该在哪里拆分csv以及在哪里读取和加载?
我发现这个链接,我可以不知道如何翻译成我的要求:http://developer.financialforce.com/customizations/importing-large-csv-files-via-batch-apex/
这里是我的代码有其运作标准顶点类。
public class importOppLinesController {
public List<OpportunityLineItem> oLiObj {get;set;}
public String recOppId {
get;
// *** setter is NOT being called ***
set {
recOppId = value;
System.debug('value: '+value);
}
}
public Blob csvFileBody{get;set;}
public string csvAsString{get;set;}
public String[] csvFileLines{get;set;}
public List<OpportunityLineItem> oppLine{get;set;}
public importOppLinesController(){
csvFileLines = new String[]{};
oppLine = New List<OpportunityLineItem>();
}
public void importCSVFile(){
PricebookEntry pbeId;
String unitPrice = '';
try{
csvAsString = csvFileBody.toString();
csvFileLines = csvAsString.split('\n');
for(Integer i=1;i<csvFileLines.size();i++){
OpportunityLineItem oLiObj = new OpportunityLineItem() ;
string[] csvRecordData = csvFileLines[i].split(',');
String pbeCode = csvRecordData[0];
pbeId = [SELECT Id FROM PricebookEntry WHERE ProductCode = :pbeCode AND Pricebook2Id = 'xxxx HardCodedValue xxxx'][0];
oLiObj.PricebookEntryId = pbeId.Id;
oLiObj.Quantity = Decimal.valueOf(csvRecordData[1]) ;
unitPrice = String.valueOf(csvRecordData[2]);
oLiObj.UnitPrice = Decimal.valueOf(unitPrice);
oLiObj.OpportunityId = 'recOppId';;
insert (oLiObj);
}
}
catch (Exception e)
{
ApexPages.Message errorMessage = new ApexPages.Message(ApexPages.severity.ERROR, e + ' - ' + unitPrice);
ApexPages.addMessage(errorMessage);
}
}
}