Loading
Salesforce uitbreiden met klikken, en niet code
Abonneren op wijzigingen met Streaming-API

Abonneren op wijzigingen met Streaming-API

Als Codey Outfitters de Bayeux-client uitvoert, abonneert deze zich op de Streaming-API op het publicatiekanaal voor producten.

Codey Outfitters geeft op een Visualforce-pagina voor klanten updates op prijzen en voorraden weer en vermeldt daar ook nieuwe en uit de handel genomen outdoorartikelen. Het volgende voorbeeld van broncode voor de Visualforce-pagina is te vinden op Github. U kunt deze code aanpassen aan de vereisten van uw OData 4.0-producer.

De kern van het abonnementsmechanisme bevindt zich in de methode _subscribeChannels in src/js/channel/ServerConnection.js.

cometd.subscribe(channelName, function(event) {
  if (event && event.data && event.data.payload && 
      event.data.payload.ChangeEventHeader) {
    var header = event.data.payload.ChangeEventHeader;
    var entityName = header.entityName;
    var recordId = header.recordIds[0];
    var timestamp = header.commitTimestamp;
    var changeType = header.changeType;
        
    switch (changeType) {
      case "UPDATE":
        // Update logic ...
        break;
     case "CREATE":
        // Create logic
        break;
     case "DELETE":
        // Delete logic
        break;
    }
  }
}

De channelName voor de producten van Codey Outfitters is /data/Products__ChangeEvent. Kennisgevingen van wijzigingsevents die op het kanaal worden gepubliceerd, zijn altijd in de Bayeux-indeling en geven een bijgewerkte record in de productvoorraad aan. Het element data.payload bevat de gegevens van de wijzigingsevent en een kop waarin de aard van de wijzigingsevent wordt beschreven. Het volgende voorbeeld van een eventkennisgeving beschrijft een wijziging in een productrecord van Codey Outfitters.

{ 
  schema=”lswW55LyUCYeU7raSrmZ5A”,
  payload={
    ChangeEventHeader={
      commitUser=”005xx000001SvAn”, 
      sequenceNumber=15,
      entityName=”Products__x”,
      changeType=”UPDATE”, 
      changeOrigin=”Products?$deltaToken=3779”, 
      transactionKey=”f158f145-a...”, 
      commitTimestamp=1507759119826, 
      recordIds=[“x03xx0000000008”]
    },
    Name__c=”Camping Stove”,
    ExternalId=7801,
    UnitPrice__c=10.0,
    Stock__c=1500.0,
    OrderLimit__c=12.0,
    ProductId__c=7801.0
  },
  event={replayId=15}
}

Eventkennisgevingen hebben altijd deze structuur.

Veld Beschrijving
schema Schemaverwijzing met versienummer waarin de wijzigingsevent wordt gedefinieerd.
payload

Details van de wijzigingsevent.

  • ChangeEventHeader: geeft de aard aan van de wijzigingsevent voor gegevens.
  • Recordvelden en -waarden: de OData-producer kan ook velden bevatten die niet zijn gewijzigd. Als u de huidige waarden wilt zien, voert u een query uit op het externe object met behulp van de record-ID in de kop van de wijzigingsevent.
event De ID voor opnieuw afspelen die verwijst naar de positie van de eventkennisgeving in de eventstroom op een kanaal.

Koppen voor wijzigingsevents bevatten altijd de volgende velden.

Veld Beschrijving
commitUser Gebruiker die de event publiceert.
sequenceNumber Volgordenummer van de wijzigingsevent. Wijzigingen hebben plaatsgevonden in de volgorde waarin ze worden ontvangen.
entityName API-naam van het externe object.
changeType Geeft aan of een record is bijgewerkt, gemaakt of verwijderd.
changeOrigin Deltakoppeling waarmee de wijziging wordt aangevraagd. De OData-producer berekent het deltatoken terwijl de vorige wijzigingsaanvraag wordt verwerkt.
transactionKey Unieke ID voor de transactie.
commitTimestamp Geeft aan wanneer de kennisgeving van de wijzigingsevent wordt gepubliceerd, in milliseconden sinds 1 januari 1970.
recordIds Salesforce-ID van de extern-objectrecord die wordt bijgewerkt, gemaakt of verwijderd. Als u de huidige waarden van de recordvelden wilt weergeven, voert u een query op het externe object uit met behulp van deze record-ID.
nulledFields Lijst van velden die op null zijn ingesteld.
 
Wordt geladen
Salesforce Help | Article