Ошибка импорта загрузчика данных Salesforce: невозможно запустить процесс accountUpsert "java.lang.RuntimeException: java.lang.NullPointerException"
У меня проблема с массовым импортом в salesforce. Мой код, и все, и все работает нормально для 5000 записей, но мне нужно сохранить 100 000 записей. Пожалуйста помоги.
Ниже мой журнал ошибок
Creating Map
2016-08-22 12:44:12,675 FATAL [main] process.ProcessRunner topLevelError (Proce
sRunner.java:238) - Unable to run process accountUpsert
java.lang.RuntimeException: java.lang.NullPointerException
at com.salesforce.dataloader.process.ProcessRunner.run(ProcessRunner.ja
a:162)
at com.salesforce.dataloader.process.ProcessRunner.run(ProcessRunner.ja
a:100)
at com.salesforce.dataloader.process.ProcessRunner.main(ProcessRunner.j
va:253)
Caused by: java.lang.NullPointerException
at java.lang.String$CaseInsensitiveComparator.compare(Unknown Source)
at java.lang.String$CaseInsensitiveComparator.compare(Unknown Source)
at java.util.TreeMap.put(Unknown Source)
at java.util.TreeSet.add(Unknown Source)
at java.util.AbstractCollection.addAll(Unknown Source)
at java.util.TreeSet.addAll(Unknown Source)
at com.salesforce.dataloader.mapping.Mapper.<init>(Mapper.java:87)
at com.salesforce.dataloader.mapping.LoadMapper.<init>(LoadMapper.java:
1)
at com.salesforce.dataloader.controller.Controller.createMapper(Control
er.java:195)
at com.salesforce.dataloader.process.ProcessRunner.run(ProcessRunner.ja
a:146)
... 2 more
файл process-conf.xml
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="accountUpsert"
class="com.salesforce.dataloader.process.ProcessRunner"
singleton="false">
<description>accountInsert job gets the account record from the CSV file
and inserts it into Salesforce.</description>
<property name="name" value="accountUpsert"/>
<property name="configOverrideMap">
<map>
<entry key="sfdc.debugMessages" value="true"/>
<entry key="sfdc.debugMessagesFile"
value="D:\Yardi\Account Upload\accountInsertSoapTrace.log"/>
<entry key="sfdc.endpoint" value="https://test.salesforce.com/"/>
<entry key="sfdc.username" value="wwaqar.yar@graymath.com.stage"/>
<!--Password below has been encrypted using key file,
therefore, it will not work without the key setting:
process.encryptionKeyFile.
The password is not a valid encrypted value,
please generate the real value using the encrypt.bat utility -->
<entry key="sfdc.password" value="5ae9e1fa9b8d55afb228898dd3ec9bb94f9d19047cb28660831286e35db82743cf488132b0ce32a0"/>
<entry key="process.encryptionKeyFile" value="D:\Yardi\Account Upload\keytext.txt"/>
<entry key="sfdc.timeoutSecs" value="600"/>
<entry key="sfdc.loadBatchSize" value="200"/>
<entry key="sfdc.entity" value="Account"/>
<entry key="process.operation" value="upsert"/>
<entry key="sfdc.externalIdField" value="Applicant_ID__c" />
<entry key="process.mappingFile" value="D:\Yardi\Account Upload\accountSunMapping.sdl"/>
<entry key="dataAccess.name"
value="D:\Yardi\Account Upload\All Applicants from 1-1-2014 to 8-17-2016 10000.csv"/>
<entry key="process.outputSuccess"
value="D:\Yardi\Account Upload\accountInsert_success.csv"/>
<entry key="process.outputError"
value="D:\Yardi\Account Upload\accountInsert_error.csv"/>
<entry key="dataAccess.type" value="csvRead"/>
<entry key="process.initialLastRunDate"
value="2005-12-01T00:00:00.000-0800"/>
</map>
</property>
</bean>
</beans>
Ниже мой триггер, который я использую, чтобы заполнить некоторые настроенные значения перед вставкой или обновлением.
trigger MapStatusToStageBeforeOpportunintyCreation on Opportunity (before insert, before update) {
Set<ID> acctIDS = new Set<ID>();
Set<ID> propIDS = new Set<ID>();
String tempOppName;
for (Opportunity o : Trigger.New){
if(o.AccountId != null){
acctIDS.add(o.AccountID);
}
}
for (Opportunity o : Trigger.New){
if(o.Property_Name__c != null){
propIDS.add(o.Property_Name__c);
}
}
Map<ID, Account> acctMap = new Map<ID, Account>([Select LastName From Account Where ID =: acctIDS]);
Map<ID, Property__c> propMap = new Map<ID, Property__c>([Select Property_Code__c From Property__c Where ID =: propIDS]);
for (Opportunity o : Trigger.New){
// Mapping the StageName with Application_Status__c before Insert/update
if (o.Application_Status__c == 'Denied'){
o.StageName ='Denied';
}
else if(o.Application_Status__c == 'Approved'){
o.StageName ='Approved - Conditions Pending';
}
else if(o.Application_Status__c == 'Expired'){
o.StageName ='Expired';
}
else if(o.Application_Status__c == 'Closed'){
o.StageName ='Closed Won';
}
else if(o.Application_Status__c == 'Cancelled'){
o.StageName ='Cancelled';
}
else if(o.Application_Status__c == 'DocsSent'){
o.StageName ='Approved - Final';
}
else if(o.Application_Status__c == 'Not Submitted'){
o.StageName ='EXCLUDE FROM FILE';
}
else if(o.Application_Status__c == 'Pending'){
o.StageName ='Application Submitted';
}
else if(o.Application_Status__c == 'Submitted'){
o.StageName ='Application Submitted';
}
else if(o.Application_Status__c == 'Unprocessed'){
o.StageName ='Application Submitted';
}
else if(o.Application_Status__c == 'Null'){
o.StageName ='Error';
}
System.debug('Opp trigger is fired. ');
System.debug(o);
/*Date appSubmittedDate = o.Application_Submitted__c;
String strAppSubmittedDate = appSubmittedDate.month()+'-'+appSubmittedDate.day()+'-'+appSubmittedDate.year();
Property__c prop = [Select Property_Code__c From Property__c Where id =:o.Property_Name__c]; //Property_Name__c is returning id of related Property that's why used it's value to find Property Code.
Account acc = [Select LastName From Account Where id =:o.AccountId]; //AccountId is returning id of related Account that's why used it's value to find Account's LastName.
//o.Name = strAppSubmittedDate;
o.Name =acc.LastName+'-'+prop.Property_Code__c+'-'+strAppSubmittedDate;
//o.Name =acc.LastName+'-'+prop.Property_Code__c+'-'+String.valueOf(o.Application_Submitted__c);
//*/
for(ID acctID :acctMap.keySet()){
if(o.AccountID == acctID){
tempOppName = acctMap.get(acctID).LastName;
}
}
for(ID propID :propMap.keySet()){
if(o.Property_Name__c == propID){
tempOppName =tempOppName + '-' + propMap.get(propID).Property_Code__c;
}
}
Date appSubmittedDate = o.Application_Submitted__c;
String strAppSubmittedDate = appSubmittedDate.month()+'-'+appSubmittedDate.day()+'-'+appSubmittedDate.year();
o.Name = tempOppName + '-' + strAppSubmittedDate;
Id trigRecordTypeId = Schema.SObjectType.Opportunity.getRecordTypeInfosByName().get('Sun Homes - BDS').getRecordTypeId();
o.RecordTypeId = trigRecordTypeId;
}
}
Заранее спасибо