U bent hier:
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.
|
| 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. |
