8

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

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

是否有人有最佳实践、工具、批处理文件或技巧来自动化此过程或减少手动操作?

4

7 回答 7

12

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

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

  1. 获取活动的 Salesforce 会话 ID/令牌
    • 企业 API - login() SOAP 方法
  2. 获取您的组织 ID(“组织 ID”)
    • 设置 > 公司简介 > 公司信息或
    • 使用企业 API getUserInfo() SOAP 调用来检索您的组织 ID
  3. 向 https://{your sf.com instance}.salesforce.com/ui/setup/export/DataExportPage/d?setupid=DataManagementExport 发送 HTTP GET 请求
    • 设置请求cookie如下:
      • oid={您的组织 ID}; sid={你的会话 ID};
  4. 解析生成的 HTML 以获取<a href="/servlet/servlet.OrgExport?fileName=
    • (文件名在 fileName= 之后开始)
  5. 将文件名插入此 URL 以下载(并保存):
    • https://{您的 sf.com 实例}.salesforce.com/servlet/servlet.OrgExport?fileName={filename}
    • 下载文件时使用与步骤 3 中相同的 cookie

这绝不是最佳实践,但它可以完成工作。不用说,如果他们更改了相关页面的布局,这可能不再起作用。希望这可以帮助。

于 2012-04-16T22:54:38.483 回答
8

下载 SalesForce 备份文件的脚本位于https://github.com/carojkov/salesforce-export-downloader/

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

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

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

于 2013-07-27T21:59:36.363 回答
6

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

cloudHQ 是一种 SaaS 服务,可同步您的云。在您的情况下,您永远不需要上传您的报告作为从 Salesforce 导出的数据,但您将始终将它们备份在标记为“Salesforce Reports”的文件夹中,无论您与 Salesforce 同步的哪个服务,例如:Dropbox、Google Drive、Box、Egnyte、Sharepoint 等

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

您可以在这里试用:https ://cloudhq.net/salesforce

我希望这可以帮助你!

干杯,娜奥米

于 2014-12-03T18:15:34.263 回答
2

请注意,您知道备份文件中的内容。备份是 65 个不同 CSV 文件的 zip。它是原始数据,不能很容易地在 Salesforce UI 之外使用。

于 2012-11-09T14:42:18.180 回答
2

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

  1. 使用 Salesforce 调度程序自动执行每周数据导出
  2. 使用 Windows 任务计划程序以正确的参数运行 FuseIT.SFDC.DataExportConsole.exe 文件。
于 2013-04-18T04:11:24.550 回答
0

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

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

github 上的Force.com 复制器。

于 2013-07-15T08:44:57.260 回答
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)
于 2018-04-05T14:29:35.723 回答