Comment détecter l'environnement dans Salesforce?
Je suis l'intégration de nos systèmes back-end avec Salesforce à l'aide de web services. J'ai de la production et de la scène des environnements d'exécution sur une Url différente. J'ai besoin d'être en mesure d'avoir le point de terminaison de l'appel de service web sera différente selon que le code est en cours d'exécution dans la production ou la sandbox instance Salesforce.
Comment puis-je détecter l'environnement.
Actuellement, je suis en considérant à la recherche d'un utilisateur, pour voir si l'utilisateur le nom se termine par 'devsandbox" comme j'ai pu identifier un objet système que je peux requête pour obtenir de l'environnement.
Plus de précisions:
L'emplacement que j'ai besoin pour déterminer ce qui est dans le code Apex qui est appelée lors de la sélection d'un bouton dans Salesforce. Mon custom contrôleur a besoin de savoir si en cours d'exécution dans la production ou la sandbox de l'environnement Salesforce.
source d'informationauteur Craig Harris
Vous devez vous connecter pour publier un commentaire.
De y'all trouver via les résultats de recherche, il y a une mise à jour importante. Comme Daniel, Hoechst a souligné dans un autre postSF maintenant fournit directement sandbox et la production de l'information:
Sur la base des réponses, il apparaît que Salesforce ne dispose pas d'un système d'objet qui peut me dire si mon code Apex est en cours d'exécution à la production ou à un environnement sandbox.
Je vais procéder en fonction des hypothèses suivantes:
L'organisation actuelle de l'ID peut être trouvé avec la
System.getOrganizationId()
Ma solution est d'avoir mon code de comparer l'état actuel org id à la valeur de la constante représentant la production.
Je suis exécution de la nécromancie ici et la réponse est déjà accepté, mais peut-être quelqu'un qui va en tirer profit...
Utiliser l'un de ces champs de fusion sur votre page Visualforce /S-Control:
Vous pouvez facilement analyser l'organisation de l'ID.
Dans le code Apex: UserInfo.getOrganisationId()
Je sais que c'est un vieux post, mais juste pour le plaisir des personnes en recherche d'une mise à jour de la réponse du Printemps '11 version, il y a une nouvelle méthode Système.URL.getSalesforceBaseUrl().toExternalForm() qui retourne l'url en cours.
Vous pouvez travailler à partir de là pour obtenir toutes les informations dont vous avez besoin.
Voici le lien pour docs: http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_methods_system_url.htm
La Connexion de l'appel API renvoie un bac à sable dans l'élément retourné LoginResult structure qui indique si ses un environnement sandbox ou non, à partir du WSDL.
Sandbox peut avoir une url personnalisée (par ex. acme.cs1.my.salesforce.com), ou peut-être de l'hébergement d'une page visualforce (cs2.visual.force.com) ou les deux (acme.cs2.visual.force.com) donc j'utilise cette méthode:
Je pense que la meilleure façon de le faire serait de créer un objet personnalisé dans Salesforce, puis de stocker une valeur indiquant bac à sable ou de la production. Votre code Apex permet ensuite d'interroger cet objet. Une suggestion serait d'utiliser Apex constructeurs statiques de charger ces informations et de les mettre en cache pour la demande.
Une autre pensée que j'ai eu (mais la haine de suggérer) est d'utiliser un service externe pour déterminer où votre code Apex est en cours d'exécution. Ce serait sans doute difficile à réaliser, car à chaque fois que l'SalesForce batterie de serveurs changements il y a un changement de votre code de casser, mais j'ai juste pensé que je jetterais cette.
Vous devez ajouter "http://www.whatismyip.com" sur le Site Distant, les paramètres pour obtenir que cela fonctionne (Configuration > Configuration de l'Administration > les Contrôles de Sécurité > Paramètres du Site Distant). Ce code doit s'exécuter dans la fenêtre de débogage lorsque vous cliquez sur "Journal Système".
Dans votre code apex vous pouvez utiliser ce qui suit pour obtenir l'instance de SF que vous êtes dans.
Gardant dynamique assurez-vous que vous n'avez pas à mettre à jour votre code lors de votre org est migré vers une autre instance.
Il y a une question similaire sur le Salesforce StackExchange pour détecter si vous êtes dans un bac à sable ou de non - Pouvons-nous déterminer si l'instance Salesforce est la production org ou un bac à sable org?
Dans le des solutions à la recherche d'un problème de catégorievous pouvez utiliser le pod identificateur de la OrgId à déterminer si vous faites affaire avec un bac à sable.
Mise en garde Confector: La grande faiblesse est ici que vous devrez mettre à jour la liste des savoir sandbox gousses lorsque Salesforce apporte de nouveaux en ligne (donc, il pourrait être plus sûr de coller avec les autres solutions).
Vous pouvez utiliser le bloc de code suivant de Michael Farrington une autorité sur Salesforce.
Blog Original ici: Michael Farrington: Où En Suis-Je De La Méthode
Cette méthode renvoie true si vous êtes dans un test ou un environnement sandbox et false sinon.