Basé sur la valeur du champ de modification de l’objet parent dans l’objet enfant7 minutes de lecture
Il s’agit d’un déclencheur de style «agrégation-requête-mise à jour» standard.
- Tout d’abord, nous rassemblons tous les comptes qui ont changé,
- Ensuite, nous recherchons tous les contacts de ces comptes et voyons s’ils correspondent aux anciennes valeurs, et si oui, nous les ajoutons à une liste à mettre à jour,
- Enfin, nous mettons à jour les enregistrements.
Q. Je souhaite écrire un déclencheur pour activer une case à cocher dans le contact chaque fois que son compte est modifié.
COMPRENDRE LA LOGIQUE
1.Basé sur connect_america_account__c sur compte, apportez des modifications connect_america_account__c sur contact
Un déclencheur sera inscrit sur le compte
2. Sera-ce avant ou après le déclenchement?
A. After Trigger sont utilisés pour exécuter la logique sur les objets associés, donc c’est après le déclenchement
3. Comment le compte et le contact sont-ils liés?
A. Ils sont liés en fonction de l’ID de compte au contact
4. Quelle variable de contexte de déclenchement sera utilisée?
mettre à jour
déclencher UpdateConnectAmericaTrigger sur le compte (après la mise à jour) {
liste
Ensemble
pour (Compte acc: Trigger.new)
{
if (acc.connect_america_account__c! = Trigger.oldMap.get (acc.id) .connect_america_account__c
&& acc.connect_america_account__c == true
) {
setaccountId.add (acc.id);
}
}
liste
pour (contact c: conlist) {
c.connect_america_account__c = true;
newClist.add (c);
}
update newClist;
}
1 2 3 4 5 6 sept 8 9 dix 11 12 13 14 15 16 17 18 19 20 21 22 | déclencheur UpdateConnectAmericaTrigger sur Compte (après mettre à jour){ listeContact> newCList = Nouveau listeContact>(); EnsembleId> setaccountId = Nouveau EnsembleId>(); pour(Compte acc : Déclencheur.Nouveau) { si(acc.connect_america_account__c! =Déclencheur.oldMap.avoir(acc.id).connect_america_account__c && acc.connect_america_account__c == vrai ){ setaccountId.ajouter(acc.id); } } listeContact> conlisté =[[Sélectionner id, connect_america_account__c,identifiant de compte de contact où identifiant de compte DANS: setaccountId]; pour(contact c: conlisté){ c.connect_america_account__c = vrai; newClist.ajouter(c); } mettre à jour newClist; } |
Q.Comment écrire un déclencheur pour modifier le numéro de téléphone du contact lorsque le numéro de téléphone du compte change?
déclencher UpdatephoneTrigger sur le compte (après la mise à jour) {
ensemble
liste
pour (Compte acc: trigger.new)
{
// Compte oldphone = trigger.oldmap.get (acc.Id);
if (acc.phone! = trigger.oldmap.get (acc.Id) .phone) {
AccounidSet .add (acc.id);
}
}
pour (contact con:[select id,Phone,Account.phone from contact where Accountid IN: AccounidSet ]) {
for (Compte acc: trigger.new) {
if (con.AccountId == acc.id) {
con.Phone = acc.phone;
contoUpdate.add (con);
}
}
}
update contoUpdate;
}
1 2 3 4 5 6 sept 8 9 dix 11 12 13 14 15 16 17 18 19 20 21 22 | déclencheur UpdatephoneTrigger sur Compte (après mettre à jour) { ensembleid> AccounidSet = Nouveau ensembleid>(); listecontact> contoUpdate=Nouveau listecontact>(); pour(Compte acc:déclencheur.Nouveau) { // Compte oldphone = trigger.oldmap.get (acc.Id); si(acc.téléphone! = déclencheur.oldmap.avoir(acc.Id).téléphone){ AccounidSet .ajouter(acc.id); } } pour(contact con :[[sélectionner id,Téléphone,Compte.téléphone de contact où Identifiant de compte DANS: AccounidSet ]){ pour(Compte acc:déclencheur.Nouveau){ si(con.Identifiant de compte==acc.id){ con.Téléphone=acc.téléphone; contoUpdate.ajouter(con); } } } mettre à jour contoUpdate; } |
https://developer.salesforce.com/forums/?id=906F0000000kHYgIAM
Q.Account et Contact ont tous deux le champ Billing_Address__c. Les contacts ont également une case à cocher appelée active__c. Si active__c est true et Account Billing_Address__c est mis à jour, alors Billing_Address__c du contact est mis à jour
COMPRENDRE LA LOGIQUE
1.Basé sur Billing_Address__c sur le compte et active__c sur contact, apportez les modifications Billing_Address__c sur contact
Un déclencheur sera inscrit sur le compte
2. Sera-ce avant ou après le déclenchement?
A.After Trigger sont utilisés pour exécuter la logique sur les objets associés, donc c’est après le déclenchement
3. Comment le compte et le contact sont-ils liés?
A. Ils sont liés en fonction de l’ID de compte au contact
4. Quelle variable de contexte de déclenchement sera utilisée?
mettre à jour
Déclencher la mise à jourBillingAddressTrigger sur le compte (après la mise à jour) {
Ensemble
liste
pour (compte acc: trigger.new) {
if (acc.Billing_Address__c! = null && acc.Billing_Address__c! = trigger.oldMap.get (acc.id) .Billing_Address__c)
accIdSet.add (acc.id);
}
pour (Contactez cclist: [Select id,Billing_Address__c,Account.Billing_Address__c,active__c from Contact where accountId IN: accIdSet]) {
if (ccList.accountId = acc.id && cclist.active__c == true) {
ccList.Billing_Address__c = cclist.Account.Billing_Address__c;
ccNewList.add (ccList);
}
autre
{
con.Billing_Address__c = null;
ccNewList.add (con);
}
}
update ccNewList;
}
1 2 3 4 5 6 sept 8 9 dix 11 12 13 14 15 16 17 18 19 20 21 22 | Déclencheur updateBillingAddressTrigger sur Compte(après mettre à jour){ Ensembleid> accIdSet = Nouveau accIdSet(); listeid> ccNewList = Nouveau ccNewList(); pour(Compte acc:déclencheur.Nouveau){ si(acc.Billing_Address__c ! = nul && acc.Billing_Address__c! =déclencheur.oldMap.avoir(acc.id).Billing_Address__c) accIdSet.ajouter(acc.id); } pour(Contact cclist: [[Sélectionner id,Billing_Address__c,Compte.Billing_Address__c,active__c de Contact où identifiant de compte DANS: accIdSet]){ si(ccList.identifiant de compte =acc.id && cclist.active__c ==vrai){ ccList.Billing_Address__c = cclist.Compte.Billing_Address__c; ccNewList.ajouter(ccList); } autre { con.Billing_Address__c = nul; ccNewList.ajouter(con); } } mettre à jour ccNewList; } |
https://developer.salesforce.com/forums/?id=9060G000000IBknQAG
Déclencher sur le compte pour mettre à jour le contact (chaque fois que l’adresse de facturation du compte est mise à jour, l’adresse postale du contact est également mise à jour)
trigger updateContact on Account (After update) {
liste
liste
for (compte acc: accList) {
if (trigger.oldMap.containskey (acc.id) && trigger.newMap.containskey (acc.id) && trigger.oldMap.get (acc.id) .billingCity! = trigger.newMap.get (acc.id) .billingCity ) {
pour (contact c: acc.contacts) {
c.MailingCity = trigger.newMap.get (acc.id) .billingCity;
conList.add (c);
}
}
}
update conList;
}
déclencheur mettre à jour sur Compte (Après mettre à jour) { listeCompte> accList = [[sélectionner id,Nom, facturationVille,(sélectionner id, MailingVille de Contacts) de Compte où id dans :déclencheur.newMap.jeu de clés()]; listecontact> conList = Nouveau listecontact>(); pour(Compte acc: accList){ si(déclencheur.oldMap.contientkey(acc.id) && déclencheur.newMap.contientkey(acc.id) && déclencheur.oldMap.avoir(acc.id).facturationVille ! = déclencheur.newMap.avoir(acc.id).facturationVille){ pour(contact c:acc.Contacts){ c.MailingVille = déclencheur.newMap.avoir(acc.id).facturationVille; conList.ajouter(c); } } } mettre à jour conList; } |
https://salesforce.stackexchange.com/questions/117600/trigger-on-account-to-update-contactwhenever-account-billingaddress-is-updated
Mettez à jour le champ de téléphone sur les contacts à partir du champ de compte pour les enregistrements existants:
1.Itériez vos nouveaux enregistrements de compte (de préférence en vérifiant si le numéro de téléphone a été réellement modifié, en utilisant la carte Trigger.oldMap), obtenez leurs identifiants dans un ensemble ou une liste.
2. Obtenez les contacts qui font référence aux comptes sélectionnés.
3.Itériez les contacts et attribuez le numéro de téléphone du compte aux contacts.
Mettez à jour les contacts.
déclencher updatephonefield sur le compte (avant la mise à jour) {
Ensemble
liste
pour (Compte acc: Trigger.new) {
if (acc.Phone! = null && acc.phone! = trigger.oldmap.get (acc.id) .phone) {
setaccid.add (selon id);
}
liste
pour (contacter cp: clist) {
cp.Phone = acc.Phone;
newclist.add (cp);
}
}
mettre à jour newclist;
}
1 2 3 4 5 6 sept 8 9 dix 11 12 13 14 15 16 17 18 | déclencheur updatephonefield sur Compte (avant mettre à jour ) { Ensembleid> setaccid = Nouveau Ensembleid>(); listeContact> newclist = Nouveau listeContact>(); pour (Compte acc : Déclencheur.Nouveau) { si ( acc.Téléphone ! = nul && acc.téléphone ! = déclencheur.oldmap.avoir(acc.id).téléphone) { setaccid.ajouter(acc.id); } listeContact> cliste = [[Sélectionner id,téléphone de contact où identifiant de compte DANS: setaccid]; pour(contact cp:cliste){ cp.Téléphone = acc.Téléphone; newclist.ajouter(cp); } } mettre à jour newclist; } |
https://developer.salesforce.com/forums/?id=906F0000000fydeIAA
https://salesforce.stackexchange.com/questions/41701/update-contact-phone-with-the-account-phone/327522#327522
https://salesforce.stackexchange.com/questions/222590/get-values-of-the-records-from-trigger-newmap-in-before-update-triggers/327524#327524
Créer un déclencheur pour créer automatiquement un contact lorsqu’il y a un nouveau compte
trigger newContactTrigger sur le compte (après insertion) {
liste
for (Compte acc: trigger.new) {
contact c = nouveau contact ();
c.accountid = acc.id;
c.LastName = nom acc.;
clist.add (c);
}
insérer clist;
}
déclencheur nouveauContactTrigger sur Compte(après insérer){ listeContact> cliste = Nouveau listeContact>(); pour(Compte acc: déclencheur.Nouveau){ contact c = Nouveau contact(); c.identifiant de compte = acc.id; c.Nom de famille = acc.Nom; cliste.ajouter(c); } insérer cliste; } |
https://salesforce.stackexchange.com/questions/88467/error-with-trigger-createaccountcontact/327523#327523