[PYTHON] J'ai créé un outil pour sauvegarder automatiquement les métadonnées de l'organisation Salesforce

Ce livrable

Je souhaite sauvegarder automatiquement les métadonnées Salesforce par exécution de planification, J'ai exécuté ANT à partir du planificateur de tâches Windows pour créer un outil permettant de planifier des sauvegardes automatiques.

Ce dont vous avez besoin est le suivant. -Installation d'Apache Ant -Installation de Java JDK ・ Installation de Python3

Cliquez sur le lien ci-dessous pour obtenir un guide détaillé sur la sortie de Salesforce à l'aide d'ANT. (Il y a aussi une description de la façon d'installer ANT et Java) · Publication des modifications à l'aide de l'outil de migration Ant

Cliquez sur le lien ci-dessous pour installer Python. ・ Installer Python3

Structure des dossiers

myorg/
┣unpackaged
┃ ┗package.xml
┣build.properties
┣build.xml
┣modifyXML.py
┣backupByDateTime.bat

-Unpackaged / package.xml: définissez le type de métadonnées que vous souhaitez récupérer · Build.properties: définit les informations de connexion à l'organisation Salesforce.

build.properties


sf.username = [email protected]
sf.password = xxxyyyzzz
sf.serverurl = https://login.salesforce.com
sf.maxPoll = 20

-Build.xml: définit les commandes à exécuter par Ant.

build.xml


<?xml version='1.0' encoding='UTF-8'?>
<project xmlns:sf="antlib:com.salesforce" name="Sample usage of Salesforce Ant tasks" default="test" basedir=".">

    <property file="build.properties" />
    <property environment="env" />

    
    <condition property="sf.username" value=""> <not> <isset property="sf.username" /> </not> </condition>
    <condition property="sf.password" value=""> <not> <isset property="sf.password" /> </not> </condition>
    <condition property="sf.sessionId" value=""> <not> <isset property="sf.sessionId" /> </not> </condition>

    <taskdef resource="com/salesforce/antlib.xml" uri="antlib:com.salesforce">
        <classpath>
            <pathelement location="../ant-salesforce.jar" />        	
        </classpath>
    </taskdef>

    
    <target name="retrieveUnpackaged">
      <mkdir dir="backupxxxxxxxxx" />
      
      <sf:retrieve username="${sf.username}" password="${sf.password}" serverurl="${sf.serverurl}" maxPoll="${sf.maxPoll}" retrieveTarget="backup0111163434" unpackaged="unpackaged/package.xml" />
    </target>

    
</project>

-ModifyXML.py: un programme qui édite build.xml

modifyXML.py


import xml.etree.ElementTree as ET
import datetime

#Analyser XML
tree = ET.parse('build.xml')
ET.register_namespace('sf', 'antlib:com.salesforce')

#Obtenir du XML
root = tree.getroot()

now = datetime.datetime.now()
dt_string = now.strftime('%m%d%H%M%S')

for e_mkdir in root.iter('mkdir'):
    e_mkdir.set('dir', 'backup' + dt_string)

for e_ret in root.iter("{antlib:com.salesforce}retrieve"):
    e_ret.set('retrieveTarget', 'backup' + dt_string)

#sauvegarder
tree.write('build.xml', 'UTF-8', True)

-BackupByDateTime.bat: Un fichier de commandes qui exécute le python ci-dessus et exécute les commandes ANT.

backupByDateTime.bat


python modifyXML.py
Ant retrieveUnpackaged

Courir

Planifiez le fichier de commandes ci-dessus avec le planificateur de tâches Windows. Reportez-vous à ici pour les paramètres du planificateur.

Vous pouvez également ouvrir le dossier ci-dessus et double-cliquer sur le fichier de commandes.

Lors de l'exécution, un dossier nommé "date et heure d'exécution de la sauvegarde en secondes" est créé dans le dossier, Les métadonnées sont stockées dans ce dossier.

Résumé

Utilisez-le pour les projets de développement Salesforce, par exemple lorsque vous devez effectuer une sauvegarde régulière de l'environnement de production, de vérification et de développement.

Quand j'ai partagé les créations au sein de l'entreprise, il y avait une voix disant "Gérer les dossiers acquis avec Git", donc si vous avez le temps, j'aimerais essayer cela aussi.

Recommended Posts

J'ai créé un outil pour sauvegarder automatiquement les métadonnées de l'organisation Salesforce
J'ai fait un outil pour estimer le temps d'exécution de cron (+ débuts de PyPI)
J'ai fait une fonction pour vérifier le modèle de DCGAN
J'ai créé un outil pour obtenir les liens de réponse d'OpenAI Gym en même temps
J'ai créé un outil pour générer automatiquement un simple diagramme ER à partir de l'instruction CREATE TABLE
J'ai fait un calendrier qui met à jour automatiquement le calendrier de distribution de Vtuber
J'ai créé un outil pour parcourir automatiquement plusieurs sites avec Selenium (Python)
J'ai fait un programme pour vérifier la taille d'un fichier avec Python
J'ai créé une fonction pour voir le mouvement d'un tableau à deux dimensions (Python)
J'ai créé un outil pour compiler nativement Hy
J'ai créé un outil pour obtenir de nouveaux articles
J'ai créé un outil pour informer Slack des événements Connpass et en ai fait Terraform
J'ai créé une commande appdo pour exécuter des commandes dans le contexte de l'application
J'ai créé un programme pour rechercher des mots sur la fenêtre (développement précédent)
J'ai fait un script pour enregistrer la fenêtre active en utilisant win32gui de Python
J'ai fait une commande pour marquer le clip de la table
J'ai fait un calendrier qui met à jour automatiquement le calendrier de distribution de Vtuber (édition Google Calendar)
Un outil qui transforme automatiquement le gacha de Soshage
J'ai essayé de faire un classement en grattant l'équipe des membres de l'organisation
J'ai créé un outil pour créer un nuage de mots à partir de wikipedia
J'ai fait une image ponctuelle de l'image d'Irasutoya. (partie 1)
J'ai fait une image ponctuelle de l'image d'Irasutoya. (partie 2)
[Titan Craft] J'ai créé un outil pour invoquer un géant sur Minecraft
J'ai essayé de faire un programme pour résoudre (indice) la recherche d'erreur de Saiseriya
[Introduction à StyleGAN] J'ai joué avec "The Life of a Man" ♬
J'ai fait un bot mou qui m'informe de la température
J'ai essayé de créer un outil d'échafaudage pour le framework Web Python Bottle
J'ai fait une commande pour afficher un calendrier coloré dans le terminal
J'ai fait un programme qui calcule automatiquement le zodiaque avec tkinter
[Kaggle] J'ai fait une collection de problèmes en utilisant le didacticiel Titanic
Je veux clarifier la question de la méthode "__init__" et de l'argument "self" de la classe Python.
[Django] a créé un champ pour saisir des dates avec des nombres à 4 chiffres
J'ai fait une minuterie de cuisine à afficher sur la barre d'état!
Je souhaite trier une liste dans l'ordre des autres listes
J'ai essayé d'extraire automatiquement les mouvements des joueurs Wiire avec un logiciel
J'ai fait un script pour afficher des pictogrammes
J'ai fait GAN avec Keras, donc j'ai fait une vidéo du processus d'apprentissage.
J'ai créé un konoha de bibliothèque qui fait passer le tokenizer à une belle sensation
J'ai créé un outil pour convertir Jupyter py en ipynb avec VS Code
J'ai essayé d'obtenir automatiquement le RSS de la chanson la plus populaire de l'iTunes Store
J'ai créé un outil d'estampage automatique du navigateur.
J'ai fait une erreur en récupérant la hiérarchie avec MultiIndex of pandas
J'ai essayé d'afficher la valeur d'altitude du DTM dans un graphique
Notes J'ai recherché la création d'outils de ligne de commande en Python
J'ai essayé de vérifier le résultat du test A / B avec le test du chi carré
Python: je souhaite mesurer proprement le temps de traitement d'une fonction
[Python] J'ai créé un code de scraping web qui acquiert automatiquement le titre de l'actualité et l'URL de Nihon Keizai Shimbun.
L'histoire de l'adresse IPv6 que je souhaite conserver au minimum
Je t'ai fait exprimer la fin de l'adresse IP avec L Chika
Je viens de créer un outil pour afficher facilement les données sous forme de graphique par opération GUI
Notez la solution car django n'a pas pu s'installer avec pip
J'ai essayé de générer automatiquement une table de gestion des ports à partir de L2SW Config
Je souhaite définir un cycle de vie dans la définition de tâche d'ECS
Je souhaite voir une liste de fichiers WebDAV dans le module Requêtes
J'ai essayé de créer un modèle avec l'exemple d'Amazon SageMaker Autopilot
J'ai essayé d'envoyer automatiquement la littérature du nouveau virus corona à LINE avec Python
Comment calculer la volatilité d'une marque
J'ai créé un outil utile pour Digital Ocean