1. 配置jdk 和安装dataloader
运行相关代码需要jdk环境, 需要进行java_home等的配置, 建议安装jdk 11, 尝试在jdk18的环境无法运行.
jdk 11 下载链接: openjdk download
2.生成dataloader加密文件
找到dataloader所在的文件夹
我的文件夹是:C:\Software\dataloader_win\v53.0
进入bin文件夹: C:\Software\dataloader_win\v53.0.0\bin
在文件夹路径中输入cmd, 然后按回车键打开cmd窗口
3. 输入指令: encrypt.bat -k
回车后会出现一个本地地址, 记录这个地址, dataloader.key这个文件后面需要用到
4.根据3中的文件创建密码的密文
假设salesforce的登录密码是: 12345678
如果org限制了ip登录, 需要在密码后拼接上用户的token
在cmd中输入: encrypt.bat –e 12345678 C:\Users\junliang.dataloader\dataLoader.key
按下回车键, 会生成一段密文(下面截图黄色部分)
C:\Users\junliang.dataloader\dataLoader.key 这个文件就是步骤3中的生成的文件.
复制密文保存下来, 后期需要使用到.
5.创建相关文件夹
根目录: C:\DataloderScheduleJob
为了方便分类, 我创建了以下文件夹,也可以所有的文件都放在根目录下.
配置文件: C:\DataloderScheduleJob\ConfigurationFiles
需要导入的数据: C:\DataloderScheduleJob\Data
日志: C:\DataloderScheduleJob\Log
XML文件: C:\DataloderScheduleJob\XML
- C:\DataloderScheduleJob\ConfigurationFiles
文件1: 步骤2中生成的dataLoader.key文件
文件2: ParameterConfiguration.bat
内容:
set EXDIR=C:\DataloderScheduleJob
这里存放的是根目录的位置
- C:\DataloderScheduleJob\XML
文件1: insertAccount.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"
scope="prototype">
<description>Insert Account to Salesforce</description>
<property name="name" value="InsertAccount"/>
<property name="configOverrideMap">
<map>
<entry key="dataAccess.writeUTF8" value="true"/>
<entry key="dataAccess.readUTF8" value="true"/>
<entry key="sfdc.debugMessages" value="false"/>
<entry key="process.encryptionKeyFile" value="#EXPORT#\Configuration\dickdataLoader.key"/>
<entry key="sfdc.endpoint" value="https://test.salesforce.com"/>
<entry key="sfdc.username" value="test@test.com"/>
<entry key="sfdc.password" value="a346cb746e0397542ddca2866cf4fb1cf62ae98cb7e976149ae1d2c9ffa09d77"/>
<entry key="sfdc.timeoutSecs" value="600"/>
<entry key="sfdc.loadBatchSize" value="5000"/>
<entry key="sfdc.useBulkApi" value="true"/>
<entry key="sfdc.entity" value="Account"/>
<entry key="sfdc.timezone" value="Africa/Abidjan"/>
<entry key="process.operation" value="insert"/>
<entry key="process.mappingFile"
value="#EXPORT#\Mapping\Account.sdl"/>
<entry key="dataAccess.name"
value="#EXPORT#\Data\Account.csv"/>
<entry key="process.outputSuccess"
value="#EXPORT#\OutputFile\#CURRENT_DATE#-InsertAccount_success.csv"/>
<entry key="process.outputError"
value="#EXPORT#\OutputFile\#CURRENT_DATE#-InsertAccount_error.csv"/>
<entry key="dataAccess.type" value="csvRead"/>
<entry key="process.initialLastRunDate"
value="2005-12-01T00:00:00.000-0800"/>
</map>
</property>
</bean>
</beans>
xml的元素请参考: Data Loader Process Configuration Parameters
文件解析:
<!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"
scope="prototype">
<!-- ID在bat文件中会使用到, Id是唯一的-->
<description>Insert Account to Salesforce</description>
<property name="name" value="InsertAccount"/>
<!-- value 建议和 Id保持一致-->
<property name="configOverrideMap">
<map>
<entry key="dataAccess.writeUTF8" value="true"/>
<entry key="dataAccess.readUTF8" value="true"/>
<!-- 读写数据的格式, 不配置这个可能导入或导出的数据会存在乱码情况 -->
<entry key="sfdc.debugMessages" value="false"/>
<entry key="process.encryptionKeyFile" value="#EXPORT#\ConfigurationFiles\dataLoader.key"/>
<!-- 步骤5中的文件1 -->
<entry key="sfdc.endpoint" value="https://test.salesforce.com"/>
<entry key="sfdc.username" value="test@test.com"/>
<entry key="sfdc.password" value="a346cb746e0397542ddca2866cf4fb1cf62ae98cb7e976149ae1d2c9ffa09d77"/>
<!-- 以上三个配置的是登录地址, 用户名, 密码(使用步骤2中生成的密文) -->
<entry key="sfdc.timeoutSecs" value="600"/>
<entry key="sfdc.loadBatchSize" value="5000"/>
<!-- 设置导入的batchsize, 根据实际情况调节 -->
<entry key="sfdc.useBulkApi" value="true"/>
<!-- 是否使用bulk api, 开启后可能会减少导入时间 但是如果是update, 这个需要设置位false, 然后开启input null值, 否则null值是更新不进系统的-->
<entry key="sfdc.entity" value="Account"/>
<!-- 到操作的object -->
<entry key="sfdc.timezone" value="Africa/Abidjan"/>
<!-- 如果存在日期/时间字段, 会受到这个参数配置的时区而影响, 当前配置时区是 +0 的时区, 如果在这里配置的是+8的时区, 那么导入系统的utc时间是文件中的时间 - 8小时. -->
<entry key="process.operation" value="insert"/>
<!-- 需要进行的操作, insert, update, upsert等 -->
<entry key="process.mappingFile"
value="#EXPORT#\Account.sdl"/>
<!-- 字段映射表所在的位置 -->
<entry key="dataAccess.name"
value="#EXPORT#\Data\Account.csv"/>
<!-- 需要导入的文件所在位置 -->
<entry key="process.outputSuccess"
value="#EXPORT#\OutputFile\#CURRENT_DATE#-InsertAccount_success.csv"/>
<!-- 导入系统后自动生成的success log保存的位置 -->
<entry key="process.outputError"
value="#EXPORT#\OutputFile\#CURRENT_DATE#-InsertAccount_error.csv"/>
<!-- 导入系统后自动生成的error log保存的位置 -->
<entry key="dataAccess.type" value="csvRead"/>
<entry key="process.initialLastRunDate"
value="2005-12-01T00:00:00.000-0800"/>
</map>
</property>
</bean>
</beans>
如果一次性要导入多个文件, 则复制多个<bean>, 修改对应的参数即可.
- InsertAccount.bat
该文件一定要放在根目录下, 否则可能会导致其他文件读取失败
@echo off
echo insert address start..
cd /d %~dp0
call Configuration\configurationfiles.bat
# 配置时间
powershell.exe -Command "$(Get-Date).ToString('yyyyMMddhhmmss') | Out-File -Encoding "ASCII" dateString"
set /p dateString=<dateString
set currentdate=%dateString%
echo Start Time: %dateString%
#读取xml文件 这一句(set-content %EXDIR%\ImportXML\Account\process-conf.xml)中的 process-conf.xml名称不能修复, 后面读取时默认读取这个文件名的文件, 如果修改为其他, call时会提示找不到process-conf.xml文件
powershell.exe -Command "Get-Content %EXDIR%\ImportXML\Account\InsertAccount.xml | Foreach-Object{$_ -replace '#CURRENT_DATE#',$(Get-Date).ToString('yyyyMMddhhmmss')} | Foreach-Object{$_ -replace '#EXPORT#','%EXDIR%'} | set-content %EXDIR%\ImportXML\Account\process-conf.xml"
set logFile=%EXDIR%\OutputFile\Account\%currentdate%DailyExtractLog
#执行bean文件.
#C:\Software\dataloader_win\v53.0\bin\process.bat 这个是dataloader的文件的位置, 大家配置的位置不一样, 记得修改, 要不然会提示报错
# InsertAccount1 是xml文件中bean 的 Id
#如果要执行多个bean, 则是多条call, 跟上对应的bean id
call C:\Software\dataloader_win\v53.0\bin\process.bat "%EXDIR%\ImportXML\Account" InsertAccount1 >%logFile%-InsertAccount1.txt
cd %EXDIR%\Data
powershell.exe -Command "$(Get-Date).ToString('yyyy-MM-dd hh:mm:ss') | Out-File -Encoding "ASCII" endTime"
set /p endTime=<endTime
echo End time: %endTime%
配置完后面后双击bat文件即可立刻执行导入操作.
6.配置定时任务
如果导入是在某个时间段开启, 可在电脑中配置定时任务
1.进入系统的setting
2.在搜索框中输入 Schedule Tasks, 并且点击进入
2.创建一个task
填写Name
配置启动时间
选择需要执行的bat文件
最后点击OK按钮就可以在主界面看到刚刚配置的schedule task了.