Как автоматизировать загрузку файлов еженедельного сервиса экспорта


В SalesForce вы можете запланировать до еженедельных "резервных копий" / дампов ваших данных здесь: настройка > Администрирование Настройка > управление данными > экспорт данных

Если у вас большая база данных Salesforce, вы можете загрузить значительное количество файлов вручную.

Есть ли у кого-нибудь лучшая практика, инструмент, пакетный файл или трюк, чтобы автоматизировать этот процесс или сделать его немного менее ручным?

7 7

7 ответов:

В прошлый раз, когда я проверял, не было никакого способа получить доступ к состоянию файла резервной копии (или фактическим файлам) через API. Я подозреваю, что они сделали этот процесс трудно автоматизировать по дизайну.

Я использую планировщик Salesforce для подготовки файлов еженедельно, затем у меня есть запланированная задача, которая выполняется на локальном сервере, который загружает файлы. Предполагая, что у вас есть возможность автоматизировать / написать сценарий некоторых веб-запросов, вот несколько шагов, которые вы можете использовать для загрузки файлов:

  1. получить активный идентификатор сеанса salesforce / токен
    • enterprise API-login () SOAP метод
  2. получите идентификатор организации ("org ID")
    • настройка > профиль компании > информация о компании или
    • Используйте вызов SOAP enterprise API getUserInfo() для получения идентификатора вашей организации
  3. отправьте запрос HTTP GET на https: / / {ваш sf.com экземпляр}.salesforce.com/ui/setup/export/DataExportPage/d?setupid=DataManagementExport
    • задайте файл cookie запроса следующим образом:
      • oid={Ваш идентификатор организации}; sid={ваш идентификатор сеанса};
  4. проанализируйте полученный HTML для экземпляров <a href="/servlet/servlet.OrgExport?fileName=
    • (имя файла начинается после fileName=)
  5. вставьте имена файлов в этот URL для загрузки (и сохранения):
    • https: / / {ваш sf.com экземпляр}.salesforce.com/servlet/servlet.OrgExport?fileName={filename}
    • используйте тот же файл cookie, что и на Шаге 3, При загрузке файлов

Это ни в коем случае не лучшая практика,но она делает свою работу. Само собой разумеется, что если они изменят макет рассматриваемой страницы, это, вероятно, больше не будет работать. Надеюсь, это поможет.

Скрипт для загрузки файлов резервных копий SalesForce доступен по адресу https://github.com/carojkov/salesforce-export-downloader/

Он написан на Ruby и может быть запущен на любой платформе. Прилагаемый конфигурационный файл содержит поля для вашего имени пользователя, пароля и места загрузки.

С небольшой конфигурацией вы можете получить ваши загрузки идут. Скрипт отправляет уведомления по электронной почте о завершении или сбое.

Достаточно просто вычислить последовательность шагов необходимо написать свою собственную программу, если решение Ruby не работает для вас.

Я Наоми, CMO и соучредитель cloudHQ, поэтому я чувствую, что это вопрос, на который я, вероятно, должен ответить. :- )

CloudHQ-это SaaS-сервис, который синхронизирует ваше облако. В вашем случае вам никогда не нужно будет загружать отчеты в виде экспорта данных из Salesforce, но вы всегда будете иметь их резервную копию в папке с надписью "отчеты Salesforce" в любом сервисе, с которым вы синхронизировали Salesforce, например: Dropbox, Google Drive, Box, Egnyte, Sharepoint и т. д.

Услуга не бесплатна, но есть бесплатная 15-дневная пробная версия. На сегодняшний день нет другой службы, которая бы синхронизировала отчеты Salesforce с другими облачными хранилищами данных в режиме реального времени.

Вот где вы можете попробовать это: https://cloudhq.net/salesforce

Надеюсь, это вам поможет!

Ура!, Наоми

Будьте осторожны, чтобы знать, что вы получаете в резервном файле. Резервная копия представляет собой zip из 65 различных CSV-файлов. Это необработанные данные, которые вне пользовательского интерфейса Salesforce не могут быть использованы очень легко.

Наша компания делает бесплатный инструмент командной строки DataExportConsole для полной автоматизации процесса. Вы делаете следующее:

  1. автоматизируйте еженедельный экспорт данных с помощью планировщика Salesforce
  2. Используйте планировщик задач Windows для запуска FuseIT.SFDC.DataExportConsole.exe-файл с нужными параметрами.

Недавно я написал маленькую утилиту на PHP, который использует Навальный API, чтобы загрузить копию предметами можно определить через JSON-файл конфигурации.

Он довольно прост, но может быть легко расширен в соответствии с вашими потребностями.

Force.com репликатор на github.

Добавление Питон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)