Olet tässä:
Muutoksiin reagoiminen Apex-käynnistimillä
Käytä Apex-käynnistimiä automatisoidaksesi liiketoimintasi ulkoisilla muutostapahtumilla.
Codey Outfitters voi mukauttaa Salesforcea lähettämään sähköposti- tai tekstiviesti-ilmoituksia tuotteista, jotka ovat loppumassa varastossa tai joiden hintaa on alennettu. Välineitä ja muita kysyttyjä tuotteita voidaan valvoa varastosta loppumisen varalta ja tilata automaattisesti. Varmista ennen Salesforcen mukauttamista, että olet ottanut muutostietojen seuraamisen käyttöön ulkoiselle objektille, jota haluat seurata. Codey Outfitters luo Apex-käynnistimen nimeltään LowOnStock seuratakseen tuotteita, jotka ovat loppumassa varastosta. Seuraavaksi yritys valitsee käynnistimen sObjectin ja muutostapahtuman, joka julkaisee ulkoisen objektin Products__x muutokset: Products__ChangeEvent.
Alla on esimerkki yksinkertaisesta säännöstä, joka lähettää ilmoituksen, kun tuote on loppumassa varastosta.
trigger LowOnStock on Products__ChangeEvent (after insert) {
// Get the change event’s product ID for added and updated products
Set<Id> productIds = new Set<Id>();
for (Products__ChangeEvent event: Trigger.new) {
if (event.ChangeEventHeader.getChangeType() != 'DELETE') {
String productId = event.ChangeEventHeader.getRecordIds()[0];
productIds.add(productId);
}
}
if (productIds.size() > 0) {
ProductNotifications.notifyOnLowOnStockProductUpdates(productIds);
}
}
ProductNotifications-luokka kyselee ulkoisia Product-objekteja saadakseen muutetut tuotetunnukset ja LowOnStock-kynnysarvon. Nykyisten Product-tietueiden noutaminen ulkoisesta järjestelmä hyväksytyille tuotteille on callout, joka on ajoitettu Apex-futuurina.
public class ProductNotifications {
// Notify subscribers on product updates that are low on stock.
// This method is run asynchronously as it is performing a callout to the external
// system to get the latest product details
@future (callout=true)
public static void notifyOnLowOnStockProductUpdates(Set<Id> productIds) {
// Look up the current stock threshold to filter the products with
Integer productStockThreshold = ...;
List<Products__x> lowOnStockProducts =
getProductsLowOnStock(productIds, productStockThreshold);
// Notify subscribers
notifySubscribers(lowOnStockProducts,
‘These items are running out of stock. Act soon!’);
}
// Get the external Product objects for each Product ID
public static List<Products__x>
getProductsLowOnStock(Set<Id> productIds, Integer productStockThreshold) {
return [SELECT Id, ExternalId, Name__c, ProductId__c, Stock__c, UnitPrice__c
FROM Products__x
WHERE Stock__c < :productStockThreshold AND Stock__c > 0 AND
Id IN :productIds];
}
// Notify subscribers by sending an email or SMS
public static void notifySubscribers(String message, List<Products__x> products) {
...
}
}
Voit löytää muutostietojen metadatan sObject descripe API:n kautta. Esimerkiksi Products__ChangeEvent-objektin sObject describe näyttää seuraavat muutostapahtumien vakiokentät.
| Kenttä | Tyyppi | Kuvaus |
|---|---|---|
| Id | Merkkijono | Muutostapahtuman Salesforce-tunnus. Tämä tunnus ei ole muutetun tietueen Salesforce-tunnus, vaan tapahtuma, joka sisältää tietueen muutokset. |
| ReplayId | Merkkijono | Tapahtumailmoituksen sijainti kanavan tapahtumaketjussa. |
| ChangeEventHeader | Monimutkainen tyyppi | Tietojen muutostapahtuman tyyppi. |
Jokainen muutostapahtumaobjekti sisältää kenttiä, jotka sisältävät päivitetyn arvon, kun tietue päivitettiin. OData-tuottaja voi myös sisältää kenttiä, jotka eivät ole muuttuneet. Voit tarkastaa tämänhetkiset arvot kyselemällä ulkoista objektia käyttämällä tietueen tunnusta muutostapahtuman otsakkeessa.
Seuraava taulukko esittää Products__x-objektin esimerkkikenttiä. Muutostapahtumien objektit on räätälöity seurattua ulkoista objektia varten. Kaikki kentät eivät ole välttämättä käytettävissä muutostapahtumalle.
| Kenttä | Tyyppi | Kuvaus |
|---|---|---|
| Id | Merkkijono | Tuotetietueen Salesforce-tunnus organisaatiossasi |
| ExternalId | Merkkijono | Tuotetietueen ulkoinen tunnus |
| DisplayUrl | Merkkijono | Ulkoisessa järjestelmässä olevan tietueen URL-osoite |
| CreatedOn__c | DateTime | Milloin tietue luotiin ulkoisessa järjestelmässä |
| UpdatedOn__c | DateTime | Milloin tietue päivitettiin viimeksi ulkoisessa järjestelmässä |
| Name__c | Merkkijono | Product__x-objektissa oleva tuotenimi |
| OrderLimit__c | Kokonaisluku | Kerralla tilattavien tuotteiden määrä |
| Stock__c | Kokonaisluku | Varastossa olevien tuotteiden määrä |
| UnitPrice__c | Desimaali (8,2) | Tuotteen yksikköhinta |
Seuraavat kentät ovat muutostapahtumien otsakkeen monimutkaisen tyypin kenttiä. Käytä ChangeEventHeader-luokan getter-metodia käyttääksesi sen kenttiä Apexissa. Jos haluat esimerkiksi käyttää kenttää ChangeType, käytä arvoa eventObject.ChangeEventHeader.getChangeType().
| Kenttä | Tyyppi | Kuvaus |
|---|---|---|
| commitUser | Merkkijono | Tapahtuman julkaissut käyttäjä. |
| sequenceNumber | Kokonaisluku | Muutostapahtuman järjestysnumero. Muutokset näytetään niiden vastaanottojärjestyksessä. |
| entityName | Merkkijono | Ulkoisen objektin API-nimi. |
| changeType | ChangeType enum | Määrittää, päivitettiinkö, luotiinko vai poistettiinko tietue. Ulkoisten muutostapahtumien enum-arvot ovat Create, Update ja Delete. |
| changeOrigin | Merkkijono | Delta-linkki, jota käytetään edellisen tai ensimmäisen muutospyynnön jälkeisten muutosten pyytämiseen. OData-tuottaja laskee delta-valtuuden suorittaessaan edellistä muutospyyntöä. |
| transactionKey | Merkkijono | Transaktion yksilöllinen tunnus. |
| commitTimestamp | Long | Määrittää, milloin muutostapahtuman ilmoitus julkaistaan millisekunteina 1. tammikuuta 1970 jälkeen. |
| recordIds | Merkkijonotyyppinen taulukko | Ulkoisen objektin päivitetyn, luodun tai poistetun tietueen Salesforce-tunnus. Jos haluat nähdä tietueen kenttien tämänhetkiset arvot, kysele ulkoista objektia käyttämällä tätä tietuetunnusta. Tämä taulukko sisältää aina vain yhden Salesforce-tunnuksen. |
| nulledFields | Merkkijonotyyppinen taulukko | Null-arvoisten kenttien nimien luettelo. |
