You need to sign in to do that
Don't have an account?
Cable Guy.ax375
insert using batch mode
How can I modify the following code so it can insert 200 records each time? I'm using API version 7.
Assume I already have a recordset of 50000 records from Oracle database.
public void updateEquipment(ID buildingID, String clliCode, String equipSpecType, String vendorName,
String vendorPartNum, String materialCode, String vendorCommCode, String vendorIssueNum,
String equipSpecID, String equipAcronym, String equipDesc, Double equipCount)
{
Equipment__c eq = new Equipment__c();
eq.setBuilding__c(buildingID);
eq.setCLLI_code__c(clliCode);
eq.setEquipspec_Type__c(equipSpecType);
eq.setVendor_Name__c(vendorName);
eq.setVendor_Part_Number__c(vendorPartNum);
eq.setMaterial_Code__c(materialCode);
eq.setVendor_Comm_Code__c(vendorCommCode);
eq.setVendor_Issue_Number__c(vendorIssueNum);
eq.setEquipment_Spec_ID__c(equipSpecID);
eq.setEquipment_Acronym__c(equipAcronym);
eq.setDescription__c(equipDesc);
eq.setQuantity__c(equipCount);
eq.setName(equipSpecType);
SObject[] sObjects = new SObject[1];
sObjects[0] = eq;
try {
SaveResult[] saveResults = binding.create(sObjects);
for (int i=0; i<saveResults.length; i++) {
if (saveResults[i].isSuccess()) {
Logger.log("updateEquipment() - " + saveResults[i].getId(),true);
System.out.println("insert equipment " + saveResults[i].getId());
}
else {
Logger.log("updateEquipment() - " + saveResults[i].getErrors()[i].getMessage(),true);
}
}
} catch (InvalidSObjectFault e) {
Logger.log("updateEquipment() - invalid object exception encountered:\n\n" + e.getMessage(),true);
} catch (UnexpectedErrorFault e) {
Logger.log("updateEquipment() - Unexpected error exception encountered:\n\n" + e.getMessage(),true);
} catch (RemoteException e) {
Logger.log("updateEquipment() - Remote exception encountered:\n\n" + e.getMessage(),true);
}
}
String vendorPartNum, String materialCode, String vendorCommCode, String vendorIssueNum,
String equipSpecID, String equipAcronym, String equipDesc, Double equipCount)
{
Equipment__c eq = new Equipment__c();
eq.setBuilding__c(buildingID);
eq.setCLLI_code__c(clliCode);
eq.setEquipspec_Type__c(equipSpecType);
eq.setVendor_Name__c(vendorName);
eq.setVendor_Part_Number__c(vendorPartNum);
eq.setMaterial_Code__c(materialCode);
eq.setVendor_Comm_Code__c(vendorCommCode);
eq.setVendor_Issue_Number__c(vendorIssueNum);
eq.setEquipment_Spec_ID__c(equipSpecID);
eq.setEquipment_Acronym__c(equipAcronym);
eq.setDescription__c(equipDesc);
eq.setQuantity__c(equipCount);
eq.setName(equipSpecType);
SObject[] sObjects = new SObject[1];
sObjects[0] = eq;
try {
SaveResult[] saveResults = binding.create(sObjects);
for (int i=0; i<saveResults.length; i++) {
if (saveResults[i].isSuccess()) {
Logger.log("updateEquipment() - " + saveResults[i].getId(),true);
System.out.println("insert equipment " + saveResults[i].getId());
}
else {
Logger.log("updateEquipment() - " + saveResults[i].getErrors()[i].getMessage(),true);
}
}
} catch (InvalidSObjectFault e) {
Logger.log("updateEquipment() - invalid object exception encountered:\n\n" + e.getMessage(),true);
} catch (UnexpectedErrorFault e) {
Logger.log("updateEquipment() - Unexpected error exception encountered:\n\n" + e.getMessage(),true);
} catch (RemoteException e) {
Logger.log("updateEquipment() - Remote exception encountered:\n\n" + e.getMessage(),true);
}
}
eq.setBuilding__c(buildingID);
eq.setCLLI_code__c(clliCode);
eq.setEquipspec_Type__c(equipSpecType);
eq.setVendor_Name__c(vendorName);
eq.setVendor_Part_Number__c(vendorPartNum);
eq.setMaterial_Code__c(materialCode);
if (batchSize > 200 || batchSize < 1)
throw new IllegalArgumentException("batchSize must be between 1 and 200");
return batch(records, batchSize, new CreateBatcher());
}
private SaveResult[] batch(SObject[] records, int batchSize, Batcher batchOperation) throws UnexpectedErrorFault, InvalidIdFault, LoginFault, RemoteException, ServiceException {
if (records.length <= batchSize) {
//checkLogin();
return batchOperation.perform(records);
}
SaveResult[] saveResults = new SaveResult[records.length];
SObject[] thisBatch = null;
int pos = 0;
while (pos < records.length) {
int thisBatchSize = Math.min(batchSize, records.length - pos);
if (thisBatch == null || thisBatch.length != thisBatchSize)
thisBatch = new SObject[thisBatchSize];
System.arraycopy(records, pos, thisBatch, 0, thisBatchSize);
SaveResult [] batchResults = batch(thisBatch, thisBatchSize, batchOperation);
System.arraycopy(batchResults, 0, saveResults, pos, thisBatchSize);
pos += thisBatchSize;
}
return saveResults;
}
private abstract class Batcher {
abstract SaveResult[] perform(SObject [] records) throws UnexpectedErrorFault, InvalidIdFault, LoginFault, RemoteException, ServiceException;
}
private class CreateBatcher extends Batcher {
SaveResult [] perform(SObject [] records) throws UnexpectedErrorFault, InvalidIdFault, LoginFault, RemoteException, ServiceException {
//checkLogin();
return binding.create(records);
}
}
private class UpdateBatcher extends Batcher {
SaveResult [] perform(SObject [] records) throws UnexpectedErrorFault, InvalidIdFault, LoginFault, RemoteException, ServiceException {
//checkLogin();
return binding.update(records);
}
}
eq.setBuilding__c(buildingID);
eq.setCLLI_code__c(clliCode);
eq.setEquipspec_Type__c(equipSpecType);
eq.setVendor_Name__c(vendorName);
sObjects[j] = eq;