Ошибка импорта загрузчика данных 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;
    }


}

Заранее спасибо

0 ответов

Другие вопросы по тегам