2010-11-11 8 views
0

Je vois la fonctionnalité de planificateur dans Salesforce, mais elle est quelque peu liée aux fonctionnalités existantes fournies par Salesforce et aucun code source d'exemple n'est fourni dans la mesure de mes recherches.Comment implémenter le planificateur dans Apex?

Ce que je veux faire est de créer mon propre planificateur qui envoie un email simple basé sur la date.

Objectif:

objet personnalisé Player a des champs

startDate : date like '2010-11-01' 
email : text field like [email protected] 
name : player's name like John. 

Si la date d'aujourd'hui est un jour avant la startDate, je veux envoyer un courriel au lecteur. Par exemple, le nom du joueur est John et si aujourd'hui est 2010-12-10 et startDat d'un joueur est réglé sur 2010-12-11, un email indiquant "hello John" est envoyé.

Malheureusement, je ne peux pas trouver un bon exemple ou un tutoriel en ligne ou un doc de salesforce comment faire cela en utilisant Apex. Quelqu'un pourrait-il indiquer par où commencer?

MISE À JOUR

Je veux étendre la réponse de eyescream.

Après avoir réglé le programmateur, vous pouvez définir ce suivi des mesures à prendre comme l'envoi d'e-mail en utilisant le modèle ou définir des champs d'objets personnalisés à certaines valeurs.

Ci-dessous j'ai trouvé utile pour les personnes utilisant un modèle de courrier électronique au format Visualforce.

J'ai un objet personnalisé 'alertTester' qui fait référence à un autre objet 'custom' et même cet objet 'custom' fait référence à un autre objet 'custom1GrandChild' et toute la relation (jusqu'à 3 ou 5 couches je pense) être consulté comme ci-dessous.

J'ai testé ci-dessous et fonctionne très bien. Maintenant, je reçois email avec mon set état :)

<messaging:emailTemplate subject="Hello" recipientType="User" relatedToType="alertTester__c" > 
<messaging:plainTextEmailBody > 

{!relatedTo.name} 
{!relatedTo.custom__r.name} 
{!relatedTo.custom__r.custom1GrandChild__r.name} 


</messaging:plainTextEmailBody> 
</messaging:emailTemplate> 

Répondre

1

Découvrez des solutions qui ne nécessitent pas de code avant que vous plonger profondément à Apex ...

Email Alert + Flux de travail Règle devrait vous fournir toutes les fonctionnalités dont vous avez besoin dans ce scénario et implique de cliquer simplement sans aucun code.

+0

Un grand merci pour le pourboire, je vais essayer ça! –

+0

J'ai regardé la page de flux de travail et j'ai trouvé que seulement 5 adresses e-mail peuvent être configurées. Dans mon scénario, les utilisateurs vont créer un calendrier et l'objet personnalisé du client a un champ de courrier électronique. Il y aurait donc 100 clients ayant chacun des adresses email individuelles. Mon planificateur doit examiner chacun d'eux afin que ce cas ne puisse pas tenir dans la fonctionnalité existante. Des pensées? –

+1

Créer une alerte par courrier électronique sur l'objet Player, définissez le type de destinataire sur "Champ d'e-mail". Votre champ (s'il s'agit vraiment d'un Email et non d'un Texte par exemple!) Devrait apparaître dans la liste. Cliquez sur la flèche pour le déplacer vers la droite de l'écran. Difficile à décrire mais peut-être la capture d'écran vous aidera: http://dl.dropbox.com/u/709568/stackoverflow/masato%20email.png – eyescream

1

Je réponds à ma question encore une fois ..

lien ci-dessous, recherchez schedule

http://www.salesforce.com/us/developer/docs/apexcode/index.htm

Looks comme Apex a une interface Schedulable que je peux implémenter et configurer une tâche cron.

Code est exemple ci-dessous prévu dans le doc:

global class TestScheduledApexFromTestMethod implements Schedulable { 

// This test runs a scheduled job at midnight Sept. 3rd. 2022 


    public static String CRON_EXP = '0 0 0 3 9 ? 2022'; 

    global void execute(SchedulableContext ctx) { 
     CronTrigger ct = [SELECT id, CronExpression, TimesTriggered, NextFireTime 
       FROM CronTrigger WHERE id = :ctx.getTriggerId()]; 

     System.assertEquals(CRON_EXP, ct.CronExpression); 
     System.assertEquals(0, ct.TimesTriggered); 
     System.assertEquals('2022-09-03 00:00:00', String.valueOf(ct.NextFireTime)); 

     Account a = [SELECT id, name FROM Account WHERE name = 
        'testScheduledApexFromTestMethod']; 
     a.name = 'testScheduledApexFromTestMethodUpdated'; 
     update a; 
    } 
} 
+0

Hmm J'ai essayé ci-dessus mais ne semble pas fonctionner d'une manière ou d'une autre. Je mets le scheduler à m'envoyer un mail toutes les heures mais je ne reçois pas .. encore sous investigation –

Questions connexes