Я хочу добавить кнопку в мою запись заголовка возможности, которая называется Insert Products. Это отправит идентификатор возможности на страницу visualforce, в которой будет кнопка выбора файла и кнопка вставки, которая будет проходить через CSV и вставить записи в соответствующую возможность.Вставить CSV, используя пакет Apex Batch Class Salesforce для OpportunityLineItem
Это для нетехнических пользователей, поэтому использование загрузчика данных не является вариантом.
Я получил эту работу с использованием стандартного класса apex, но попал в лимит, когда загрузил более 1000 записей (что бы происходило регулярно).
Мне нужно преобразовать это в пакетный процесс, однако я не уверен, как это сделать.
Любой, кто может указать мне в правильном направлении? Я понимаю, что партия должна начинать, выполнять и заканчивать. Однако я не уверен, где я должен разделить 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);
}
}
}