Skip to content

Réinitialisation de mon org de développement à un état vide

Nos chercheurs vedettes ont épuisé leurs réserves de café, cherchant jour et nuit la réponse, jusqu'à ce qu'Omar trouve la solution dans Gogs, alors maintenant nous la partageons ici.

Solution :

Vous pouvez le faire en utilisant uniquement l'outil de migration Force.com prêt à l'emploi.

Comme vous l'avez noté, la destruction des composants de métadonnées est réalisée avec une destructiveChanges.xml définition. Cependant, cela diffère de package.xml en ce qu'elle ne prend pas en charge les caractères génériques (*) - donc l'obstacle intermédiaire est la génération d'une définition explicite contenant les noms de toutes les métadonnées à détruire.

Cette définition explicite peut être générée en listant toutes les métadonnées de l'organisation par type pour obtenir les noms des composants réels, puis en combinant les listings dans un paquet nommé.

En utilisant quelques expessions régulières, nous pouvons casser les dépendances comme les webLinks et les quickActions, puis déployer l'ensemble des changements destructeurs en une seule transaction de métadonnées :


    

Voici une macrodef - placez-la dans votre fichier build.xml puis exécutez ant destroy:



    
    
    
    
    

    

        
        [email protected]{username}" />

        
        
            
            
            
            
            
                
                
                
            
        

        
        
        
        
                
                    
                        @{username}
                        @{password}
                    
                
            
        ]]>

        
        
        
            
        

        
        
        
            
        

        
        
                
${sessionId}
delete [SELECT Id FROM PermissionSetAssignment WHERE PermissionSet.ProfileId = null]; for (SObject cron : [SELECT Id FROM CronTrigger]) System.abortJob(cron.Id); User[] users = [SELECT Id FROM User WHERE UserRoleId != null]; for (User user : users) user.UserRoleId = null; update users; ]]>
Preparing destructiveChangesPost.xml - @{metadataType}
${line.separator} @{metadataType}${line.separator}]]>
]]>
]]> var negate = false, pattern = '.*', metadataType = self.getToken(); if ('Layout' == metadataType) (negate = false) | (pattern = '%27|%28|%29'); if ('Profile' == metadataType) (negate = false) | (pattern = 'Custom%3A'); if ('ListView' == metadataType) (negate = true) | (pattern = '\.All</members>'); if ('ApexPage' == metadataType) (negate = true) | (pattern = '>SiteHome<'); if ('CustomField' == metadataType) (negate = true) | (pattern = '__b\.'); if ('MatchingRule' == metadataType) (negate = true) | (pattern = 'Standard_'); if ('CustomObject' == metadataType) (negate = false) | (pattern = '__b|__c|__e|__x|__mdt'); if ('BusinessProcess' == metadataType) (negate = true) | (pattern = 'master'); if ('CustomApplication' == metadataType) (negate = true) | (pattern = 'standard__'); var macro = project.createTask('listMetadataForDestroy'); macro.setDynamicAttribute('negate', negate); macro.setDynamicAttribute('pattern', pattern); macro.setDynamicAttribute('metadatatype', metadataType); macro.execute(); //dynamic attributes are lowercase insistent ]]> Preparing package.xml - @{metadataType} @{username} User Stripping namespaced components: @{namespacePrefix} Listing installed packages... var macro = project.createTask('unspecifyForDestroy'); macro.setDynamicAttribute('namespaceprefix', self.getToken()); macro.execute(); //dynamic attributes are lowercase insistent 41.0 ApexPage * CustomSite * Layout * ListView * Profile * Role * Settings *

(Vous devrez définir sf.username et sf.password comme propriétés ou paramètres de ligne de commande)

Cela se résume à un processus en quatre étapes :

  1. utiliser sf:describeMetadata pour décrire la caractéristique "forme" de l'org,

  2. répertorier tous les composants de tous les types de métadonnées ci-dessus dans un manifeste,

  3. délier certaines dépendances spécifiques telles que les boutons sur les mises en page,

  4. déployer en utilisant destructiveChanges.xml qui détruit le contenu,

La procédure ci-dessus est mise à jour de temps en temps, dernière révision ici.

Voir aussi la philosophie complète de Stefan sur le nettoyage des orgs.

Il y a un script undeploy ici qui peut vous être utile.

Vous pourriez également envisager d'utiliser des bacs à sable de développeur que vous pouvez supprimer / rafraîchir vous-même, bien qu'il existe certaines différences entre les bacs à sable de développeur et les véritables orgs DE.



Utilisez notre moteur de recherche

Ricerca
Generic filters

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.