一. 导入数据几条注意事项
1. Dataload的时候经常会遇到Trigger提示Too Many SOQL Error. 主要因为Trigger将SOQL放到了循环里了。要想改正这个错误需要修改Trigger,但是在不能修改Trigger的情况下可以将Dataloader的每次提交行数修改为10行甚至1行,这样将不会触发循环超出限制。
2. Dataload的时候经常会遇到Trigger报错200条记录都报错,但是可能只是其中1条错误,由于Trigger是200条一个Batch,所以一个错误会导致200条错误。
3. 在进行有主键外键的系统迁移到SFDC系统的时候可以使用External Id 进行Upsert 操作。这样Lookup field可以不是必须使用ID进行更新,可以使用External ID进行更新了。同样适用于Sandbox到Production的数据转移。
4. Company Profile 时区需要设置成GMT,否则Createdate和LastmodifiedDate会自己加减。
5. Dataloader时区最好需要设置成GMT。不然当Dataloader时区和Salesforce时区相差12小时的时候,系统会自动减去一天。
6. Opportunity Object and Contact Role是Master, Detail 关系,并且Salesforce认为两个Object同属于Opportunity,所以Insert Contact Role的时候,Opportunity的LastModifiedDate会同时更新成当前日期。目前没办法解决。
7. Opportunity Stage name 会自动记录到StageHistory里,而且当History改变的时候,系统认为这个Opportunity也改变了,所有LastmodifiedDate也会被改变,所有在用CSV文件导入到Salesforce的时候,要注意StageName列的位置要排在LastModifiedDate前面。
二. Data Loader 配置命令行运行以及连接SQLServer 数据库
1.encrypt.bat -g aaaa > key.txt. 生成key file.
2. encrypt.bat -e<password+security token> "<filepath>\key.txt". 生产加密密码.
3. 生成或者Copy一个Map文件.
4. 配置process-conf.xml
5. 配置database-conf.xml,如果数据要和DB交互的话,Dataloader可以通过JDBC建立连接
6. 运行命令 process.bat"C:\Program Files\salesforce.com\Data Loader\bin" insertAccount
process-conf.xml:例子
<!DOCTYPE beans PUBLIC"-//SPRING//DTD BEAN//EN""http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="insertAccount"
class="com.salesforce.dataloader.process.ProcessRunner"
singleton="false">
<description>insertAccount job gets accountinfo from salesforce and updates or inserts info intodatabase."</description>
<property name="name"value="insertAccount"/>
<property name="configOverrideMap">
<map>
<entrykey="sfdc.debugMessages" value="false"/>
<entrykey="sfdc.debugMessagesFile"value="C:\dataloader\samples\status\sfdcSoapTrace.log"/>
<entrykey="sfdc.endpoint" value="https://login.salesforce.com"/>
<entrykey="sfdc.username" value="xxxxxx@xxxx.xx"/>
<entrykey="sfdc.password"value="............................................................................"/>
<entrykey="process.encryptionKeyFile" value="C:\ProgramFiles\salesforce.com\Data Loader\bin\key.txt"/>
<entrykey="sfdc.timeoutSecs" value="600"/>
<entrykey="sfdc.loadBatchSize" value="200"/>
<entrykey="sfdc.entity" value="Account"/>
<entrykey="sfdc.extractionRequestSize" value="500"/>
<entrykey="sfdc.extractionSOQL" value="SELECT ID, NAME, CREATEDDATEFROM ACCOUNT"/>
<entrykey="process.operation" value="extract"/>
<entrykey="dataAccess.type" value="databaseWrite"/>
<entrykey="dataAccess.name" value="insertAccount"/>
</map>
</property>
</bean>
</beans>
database-conf.xml: SQLServer2005.
<!DOCTYPE beans PUBLIC"-//SPRING//DTD BEAN//EN""http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="dbDataSource"class="org.apache.commons.dbcp.BasicDataSource"destroy-method="close">
<property name="driverClassName"value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
<!--property name="url"value="jdbc:sqlserver://localhost:1433;DatabaseName=Test1"/-->
<property name="url"value="jdbc:sqlserver://localhost:1433;DatabaseName=Test1;user=sa;password=xxxxxx"/>
<property name="username" value="sa"/>
<property name="password"value="yg010101"/>
</bean>
<bean id="insertAccount"
class="com.salesforce.dataloader.dao.database.DatabaseConfig"
singleton="true">
<property name="sqlConfig"ref="insertAccountSql"/>
<property name="dataSource"ref="dbDataSource"/>
</bean>
<bean id="insertAccountSql"
class="com.salesforce.dataloader.dao.database.SqlConfig"singleton="true">
<property name="sqlString">
<value>
INSERT INTO dbo.Accounts(ID, NAME ,CREATEDDATE)
VALUES (@ID@, @NAME@,@CREATEDDATE@)
</value>
</property>
<property name="sqlParams">
<map>
<entry key="ID" value="java.lang.String"/>
<entry key="NAME" value="java.lang.String"/>
<entry key="CREATEDDATE" value="java.lang.datetime"/>
</map>
</property>
</bean>
</beans>