如何自动下载每周导出服务文件

时间:2012-04-16 16:49:56

标签: salesforce

在SalesForce中,您可以在此处安排最多每周“备份”/转储数据:设置>管理设置>数据管理>数据导出

如果您有一个庞大的Salesforce数据库,可能需要手动下载大量文件。

是否有人拥有最佳实践,工具,批处理文件或技巧来自动化此过程或使其少一些手动?

7 个答案:

答案 0 :(得分:10)

上次检查时,无法通过API访问备份文件状态(或实际文件)。我怀疑他们已经使这个过程难以通过设计实现自动化。

我使用Salesforce调度程序每周准备文件,然后我有一个在下载文件的本地服务器上运行的计划任务。假设您能够自动化/编写一些Web请求,可以使用以下步骤下载文件:

  1. 获取有效的salesforce会话ID /令牌
    • 企业API - login()SOAP方法
  2. 获取您的组织ID(“组织ID”)
    • 设置>公司简介>公司信息或
    • 使用企业API getUserInfo()SOAP调用来检索您的组织ID
  3. 向https:// {您的sf.com实例}发送HTTP GET请求.salesforce.com / ui / setup / export / DataExportPage / d?setupid = DataManagementExport
    • 设置请求cookie,如下所示:
      • oid = {your org ID}; SID = {您 会话ID};
  4. <a href="/servlet/servlet.OrgExport?fileName=的实例解析生成的HTML
    • (文件名在fileName =之后开始)
  5. 将文件名插入此URL以下载(并保存):
    • https:// {your sf.com instance} .salesforce.com / servlet / servlet.OrgExport?fileName = {filename}
    • 下载文件时使用与步骤3中相同的Cookie
  6. 这绝不是最佳做法,但它可以完成工作。不言而喻,如果他们改变了相关页面的布局,这可能不再适用。希望这会有所帮助。

答案 1 :(得分:7)

https://github.com/carojkov/salesforce-export-downloader/

提供了下载SalesForce备份文件的脚本

它是用Ruby编写的,可以在任何平台上运行。提供的配置文件提供了用户名,密码和下载位置的字段。

配置很少,您可以下载。该脚本在完成或失败时发送电子邮件通知。

如果Ruby解决方案不适合您,那么很容易弄清楚编写自己的程序所需的步骤顺序。

答案 2 :(得分:6)

我是cloudHQ的CMO和联合创始人Naomi,所以我觉得这是一个我应该回答的问题。 : - )

cloudHQ是一种同步云的SaaS服务。在您的情况下,您永远不需要将报告上传为Salesforce的数据导出,但您只需将它们备份到标有&#34; Salesforce Reports&#34;的文件夹中。在任何与Salesforce同步的服务中:Dropbox,Google Drive,Box,Egnyte,Sharepoint等。

该服务不是免费的,但可以免费试用15天。到目前为止,还没有其他服务可以实际将您的Salesforce报告与其他云存储公司实时同步。

您可以在此处试用:https://cloudhq.net/salesforce

我希望这可以帮到你!

干杯, 直美

答案 3 :(得分:2)

小心你知道你在备份文件中得到了什么。备份是包含65个不同CSV文件的zip。它是Salesforce UI之外的原始数据,不能轻易使用。

答案 4 :(得分:2)

我们公司使用免费的DataExportConsole命令行工具来完全自动化该过程。您执行以下操作:

  1. 使用Salesforce计划程序自动执行每周数据导出
  2. 使用Windows任务计划程序以正确的参数运行FuseIT.SFDC.DataExportConsole.exe文件。

答案 5 :(得分:0)

我最近编写了一个小型PHP实用程序,它使用Bulk API下载您通过json配置文件定义的sObjects副本。

这是非常基本的,但可以轻松扩展以满足您的需求。

github上的

Force.com Replicator

答案 6 :(得分:0)

添加Python3.6解决方案。应该工作(虽然我还没有测试过)。确保已安装包(requests,BeautifulSoup和simple_salesforce)。

import os
import zipfile
import requests
import subprocess
from datetime import datetime
from bs4 import BeautifulSoup as BS
from simple_salesforce import Salesforce

def login_to_salesforce():
    sf = Salesforce(
        username=os.environ.get('SALESFORCE_USERNAME'),
        password=os.environ.get('SALESFORCE_PASSWORD'),
        security_token=os.environ.get('SALESFORCE_SECURITY_TOKEN')
    )
    return sf

org_id = "SALESFORCE_ORG_ID"  # canbe found in salesforce-> company profile
export_page_url = "https://XXXX.my.salesforce.com/ui/setup/export/DataExportPage/d?setupid=DataManagementExport"

sf = login_to_salesforce()
cookie = {'oid': org_id, 'sid':sf.session_id}
export_page = requests.get(export_page_url, cookies=cookie)
export_page = export_page.content.decode()

links = []
parsed_page = BS(export_page)
_path_to_exports = "/servlet/servlet.OrgExport?fileName="
for link in parsed_page.findAll('a'):
   href = link.get('href')
   if href is not None:
       if href.startswith(_path_to_exports):
           links.append(href)

print(links)
if len(links) == 0:
    print("No export files found")
    exit(0)

today = datetime.today().strftime("%Y_%m_%d")
download_location = os.path.join(".", "tmp", today)
os.makedirs(download_location, exist_ok=True)
baseurl = "https://zageno.my.salesforce.com"

for link in links:
    filename = baseurl + link
    downloadfile = requests.get(filename, cookies=cookie, stream=True)  # make stream=True if RAM consumption is high
    with open(os.path.join(download_location, downloadfile.headers['Content-Disposition'].split("filename=")[1]), 'wb') as f:
        for chunk in downloadfile.iter_content(chunk_size=100*1024*1024):  # 50Mbs ??
            if chunk:
                f.write(chunk)