Début de modificationIBM Workload Automation, version 9.3

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.

Avant de commencer la création d'une définition de travail Salesforce avec IBM Workload Scheduler, prenez en considération des limitations suivantes :
  • 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.
Pour créer une définition de travail Salesforce, vous devez effectuer les étapes de la procédure suivante.
  1. Enregistrez-vous sur le serveur Salesforce et demandez un ID utilisateur et un mot de passe.
  2. Connectez-vous au serveur Salesforce.
  3. 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);
        }
    }
  4. 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 :
    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.
    Les valeurs que vous indiquez dans le fichier de propriétés sont les valeurs par défaut qui sont utilisées lors de la définition du travail.

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.

Le tableau suivant répertorie les attributs obligatoires et facultatifs des travaux Salesforce :
Tableau 1. Attributs obligatoires et facultatifs pour la définition d'un travail de type Salesforce
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.
Début de modification

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.

Début de modificationAprè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. Fin de modification

Fin de modification
Début de modification

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.

Fin de modification

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.

Par exemple, à partir de la ligne de commande conman, vous pouvez afficher les propriétés du travail en exécutant :
conman sj <nom_travail_Salesforce>;jobprop
<nom_travail_Salesforce> est le nom du travail Salesforce.
Pour un travail Salesforce dans la section Extra Information de la commande de sortie, vous voyez les propriétés suivantes :
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
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.

L'exemple suivant montre la définition d'un travail Salesforce :
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.

Pour un journal de travail Salesforce, vous voyez les informations suivantes :
===============================================================
= 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 :

Conception de votre charge de travail.



Fin de modification