最近项目遇到一个需求是对某个对象每天备份。首先想到是SFDC标准功能备份,无奈,标准功能最小时间为周。客户需要的是每天备份。那只能借助其它工具,目前使用过的有jitterbit 需要安装客户端,可视化配置,在本地配置好后推送到云端,需要注册帐号。可以连数据库,CSV等等,有免费版,官网上有不同版本对比和限制。由于目前只有一个对象需要备份以及客户那边涉及到审查就没有采用。另一个就是SFDC自家的Data loader,查了一下在windows下能借助脚本实现备份,于是就开始折腾也为后面学习Data loader的代码作铺垫。 ** 如果你有什么好的方法和工具欢迎留言**。
一 Data loader 命令行
1. Windows的系统要求
需要为 Data Loader Windows 签名。要使用 Data Loader for Windows,您需要:
- Microsoft® Windows® 7、Windows® 8 或 Windows® 10
- 120 MB 可用磁盘空间
- 256 MB 可用内存
- Java JRE 1.8(32 位)
2. 通过命令行获取密码
-
通过命令行进入到data loader安装目录
-
encrypt.bat -g -字符串 (字符串可以是任意的)
-
执行后得到一串字符 将该字符串复制到一个文本中保存为key.txt
-
encrypt.bat –e 密码 "key.txt" 将密码加密
-
创建mapping文件 xx=xx 形式,文件名为Inventory.sdl 左侧是数据库名,右侧是别名(** PS:如果别名用中文,最后生成的文件是乱码**)
-
修改data loader 配置文件(这里是导出,关于导入可在SFDC 文档中心找到)
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="csvInventory" class="com.salesforce.dataloader.process.ProcessRunner" singleton="false"> <description>导出库存</description> <property name="name" value="csvInventory"/> <property name="configOverrideMap"> <map> <entry key="sfdc.debugMessages" value="false"/> <entry key="sfdc.debugMessagesFile" value=""/> <entry key="sfdc.endpoint" value="https://test.salesforce.com 按实际情况修改"/> <entry key="sfdc.username" value="(用户名)"/> <entry key="sfdc.password" value="(4步的加密密码)"/> <entry key="process.encryptionKeyFile" value="key.txt"/> <entry key="sfdc.timeoutSecs" value="600"/> <entry key="sfdc.loadBatchSize" value="200"/> <entry key="sfdc.entity" value="Account"/> <entry key="sfdc.extractionRequestSize" value="500"/> <entry key="sfdc.extractionSOQL" value=" **SOQL**"/> <entry key="process.operation" value="extract"/> <entry key="process.mappingFile" value="Inventory.sdl"/> <entry key="dataAccess.type" value="csvWrite"/> <entry key="dataAccess.name" value="Inventory.csv(备件文件名)"/> </map> </property> </bean> </beans>
-
process.bat "process-conf.xml所在的目录" csvInventory 运行命令
#二 Data loader JRE 启动文件修改 为了便于移植到其它PC上,将JRE 内置到目录中,将dataloader 没有用的文件删除,修改自带的配置文件。
-
新建一个文件夹,到JDK所在的目录将,JRE copy 到目录中
-
将下图中的文件从dataloader中copy到文件夹中
-
修改 process.bat
::不依赖系统的JDK 设置Java的环境变量为目录中的JRE %cd%为当前目录 set path=%cd%\jre\bin ::获得操作名的参数 set PROCESS_OPTION= if not [%2]==[] set PROCESS_OPTION=process.name=%2 ::调用datalaoder "%path%\java" -cp dataloader-37.0.0-uber.jar -Dsalesforce.config.dir=%1 com.salesforce.dataloader.process.ProcessRunner %PROCESS_OPTION%
-
修改encrypt.bat
::不依赖系统的JDK 设置环境Java的环境变量为目录中的JRE set path=%cd%\jre\bin ::调用datalaoder "%path%\java" -cp dataloader-37.0.0-uber.jar com.salesforce.dataloader.security.EncryptionUtil %*
#三 利用bat 将生成的文件移到其它目录 由于生成的文件名在配置中是写死的,这样一来就会被覆,可以利用bat 来移动文件,不会这个玩意全靠度娘 ##1. 新建一个dataloader-run.bat 这个是启动备份的入口命令
::获得bat所有的目录路径
set batpath=%~dp0
process.bat %batpath% csvInventory
##2. 新建一个movefile.bat
::获取时间 20170811122010 年月日时分秒
set dd=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%
::当前bat所在的目录
set batpath=%~dp0
::设置移动到那个目录下
set targetpath=Inventory\data
::绝对路径
set target=%batpath%%targetpath%
::dataloader产生的日志文件也一并移到指定的目录
set log=%batpath%Inventory\status
::如果目录不存在则自动创建
if not exist Inventory (
md Inventory
cd Inventory
md data
md status
)
::定位到产生的备份的文件目录下
cd InventoryTemp/data
if exist Inventory.csv (
::重命名生成的文件
ren Inventory.csv Inventory_%dd%.csv
::移动到指定目录
move Inventory_%dd%.csv %target%
)
::定位到日志目录,将日志移到指定目录
cd ../status
move *.csv %log%
目录如下:
#四 设置windows计划任务步骤
-
打开控制面板,查看方式选择大图标,打开管理工具
-
打开管理工具,选中任务计划程序,双击打开
-
点击创建任务,库存每日备份 a. 常规中输入名称
b. 新建触发器设置时间,每天XX时XX分 [
c. 设置程序,如下图,设置好后点击保存
-
点击创建任务,将生成的文件移到指定目录 a. 常规中输入名称
b. 新建触发器设置时间,每天XX时XX分
c. 设置程序,如下图,设置好后点击保存
-
备份的文件最终会存在\Inventory\data 文件名为Inventory_年月日时分秒.csv
Inventory\data\status 为日志文件
来源:oschina
链接:https://my.oschina.net/u/1437985/blog/1507134