Yfirskjal: API_Reference.md Útfærslumappa: app/src/Task/ Kóðaeining: Cloud Event Message Events (Kóðaeining 65346)
Cloud Events viðbótin veitir innfædd Business Central Ytri viðskiptaviðburðir sem gera ytri kerfum kleift að fá vefkrókstilkynningar þegar skilaboð í cloud events klárast eða mistakast. Þetta leyfir viðburðadrifnar hönnunarrnar þar sem ytri kerfi fá tilkynningar strax í stað þess að biðjast eftir stöðu.
Helstu eiginleikar:
Ytri viðskiptaviðburðir Business Central gera ytri kerfum kleift að gerast áskrifendur að viðburðum og fá HTTP POST-tilkynningar þegar viðburðir eiga sér stað. Cloud Events viðbótin birtir tvo ytri viðskiptaviðburði:
Allar Cloud Events vefkrókstilkynningar falla undir:
Cloud Event CategoryÞennan flokk má nota til að sía og skipuleggja viðburðaáskriftir í Business Central.
Vefkrókstilkynningar senda viljandi lágmarksupplýsingar til að:
Eftir að fá vefkrókstilkynningu kalla áskrifendur Cloud Event Data API með MessageId til að ná í öll svarsgögn.
Tilgangur: Tilkynnir ytri kerfum þegar skilaboð í cloud events hafa lokið úrvinnslu með velgengi.
Viðburðarheiti: CloudEventMessageCompleted Birtiheiti viðburðar: Cloud Event Message Completed Viðburðaflokkur: Origo Cloud Event Gefinn út af: Kóðaeining 65313 Cloud Event Message Task
Viðburðurinn er gefinn út eftir að skilaboð í cloud events hafa verið afgreidd með velgengi:
Cloud Event Message töflunni{
"MessageId": "a8f5f167-8f2c-4a42-9b3e-5c6c7d8e9f0a",
"MessageType": "Customer.CreditLimit.Get",
"ResponseContentLink": "/api/origo/cloudEvent/v1.0/responses(a8f5f167-8f2c-4a42-9b3e-5c6c7d8e9f0a)/data",
"Timestamp": "2026-03-08T14:30:22Z"
}
| Reitur | Tegund | Lýsing |
|---|---|---|
MessageId | Guid | Einkvæmt auðkenni skilaboðanna. Notaðu þetta til að kalla GET /cloudEventData(MessageId) til að ná í öll svarsgögn. |
MessageType | Text[250] | Tegund skilaboðanna sem klárast (t.d. "Customer.CreditLimit.Get", "Data.Records.Get"). Hægt að nota til leiðarins eða síunar. |
ResponseContentLink | Text[250] | Bein API-tengill til að sækja svarsgögn. Notaðu þessa slóð til að ná í öll svar án þess að smíða API-slóðina handvirkt. |
Timestamp | DateTime | Þegar skilaboðin klárðust (ISO 8601 snið). |
Eftir að fá vefkrókstilkynningu, kalaðu Cloud Event Data API til að ná í öll svarsgögn:
Beiðni:
GET /api/origo/cloudEvent/v1.0/responses('{message-id}')
Authorization: Bearer {token}
Svar:
{
"id": "a8f5f167-8f2c-4a42-9b3e-5c6c7d8e9f0a",
"data": "... öll svarsgögn sem base64 eða JSON ..."
}
sequenceDiagram
participant External as Ytri kerfi
participant BCQueue as BC Queue API
participant BCTask as BC Task afgreiðsluþjónn
participant Webhook as Vefkróksendapunktur
participant BCData as BC Data API
External->>BCQueue: POST /cloudEventQueue (skilaboð)
BCQueue-->>External: 202 Accepted (MessageId)
BCTask->>BCTask: Afgreiðir skilaboð
BCTask->>BCTask: Geymir svarsgögn
BCTask->>Webhook: POST vefkrókur (MessageId, tegund, tími)
Webhook->>BCData: GET /cloudEventData(MessageId)
BCData-->>Webhook: Svarsgögn
Webhook->>Webhook: Vinnur úr svari
Tilgangur: Tilkynnir ytri kerfum þegar úrvinnsla skilaboða í cloud events hefur mistekist.
Viðburðarheiti: CloudEventMessageFailed Birtiheiti viðburðar: Cloud Event Message Failed Viðburðaflokkur: Origo Cloud Event Gefinn út af: Kóðaeining 65312 Cloud Event Message Error
Viðburðurinn er gefinn út eftir að úrvinnsla skilaboða í cloud events hefur mistekist:
Cloud Event Message töflunni{
"MessageId": "b9f6f267-9f3d-5b52-0c4f-6d7d8e9f1b1b",
"MessageType": "Data.Records.Set",
"ResponseContentLink": "/api/origo/cloudEvent/v1.0/responses(b9f6f267-9f3d-5b52-0c4f-6d7d8e9f1b1b)/data",
"Timestamp": "2026-03-08T14:35:18Z"
}
| Reitur | Tegund | Lýsing |
|---|---|---|
MessageId | Guid | Einkvæmt auðkenni skilaboðanna. Notaðu þetta til að kalla GET /cloudEventQueue(MessageId) til að ná í villuupplýsingar. |
MessageType | Text[250] | Tegund skilaboðanna sem mistókst (t.d. "Data.Records.Set", "Sales.Document.Release"). |
ResponseContentLink | Text[250] | Bein API-tengill til að sækja villuupplýsingar. Notaðu þessa slóð til að ná í villusvari án þess að smíða API-slóðina handvirkt. |
Timestamp | DateTime | Þegar úrvinnsla skilaboðanna mistókst (ISO 8601 snið). |
Eftir að fá vefkrókstilkynningu, kalaðu Cloud Event Queue API til að ná í villuupplýsingar:
Beiðni:
GET /api/origo/cloudEvent/v1.0/queues('{message-id}')
Authorization: Bearer {token}
Svar:
{
"id": "b9f6f267-9f3d-5b52-0c4f-6d7d8e9f1b1b",
"type": "Data.Records.Set",
"specversion": "1.0",
"source": "MyIntegrationApp v1.0",
"time": "2026-03-08T14:35:15Z",
"datacontenttype": "text/json",
"data": "{
\"error\": \"Record not found\",
\"detailedMessage\": \"Table: Customer, SystemId: {guid}\",
\"stackTrace\": \"...\",
\"callStack\": \"...\"
}"
}
Villusvar er geymt á JSON-sniði með eftirfarandi reitum:
Auk Ytri viðskiptaviðburða fyrir vefkróka veitir Cloud Events viðbótin Samþættingarviðburði sem leyfa öðrum Business Central viðbótum að bregðast við skilaboðalíftímaviðburðum.
Tilgangur: Gefinn út áður en úrvinnsla skilaboða í cloud events hefst.
Viðburðartegund: IntegrationEvent Aðgengi: Internal Gefinn út af: Kóðaeining 65313 Cloud Event Message Task
Undirskrift:
[IntegrationEvent(false, false)]
internal procedure OnBeforeCloudEventMessageProcessing(var CloudEventMessage: Record "Cloud Event Message")
Færibreytur:
CloudEventMessage: Skilaboðafærslan sem er að fara í vinnslu (sent með tilvísun, hægt að breyta)Notkunartilvik:
Tilgangur: Gefinn út eftir að skilaboð í cloud events hefur lokið með velgengi.
Viðburðartegund: IntegrationEvent Aðgengi: Internal Gefinn út af: Kóðaeining 65313 Cloud Event Message Task
Undirskrift:
[IntegrationEvent(false, false)]
internal procedure OnAfterCloudEventMessageCompleted(var CloudEventMessage: Record "Cloud Event Message")
Færibreytur:
CloudEventMessage: Skráin fyrir klárað skilaboðið (sent með tilvísun)Notkunartilvik:
Tilgangur: Gefinn út eftir að úrvinnsla skilaboða í cloud events hefur mistekist.
Viðburðartegund: IntegrationEvent Aðgengi: Internal Gefinn út af: Kóðaeining 65312 Cloud Event Message Error
Undirskrift:
[IntegrationEvent(false, false)]
internal procedure OnAfterCloudEventMessageFailed(var CloudEventMessage: Record "Cloud Event Message"; ErrorText: Text)
Færibreytur:
CloudEventMessage: Skráin fyrir misheppnaðan skilaboðið (sent með tilvísun)ErrorText: Texti villuskilaboðannaNotkunartilvik:
| Reitur | Gildi | Lýsing |
|---|---|---|
| Subscriber ID | (Sjálfkrafa) | Einkvæmt auðkenni áskriftarinnar |
| Event Name | CloudEventMessageCompleted eða CloudEventMessageFailed | Veldu hvaða viðburð á að gerast áskrifandi að |
| Company Name | Heiti fyrirtækisins þíns | Fyrirtækjasamhengi viðburðarins |
| Event Category | Origo Cloud Event | Sía í Cloud Events flokk |
| Endpoint URL | https://your-domain.com/webhook/bc-cloud-events | Slóð vefkróksendapunktsins þíns |
| Authentication | (Veldu aðferð) | Hvernig á að auðkenna við endapunktinn þinn |
Veldu auðkenningaraðferð:
Valkostur 1: OAuth 2.0 (Mælt með)
Valkostur 2: Grunnauðkenning
Valkostur 3: API-lykill
Valkostur 4: Ekkert
Endapunkturinn þinn ætti að meðhöndla tvíteknar tilkynningar af þolinmæði:
// Dæmi: Node.js Express endapunktur
app.post('/webhook/bc-cloud-events', async (req, res) => {
const { MessageId, MessageType, ResponseContentLink, Timestamp } = req.body;
// Athugaðu hvort við höfum þegar meðhöndlað þessi skilaboð
const exists = await db.checkMessageProcessed(MessageId);
if (exists) {
console.log(`Tvítekin tilkynning fyrir ${MessageId}, hunsa`);
return res.status(200).send('OK'); // Skiltu samt 200 til að koma í veg fyrir endursendingu
}
// Merktu sem í vinnslu áður en gögnum er sótt
await db.markMessageProcessing(MessageId);
// Sæktu öll svarsgögn frá BC með gefnum tengli
const response = await fetchCloudEventData(ResponseContentLink);
// Vinndu úr svarinu
await processResponse(response, MessageType);
// Merktu sem kláraðan
await db.markMessageCompleted(MessageId);
res.status(200).send('OK');
});
Svaraðu vefkróknum fljótt og vinndu gögn ósamstillt:
app.post('/webhook/bc-cloud-events', async (req, res) => {
const { MessageId, MessageType, ResponseContentLink, Timestamp } = req.body;
// Settu strax í biðröð fyrir bakgrunnsvinnslu
await queue.enqueue({
messageId: MessageId,
messageType: MessageType,
responseContentLink: ResponseContentLink,
timestamp: Timestamp
});
// Svaraðu strax
res.status(200).send('OK');
});
// Bakgrunnsverkmaður vinnur biðröðina
backgroundWorker.on('job', async (job) => {
const response = await fetchCloudEventData(job.responseContentLink);
await processResponse(response, job.messageType);
});
Útfærðu viðeigandi villumeðhöndlun og skráningu:
app.post('/webhook/bc-cloud-events', async (req, res) => {
try {
const { MessageId, MessageType, ResponseContentLink, Timestamp } = req.body;
// Staðfesttu umboð
if (!MessageId || !MessageType || !ResponseContentLink || !Timestamp) {
console.error('Ógilt umboð móttekið', req.body);
return res.status(400).send('Invalid payload');
}
// Settu í biðröð fyrir vinnslu
await queue.enqueue({
messageId: MessageId,
messageType: MessageType,
responseContentLink: ResponseContentLink,
timestamp: Timestamp
});
res.status(200).send('OK');
} catch (error) {
console.error('Villa við vefkróksvinnuslu:', error);
// Skilaðu 4xx fyrir biðlaravillur (ekki endurreyna)
// Skilaðu 5xx fyrir þjónaravillur (BC mun endurreyna)
res.status(500).send('Internal Server Error');
}
});
Meðhöndlaðu endursendingar með veldisreiknum bið þegar gögn eru sótt frá BC:
async function fetchCloudEventData(messageId, maxRetries = 3) {
for (let attempt = 1; attempt <= maxRetries; attempt++) {
try {
const response = await bcApi.get(`/cloudEventData(${messageId})`);
return response.data;
} catch (error) {
if (attempt === maxRetries) throw error;
// Veldisreikinn bið: 1s, 2s, 4s
const delay = Math.pow(2, attempt - 1) * 1000;
await sleep(delay);
}
}
}
Útfærðu eftirlit fyrir bilanir í afhendingu vefkróka:
app.post('/webhook/bc-cloud-events', async (req, res) => {
const startTime = Date.now();
try {
const { MessageId, MessageType, Timestamp } = req.body;
await queue.enqueue({
messageId: MessageId,
messageType: MessageType,
timestamp: Timestamp
});
// Fylgstu með velgengismælingar
metrics.webhookReceived(MessageType);
metrics.webhookLatency(Date.now() - startTime);
res.status(200).send('OK');
} catch (error) {
// Fylgstu með bilanarmælingar
metrics.webhookFailed(error);
// Sendu viðvörun um alvarleg mistök
if (shouldAlert(error)) {
alerting.sendAlert('Villa við vinnuslu vefkróks', error);
}
res.status(500).send('Internal Server Error');
}
});
Leggðu fram prófunarskilaboð til að kveikja á vefkrókstilkynningum:
# Leggðu fram prófunarskilaboð í Queue API
curl -X POST "https://your-bc-instance/api/origo/cloudEvent/v1.0/queues" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"specversion": "1.0",
"type": "Help.Tables.Get",
"source": "Webhook Test v1.0"
}'
CloudEventMessageCompleted eða CloudEventMessageFailed)Business Central gæti sent tvíteknar tilkynningar í tilteknum aðstæðum:
Lausn: Útfærðu einkvæmni í vefkróksendapunktinum þínum (sjá Bestu venjur hér að ofan)
© Origo – Cloud Events Base Extension