Travaux Salesforce
IBM Workload Scheduler s'intègre à Salesforce afin de vous permettre d'automatiser, de surveiller et de contrôler les flots de travaux contenant des travaux par lots APEX.
Prérequis
Ce système permet un plus grand contrôle de vos travaux Salesforce avec une automatisation de charge de travail basée sur le calendrier et sur les événements. Il fournit également un point de contrôle unique pour gérer les exceptions et automatiser les processus de récupération.Pour plus d'informations sur les versions prises en charge des plug-in de travaux, générez le rapport Data Integration sur le site Web d'IBM® Software Product Compatibility Reports, puis sélectionnez l'onglet Supported Software.
- Les classes de traitement par lots Apex (et les méthodes connexes) que vous voulez exécuter avec le plug-in Salesforce doivent être définies avec un niveau d'accès global pour les rendre accessibles à tous les Apex, où qu'ils soient (le niveau d'accès public n'est pas suffisant).
- Lors de la définition du travail, seules les classes de traitement par lots Apex Salesforce peuvent être exécutées. Si vous sélectionnez une classe autre qu'une classe de traitement par lots Apex, le travail échoue.
- Enregistrez-vous sur le serveur Salesforce et demandez un ID utilisateur et un mot de passe.
- Connectez-vous au serveur Salesforce.
- Créez les classes Apex suivantes qui sont nécessaires pour établir la
communication entre IBM Workload Scheduler et le serveur Salesforce.
Les classes Apex IBM Workload Scheduler doivent être définies en dehors de tout module.
- Classe TWSListApexClass
@RestResource(urlMapping='/TWSListApexClass/*') global with sharing class TWSListApexClass{ //Cette classe Apex expose le service REST TWSListApexClass //qui renvoie une liste de tous les classes Batchable Apex. @HttpGet global static List<ApexClass> doGet() { RestRequest req = RestContext.request; RestResponse res = RestContext.response; String fullName=''; List<ApexClass> tempList = [SELECT NamespacePrefix,Name FROM ApexClass ORDER BY Name]; List<ApexClass> result = new List<ApexClass>(); for (ApexClass a: tempList){ if (a.NamespacePrefix==null || a.NamespacePrefix.equals('')){ fullName=a.Name; } else { fullName=a.NamespacePrefix+'.'+a.Name; } System.debug(LoggingLevel.Info, 'ApexClass: '+fullName); result.add(a); } return result; } }
- Classe TWSSubmitApexJob
@RestResource(urlMapping='/TWSSubmitApexJob/*') global with sharing class TWSSubmitApexJob{ //Cette classe Apex expose le service REST TWSSubmitApexJob //qui soumet une classe Apex au serveur Salesforce. @HttpGet global static ID doGet() { RestRequest req = RestContext.request; RestResponse res = RestContext.response; String apexClass = req.params.get('className'); System.debug(LoggingLevel.Info, 'Execute Batch:'+apexClass); Type t = Type.forName(apexClass); if (t == null){ throw new TWSException (apexClass + ' not found'); } Object s = t.newInstance(); ID batchprocessid = Database.executeBatch((Database.Batchable<sObject>)s); System.debug(LoggingLevel.Info, 'Job ID: '+batchprocessid); return batchprocessid; } global class TWSException extends Exception{} }
- Classe TWSMonitorApexJob
@RestResource(urlMapping='/TWSMonitorApexJob/*') global with sharing class TWSMonitorApexJob{ //Cette classe Apex expose le service REST TWSMonitorApexJob //qui surveillera la progression du travail Apex d'arrière-plan. @HttpGet global static AsyncApexJob doGet() { RestRequest req = RestContext.request; RestResponse res = RestContext.response; ID i = (ID) req.params.get('jobID'); AsyncApexJob a = [SELECT Id, Status, ExtendedStatus, NumberOfErrors, JobItemsProcessed, TotalJobItems FROM AsyncApexJob WHERE Id = :i]; return a; } }
- Classe TWSAbortApexJob
@RestResource(urlMapping='/TWSAbortApexJob/*') global with sharing class TWSAbortApexJob{ //Cette classe Apex expose le service REST TWSAbortApexJob //qui interrompra le travail Apex sur le serveur Salesforce. @HttpGet global static void doGet() { RestRequest req = RestContext.request; RestResponse res = RestContext.response; String jobID = req.params.get('jobID'); System.abortJob(jobID); } }
- Vérifiez le contenu du fichier de propriétés du plug-in Salesforce :
<rép_principal_TWA>\TWS\javaExt\cfg\<nom_plug-in>.properties
Ce fichier contient les propriétés du plug-in définies au moment de l'installation et que vous pourrez substituer ultérieurement. Voici les propriétés du plug-in :
oùProxyServer ProxyServerPort pollingPeriod pollingTimeout
- ProxyServer
- Adresse IP ou nom de serveur pour le serveur proxy. Indiquez cette propriété si vous vous connectez au serveur Salesforce via un serveur proxy.
- ProxyServerPort
- Port d'écoute du serveur proxy.
- pollingPeriod
- Fréquence de surveillance. Ce paramètre détermine la fréquence à laquelle le travail est surveillé pendant son exécution. Il est exprimé en secondes.
- pollingTimeout
- Durée de surveillance. Ce paramètre détermine la durée pendant laquelle le travail est surveillé pendant son exécution. A la fin de l'intervalle de délai d'attente, le travail échoue. Il est exprimé en secondes.
Scénario métier
WWMail4U.Inc propose des produits de messagerie et de commerce électronique ainsi que des services dans le monde entier. En tant qu'organisation, WWMail4U.Inc gère un énorme volume de trafic de données complexe.
WWMail4U.Inc opère dans un marché ultra compétitif et, de manière conserver son rôle de leader, a récemment mis en oeuvre des solutions de cloud afin de fournir des applications métier sous forme de service à ses clients. La priorité de WWMail4U.Inc est d'aligner ses serveurs source SAP sur le serveur SalesForce au sein de l'environnement de cloud. La charge de travail SAP de la société est déjà sous contrôle de IBM Workload Scheduler et l'extension de ce contrôle à tous leurs processus métier (par lots) est d'ores et déjà prévue.
L'intégration entre IBM Workload Scheduler et Salesforce a permis à WWMail4U.Inc de disposer de l'intégralité de sa chaîne de processus métier en un flot de travaux unique contrôlé par IBM Workload Scheduler.
Salesforce, définition de travail
La description des propriétés du travail et les valeurs admises sont fournies dans l'aide contextuelle de Dynamic Workload Console en cliquant sur l'icône point d'interrogation (?) dans le coin supérieur droit de la sous-fenêtre des propriétés.Pour plus d'informations sur la création de travaux à l'aide des diverses interfaces produit prises en charge, voir Définition d'un travail.
Attribut | Description et valeur | Obligatoire |
---|---|---|
Server | Serveur Salesforce que Salesforce vous fournit suite à votre enregistrement. | ✓ |
User name | Nom de l'utilisateur autorisé à accéder au serveur Salesforce. | ✓ |
Password | Mot de passe associé à l'utilisateur autorisé à accéder au serveur Salesforce. | ✓ |
Classe APEX | Classe de lots APEX qui est prise en charge pour IBM Workload Scheduler. Vous ne pouvez exécuter que des classes de lots Apex Salesforce. Si vous indiquez une classe qui n'est pas une classe de lot, le travail échoue. | ✓ |
Planification et arrêt du travail dans IBM Workload Scheduler
Vous planifiez des travaux IBM Workload Scheduler Salesforce en les définissant dans des flots de travaux. Ajoutez le travail à un flot de travaux avec tous les arguments de planification nécessaires et soumettez le flot de travaux.
Vous pouvez soumettre des travaux à l'aide de Dynamic Workload Console, Application Lab ou de la ligne de commande conman. Pour plus d'informations sur la planification et la soumission de travaux et de flots de travaux à l'aide des diverses interfaces, voir Planification et soumission de travaux et de flots de travaux.
Après la soumission, une fois que le travail est en cours d'exécution et qu'il est signalé comme étant à l'état EXEC dans IBM Workload Scheduler, vous pouvez l'arrêter si nécessaire en utilisant la commande kill à partir de Dynamic Workload Console. Toutefois, cette action ne fonctionne que dans le cadre du scénario Demande/Réponse ; par conséquent, les processus IBM Workload Scheduler n'attendent pas de recevoir une réponse du travail Salesforce.
Surveillance du travail
Si l'agent IBM Workload Scheduler s'arrête lorsque vous soumettez le travail IBM Workload Scheduler Salesforce ou pendant que le travail est en cours d'exécution, dès que l'agent redémarre dans le scénario de Demande/Réponse, IBM Workload Scheduler lance la surveillance du travail là où il s'était arrêté et attente la phase de réponse.
Pour plus d'informations sur la surveillance des travaux à l'aide des différentes interfaces de produit disponibles, voir Surveillance des travaux IBM Workload Scheduler.
Propriétés de travail
Lorsque le travail est en cours d'exécution, vous pouvez suivre son statut et analyser ses propriétés. Notamment, si le travail contient des variables, vous pouvez vérifier dans la section Informations supplémentaires la valeur transmise à la variable depuis le système distant. Certains flots de travaux utilisent la transmission de variable, par exemple, la valeur d'une variable spécifiée au travail 1, contenu dans le flot de travaux A, est nécessaire au travail 2 pour qu'il s'exécute dans le même flot de travaux.
Pour plus d'informations sur la transmission de variables entre travaux, voir Transmission des propriétés de travail d'un travail à l'autre dans la même instance de flot de travaux.
Pour plus d'informations sur l'affichage des propriétés de travail à partir des diverses interfaces prises en charge, voir Analyse du journal de travail.
conman sj <nom_travail_Salesforce>;jobprop
où <nom_travail_Salesforce> est le nom du travail
Salesforce.Extra Information
Apex batch class = TWSBatchTest
Apex job ID = 7072000000eLnYOAA0
Job item processed = 1
Number of errors= 0
Server address = regionA.salesforce.com
Batch status = Completed
Total Job items = 1
User name = userabc@xyz.com
où - Apex batch class
- Classe de lots APEX qui est prise en charge pour IBM Workload Scheduler.
- Apex job ID
- ID du travail Salesforce.
- Job item processed
- Nombre d'éléments de travail traités.
- Number of errors
- Nombre d'erreurs.
- Server address
- Serveur Salesforce que vous avez indiqué dans la zone Serveur.
- Batch status
- Statut de travail par lots
- Total Job items
- Nombre total d'éléments de travail traités.
- User name
- Nom de l'utilisateur autorisé à accéder au serveur Salesforce que vous avez indiqué dans la zone Nom d'utilisateur.
Vous pouvez exporter les propriétés du travail Salesforce que vous pouvez voir dans la section Extra Information vers un travail successif dans la même instance de flot de travaux. Pour plus d'informations sur la liste des propriétés de travail que vous pouvez exporter, voir Propriétés des travaux SSalesforce .
Le fichier de propriétés est automatiquement généré lorsque vous effectuez un "Test de Connexion" à partir de Dynamic Workload Console dans le panneau de définition de travail, ou bien lorsque vous soumettez le travail à exécuter pour la première fois. Une fois le fichier créé, vous pouvez le personnaliser. Cela s'avère pratique lorsqu'il vous faut planifier plusieurs travaux du même type. Vous pouvez indiquer les valeurs dans le fichier de propriétés et éviter de devoir fournir des informations, telles que les données d'identification, pour chaque travail. Vous pouvez substituer ces valeurs dans le fichier de propriétés en définissant différentes valeurs lors de la définition de travail.
NEWYORK-01#JOB-SF-0000
TASK
<?xml version="1.0" encoding="UTF-8"?>
<jsdl:jobDefinition xmlns:jsdl=
"http://www.ibm.com/xmlns/prod/scheduling/1.0/jsd
l" xmlns:jsdlsalesforce=
"http://www.ibm.com/xmlns/prod/scheduling/1.0/jsdlsalesforce"
name="SALESFORCE">
<jsdl:application name="salesforce">
<jsdlsalesforce:salesforce>
<jsdlsalesforce:SalesforceParameters>
<jsdlsalesforce:SalesforceParms>
<jsdlsalesforce:ServerConnection>
<jsdlsalesforce:Server>regionA.salesforce.com
sforce.com</jsdlsalesforce:Server>
<jsdlsalesforce:UserID>userabc@xyz.com
</jsdlsalesforce:UserID>
<jsdlsalesforce:password>{aes}+D
2UAAxhxtYf8ENfb7LNr0DLRt0hwKPHlDiA2/PO1e4=
</jsdlsalesforce:password>
</jsdlsalesforce:ServerConnection>
<jsdlsalesforce:APEXJobDetails>
<jsdlsalesforce:APEXClass>TWSBatchTest
</jsdlsalesforce:APEXClass>
</jsdlsalesforce:APEXJobDetails>
</jsdlsalesforce:SalesforceParms>
</jsdlsalesforce:SalesforceParameters>
</jsdlsalesforce:salesforce>
</jsdl:application>
</jsdl:jobDefinition>
RECOVERY STOP
Contenu du journal de travail
Pour plus d'informations sur l'affichage du journal de travail à partir des diverses interfaces prises en charge, voir Analyse du journal de travail.
Par exemple, vous pouvez voir le contenu du journal de travail en exécutant la commande conman sj <nom_travail_Salesforce>;stdlist, où <nom_travail_Salesforce> est le nom du travail Salesforce.
===============================================================
= JOB : NY0000000000#JOBS[(0000 05/08/14),(JOBS)].SF_MAR0318376017
= TASK : <?xml version="1.0" encoding="UTF-8"?>
<jsdl:jobDefinition xmlns:jsdl=
"http://www.ibm.com/xmlns/prod/scheduling/1.0/jsdl" xmlns:jsdlsalesforce=
"http://www.ibm.com/xmlns/prod/scheduling/1.0/jsdlsalesforce" name="SALESFORCE">
<jsdl:variables>
<jsdl:stringVariable name=
"tws.jobstream.name">JOBS</jsdl:stringVariable>
<jsdl:stringVariable name=
"tws.jobstream.id">JOBS</jsdl:stringVariable>
<jsdl:stringVariable name="tws.job.name">
SF_MAR0318376017</jsdl:stringVariable>
<jsdl:stringVariable name=
"tws.job.workstation">NY0000000000</jsdl:stringVariable>
<jsdl:stringVariable name=
"tws.job.iawstz">201405080000</jsdl:stringVariable>
<jsdl:stringVariable name=
........."tws.job.promoted">NO</jsdl:stringVariable>
<jsdl:stringVariable name=
.........."tws.job.resourcesForPromoted">10</jsdl:stringVariable>
<jsdl:stringVariable name=
.........."tws.job.num">607245960</jsdl:stringVariable>
</jsdl:variables>
<jsdl:application name="salesforce">
<jsdlsalesforce:salesforce>
<jsdlsalesforce:SalesforceParameters>
<jsdlsalesforce:SalesforceParms>
<jsdlsalesforce:ServerConnection>
<jsdlsalesforce:Server>
regionA.salesforce.com</jsdlsalesforce:Server>
<jsdlsalesforce:UserID>userabc@xyz.com</jsdlsalesforce:UserID>
<jsdlsalesforce:password>
{aes}+D2UAAxhxtYf8ENfb7LNr0DLRt0hwKPHlDiA2/PO1e4=
</jsdlsalesforce:password>
</jsdlsalesforce:ServerConnection>
<jsdlsalesforce:APEXJobDetails>
<jsdlsalesforce:APEXClass>TWSBatchTest</jsdlsalesforce:APEXClass>
</jsdlsalesforce:APEXJobDetails>
</jsdlsalesforce:SalesforceParms>
</jsdlsalesforce:SalesforceParameters>
</jsdlsalesforce:salesforce>
</jsdl:application>
<jsdl:resources>
<jsdl:orderedCandidatedWorkstations>
<jsdl:workstation>
690830601B8D4681AF38D3529BC5199E</jsdl:workstation>
</jsdl:orderedCandidatedWorkstations>
</jsdl:resources>
</jsdl:jobDefinition>
= TWSRCMAP :
= AGENT : NC125181_1
= Job Number: 607245960
= Thu May 22 17:18:49 CEST 2014
===============================================================
Apex Batch job ID: 7072000000eLnYOAA0
Apex job completed with success
Apex Job ID: 7072000000eLnYOAA0
Status: Completed
Total Batches: 1
Batches Processed: 1
Failures: 0
===============================================================
= Exit Status : 0
= Elapsed Time (Minutes) : 1
= Thu May 22 17:18:53 CEST 2014
===============================================================
Voir aussi
A partir de Dynamic Workload Console, vous pouvez effectuer la même tâche que celle décrite dans :
Création de définitions de travaux.
Pour plus d'informations sur la création et l'édition d'objets de planification, voir :