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

Salesforce 如何自动下载每周导出服务文件,salesforce,Salesforce,在SalesForce中,您可以在以下位置安排每周的数据“备份”/转储:设置>管理设置>数据管理>数据导出 如果您有一个大型Salesforce数据库,则可以手动下载大量文件 是否有人有最佳实践、工具、批处理文件或技巧来自动化此过程或减少手动操作?上次我检查时,无法通过API访问备份文件状态(或实际文件)。我怀疑他们使得这个过程很难通过设计实现自动化 我使用Salesforce scheduler每周准备一次文件,然后我有一个在本地服务器上运行的计划任务,该服务器下载文件。假设您能够自动执行/编

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

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


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

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

我使用Salesforce scheduler每周准备一次文件,然后我有一个在本地服务器上运行的计划任务,该服务器下载文件。假设您能够自动执行/编写某些web请求的脚本,则可以使用以下步骤下载文件:

  • 获取活动的salesforce会话ID/令牌
    • 企业API-login()SOAP方法
  • 获取您的组织ID(“组织ID”)
    • 设置>公司简介>公司信息或
    • 使用企业API getUserInfo()SOAP调用检索您的组织ID
  • 将HTTP GET请求发送到https://{your sf.com instance}.salesforce.com/ui/setup/export/DataExportPage/d?setupid=DataManagementExport
    • 按如下方式设置请求cookie:
      • oid={您的组织ID};sid={您的 会话ID}

  • 解析
    实例的结果HTML时要小心,要知道备份文件中包含的内容。备份是由65个不同的CSV文件组成的压缩包。它是原始数据,Salesforce用户界面之外的数据不能很容易地使用。

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

  • 使用Salesforce scheduler自动化每周数据导出
  • 使用Windows任务计划程序使用正确的参数运行FuseIT.SFDC.DataExportConsole.exe文件

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

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


    在github上。

    下载SalesForce备份文件的脚本位于

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

    只需少量配置,您就可以继续下载。脚本在完成或失败时发送电子邮件通知


    如果Ruby解决方案对您不起作用,那么很容易找到编写您自己的程序所需的步骤顺序。

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

    cloudHQ是一种SaaS服务,用于同步您的云。在您的情况下,您不需要将报告作为数据导出从Salesforce上传,但您只需要将其备份到标记为“Salesforce reports”的文件夹中,无论您使用哪种服务同步Salesforce,例如Dropbox、Google Drive、Box、Egnyte、Sharepoint等

    这项服务不是免费的,但有15天的免费试用期。到目前为止,还没有其他服务能够将Salesforce报告与其他云存储公司实时同步

    以下是您可以尝试的地方:

    我希望这对你有帮助

    干杯,
    Naomi添加蟒蛇3.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)
    

    我想在这里提到Skyvia。这是一个第三方工具,允许您使每周导出例行程序自动化。对我来说,这是最省时省钱的方法。他们有分步备份解决方案和一个Salesforce定时备份解决方案—在一个帐户下最多可备份1 TB。

    谢谢!您是否有可能将您的解决方案一般化(或签出您的凭证/等)并将其粘贴?与此同时,我一直在关注backupify的这项新服务:backupify项目看起来很有趣。我猜他们是在使用salesforce API提取数据,而不是使用salesforce backup准备的文件。我的解决方案是用C#编写的,这对您有用吗?我认为您关于备份的看法是正确的。我对C#一点也不熟悉,所以我不熟悉,但也许其他人会觉得它有用(我认为有必要)——再次感谢您对这个问题的详细反馈!利用@Adam的建议,我编写了一个小型C#应用程序来处理这个问题。你可以在这里访问它:请不要假装你的网站不是你自己的,而推广你的网站。这个工具真的使用了计划的导出还是它自己的?我问是因为它使用API(不是电子邮件链接),我听说计划的导出链接不是API的一部分。好主意!我设法让脚本运行并下载了ZIP。不幸的是,它们都已损坏,因此我无法使用它们。有什么想法吗?谢谢!这可能与Ruby版本、操作系统或文件读写选项有关。我的脚本运行在Linux上,ruby版本ruby 1.9.3p484。事实上,我想我可能看到了问题所在。尝试将第133行的文件打开选项的“w”替换为“wb”:f=open(“#{@data_directory}/#{fn}”,“wb”)。如果这样做有效,我将对源代码进行更改。不幸的是,我无法在windows上测试此功能,因此您的反馈至关重要。非常感谢。使用“wb”而不是“w”是有效的,非常感谢!谢谢!在从获取CA证书并设置SSL_CERT_FILE环境变量(如中所述)后,此脚本对我(Win10,Ruby 2.2.5)有效。此解决方案是否需要启用API?我们有SF专业版,它没有启用API。我已经尝试了你的登录方法,但我没有访问权限,这就是为什么我要问。谢谢