ChangeLog - Skilaboðategundir

Þetta skjal fjallar um þrjár skilaboðategundir sem setja BC-breytingaskrána (Change Log) fram til skoðunar á reitastigsstigum, endurheimtu og stöðuprófa.


Yfirlit

SkilaboðategundStefnaLýsing
ChangeLog.Field.HistoryÚtlæg (lestur)Skilar núgildandi gildi og heilli breytingasögu fyrir einn reit á færslu
ChangeLog.Field.RestoreInnlæg (skrif)Endurheimtir reit í fyrra gildi úr breytingaskrá (eftir færslunúmeri eða tímapunkti)
ChangeLog.Field.EnabledÚtlæg (lestur)Athugar hvort reitur sé á BC-breytingaskrá
ChangeLog.Records.DeltaÚtlæg (lestur)Skilar einkvæmum SystemId fyrir færslur sem breyttust (innsetning/breyting) í töflu innan tímabils, valkvætt síað við reiti

Forskilyrði: BC-breytingaskráin verður að vera stillt fyrir hlutaðeigandi töflur og reiti (Stjórnun → Uppsetning breytingaskrár → Töflur). Án breytingaskráarfærslna er engin saga til að skoða eða endurheimta.

Dæmigerð vinnuferli:

  1. Kalla ChangeLog.Field.Enabled til að staðfesta að reitur sé rakinn.
  2. Kalla ChangeLog.Field.History til að skoða breytingar og velja entryNo sem miðast að.
  3. Kalla ChangeLog.Field.Restore með þetta entryNo til að skrifa gildið aftur.

ChangeLog.Field.History

Stefna: Útlæg Hlutkenni: Kóðaeining 65415 (ChangeLog Field History Impl), Kóðaeining 65416 (ChangeLog Field History Help)

Tilgangur

Skilar núgildandi gildi reits ásamt öllum breytingaskráarfærslum fyrir þann reit á tiltekinni færslu, raðað frá nýjasta til elsta.

Svarið byrjar alltaf með þjálfunarlegri Current færslu við entryNo = 0 sem sýnir gildandi reitgildi. Þetta gerir það auðvelt fyrir kallara að bera saman núverandi stöðu við söguleg gögn án sérstaks uppflettings.

Snið beiðni

{
  "specversion": "1.0",
  "type": "ChangeLog.Field.History",
  "source": "MyApp v1.0",
  "data": "{\"tableName\":\"Customer\",\"recordSystemId\":\"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\"fieldNo\":2}"
}

Inntaksfæribreytur

FæribreytaTegundNauðsynlegLýsing
tableName / tableNumber / tableNo / tableIdstring / integerMarktafla — heiti (t.d. "Customer") eða númer (t.d. 18).
recordSystemId / systemId / idGUID stringJá*SystemId færslunnar.
fieldNo / fieldId / fieldNameinteger / stringReiturinn til að sækja sögu fyrir.

*Ef recordSystemId vantar í gagnafærslu, er subject-eigind CloudEvents notuð sem GUID-varabú.

Snið svars

{
  "status": "Success",
  "tableNo": 18,
  "tableName": "Customer",
  "recordSystemId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "fieldNo": 2,
  "fieldName": "Name",
  "fieldType": "Text",
  "history": [
    {
      "entryNo": 0,
      "dateAndTime": "2026-03-28T14:22:00.000Z",
      "typeOfChange": "Current",
      "oldValue": "",
      "newValue": "Contoso Ltd.",
      "userId": "ADMIN"
    },
    {
      "entryNo": 56789,
      "dateAndTime": "2026-03-10T09:00:00.000Z",
      "typeOfChange": "Modification",
      "oldValue": "Contoso Inc.",
      "newValue": "Contoso Ltd.",
      "userId": "ADMIN"
    },
    {
      "entryNo": 45001,
      "dateAndTime": "2025-11-15T11:30:00.000Z",
      "typeOfChange": "Modification",
      "oldValue": "Contoso",
      "newValue": "Contoso Inc.",
      "userId": "JANE"
    }
  ],
  "totalCount": 3
}

Reitir á efsta stigi svars

ReiturTegundLýsing
statusTextSuccess eða Error
tableNoIntegerTöflunúmer
tableNameTextHeiti töflu
recordSystemIdTextFærslu SystemId (GUID án sveigja)
fieldNoIntegerReitanúmer
fieldNameTextHeiti reits
fieldTypeTextGagnategund (Text, Code, Decimal, Date, o.s.frv.)
historyArrayBreytingafærslur, nýjast fyrst. Vísi 0 er alltaf núverandi gildandi staða.
totalCountIntegerFjöldi færslna í history (þar með talið entryNo=0 þjálfunarlega færslan)

Reitir sögulegrar færslu

ReiturTegundLýsing
entryNoBigIntegerNúmer breytingaskráarfærslu. 0 = núverandi gildandi staða (þjálfunarlegt). Notaðu entryNo > 0 með ChangeLog.Field.Restore.
dateAndTimeDateTimeISO 8601 tímastimpill. Fyrir entryNo=0 er þetta SystemModifiedAt færslunnar.
typeOfChangeTextCurrent (vísi 0 eingöngu), Insertion, Modification, eða Deletion
oldValueTextGildi fyrir breytinguna. Tómt fyrir entryNo=0.
newValueTextGildi eftir breytinguna. Fyrir entryNo=0 er þetta gildandi reitgildi.
userIdTextNotandinn sem gerði breytinguna. Fyrir entryNo=0 leyst úr SystemModifiedBy GUID.

Villutilvik

VillaÁstæða
Table not foundÓgilt töluheiti eða númer
recordSystemId or a subject GUID is requiredEngin færsluauðkenni gefin
Field identifier requiredEngin fieldNo, fieldId, eða fieldName gefin
Field read-restrictedReitur er lokaður í Cloud Events Field Access
Record not foundEngin færsla með gefið SystemId

ChangeLog.Field.Restore

Stefna: Innlæg (skrif) Hlutkenni: Kóðaeining 65412 (ChangeLog Field Restore Impl), Kóðaeining 65413 (ChangeLog Field Restore Help), Kóðaeining 65414 (ChangeLog Field Restore Process)

Tilgangur

Skrifar fyrra reitgildi aftur í lifandi Business Central færsluna. Gildið er tekið úr Old Value völdrar breytingaskráarfærslu. Endurheimtan er framkvæmd með Validate() + Modify(true) svo allar viðskiptalegifraðar á reitastigi keyri eðlilega.

Styður tvær stillingar:

StillingAuðkenniLýsing
1 — Eftir færslunúmerientryNoEndurheimtir Old Value tiltekinnar breytingaskráarfærslu
2 — Eftir tímapunktirestoreToDateTimeFinnur nýjustu Modification-færslu við eða fyrir tímastimpilinn og endurheimtir Old Value hennar

Stilling 1: Eftir færslunúmeri

{
  "specversion": "1.0",
  "type": "ChangeLog.Field.Restore",
  "source": "MyApp v1.0",
  "data": "{\"entryNo\":56789}"
}
FæribreytaNauðsynlegLýsing
entryNoNúmer breytingaskráarfærslu frá ChangeLog.Field.History. Verður að vera > 0.

Stilling 2: Eftir tímapunkti

{
  "specversion": "1.0",
  "type": "ChangeLog.Field.Restore",
  "source": "MyApp v1.0",
  "data": "{\"tableName\":\"Customer\",\"recordSystemId\":\"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\"fieldNo\":2,\"restoreToDateTime\":\"2026-02-10T09:15:00Z\"}"
}
FæribreytaNauðsynlegLýsing
tableName / tableNumber / tableNo / tableIdMarktafla
recordSystemIdSystemId (GUID) færslunnar
fieldNo / fieldId / fieldNameReiturinn til að endurheimta
restoreToDateTimeISO 8601 tímastimpill — finnur nýjustu Modification-færslu við eða fyrir þennan tíma

Snið svars

{
  "status": "Success",
  "tableNo": 18,
  "tableName": "Customer",
  "recordSystemId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "fieldNo": 2,
  "fieldName": "Name",
  "previousValue": "Contoso Ltd.",
  "restoredValue": "Contoso Inc.",
  "fromEntryNo": 56789,
  "entryDateTime": "2026-02-10T09:15:00.000Z"
}
ReiturTegundLýsing
statusTextSuccess eða Error
tableNoIntegerTöflunúmer
tableNameTextHeiti töflu
recordSystemIdTextFærslu SystemId (GUID án sveigja)
fieldNoIntegerReitanúmer
fieldNameTextHeiti reits
previousValueTextReitgildi strax fyrir endurheimtuna
restoredValueTextGildi skrifað aftur í færslu
fromEntryNoBigIntegerNúmer breytingaskráarfærslu notað sem endurheimtugjafi
entryDateTimeDateTimeTímastimpill breytingaskráarfærslu (ISO 8601)

Öryggisvarðar

Eftirfarandi skilyrði verða öll að uppfyllast eða endurheimta er hafnað:

Villutilvik

VillaÁstæða
Change log entry not foundÓgilt entryNo
No change log entry found for the specified record, field, and dateStilling 2: engin Modification-færsla við eða fyrir umbeðinn tímastimpil
Only Modification entries can be restoredTegund færslu er Insertion eða Deletion
Record not foundMarkmið-færsla er ekki lengur til
Field is write-restrictedReitur lokaður af Cloud Events Field Access
Field is not a writable fieldFlowField eða FlowFilter
Cannot convert value to field typeTegundamissæmi við Evaluate
Field already has the value — nothing to restoreNúverandi gildi jafnt endurheimtugildi; engin skrif gerð
Table is restricted from write operationsLokað af Cloud Events Setup gagnafærslutakmörkunum
Field is not allowed by the change log write guardLokað af ChangeLog Write Guard í Cloud Events Setup
recordSystemId is required for point-in-time restoreStilling 2 kölluð án færsluauðkenndar
Provide either entryNo or tableName + recordSystemId + fieldNo + restoreToDateTimeHvorki Stilling 1 né Stilling 2 færibreytur til staðar

ChangeLog.Field.Enabled

Stefna: Útlæg Hlutkenni: Kóðaeining 65362 (ChangeLog FieldEnabled Impl), Kóðaeining 65363 (ChangeLog FieldEnabled Help)

Tilgangur

Athugar hvort:

  1. BC-breytingaskráin sé virk á víðan svið.
  2. ChangeLog Write Guard sé í gildandi stillingu (Blocked eða Via force).
  3. Tiltekinn reitur sé á breytingaskráruppsetningunni fyrir Modification-rakningu.

Gagnlegt áður en skrifað er í gegnum Data.Records.Set þegar ChangeLog Write Guard er virkur, eða áður en ChangeLog.Field.Restore er kallað til að staðfesta að reitur hafi sögu.

Snið beiðni

{
  "specversion": "1.0",
  "type": "ChangeLog.Field.Enabled",
  "source": "MyApp v1.0",
  "data": "{\"tableName\":\"Customer\",\"fieldNo\":2}"
}
FæribreytaTegundNauðsynlegLýsing
tableName / tableNumber / tableNo / tableIdstring / integerMarktafla
fieldNo / fieldId / fieldNameinteger / stringReiturinn til að athuga

Snið svars

{
  "status": "Success",
  "changeLogEnabled": true,
  "changelogWriteGuardEnabled": true,
  "tableNo": 18,
  "tableName": "Customer",
  "fieldNo": 2,
  "fieldName": "Name",
  "fieldCovered": true,
  "fieldWriteGuardBypassed": false
}
ReiturTegundLýsing
statusTextSuccess eða Error
changeLogEnabledBooleantrue ef BC-breytingaskrá er virkjuð á víðan svið
changelogWriteGuardEnabledBooleanfalse = Open-stilling (engin framfylgd); true = Blocked eða Via Force
tableNoIntegerTöflunúmer
tableNameTextHeiti töflu
fieldNoIntegerReitanúmer
fieldNameTextHeiti reits
fieldCoveredBooleantrue ef reitur er rakinn af breytingaskráruppsetningunni fyrir breytingaskráningu
fieldWriteGuardBypassedBooleantrue ef reitur hefur Bypass-færslu í Cloud Events Field Access, sem leyfir skrifanir óháð breytingaskrárþekju

Villutilvik

VillaÁstæða
Table not foundÓgilt töluheiti eða númer
Field identifier requiredVantar fieldNo, fieldId, eða fieldName
Field type is not supported for change log trackingBLOB, Media eða svipuð tegund sem BC getur ekki rakið

ChangeLog.Records.Delta

Stefna: Útlæg Hlutkenni: Kóðaeining 65555 (ChangeLog Records Delta Impl), Kóðaeining 65556 (ChangeLog Records Delta Help)

Tilgangur

Skilar einkvæmum SystemId fyrir færslur í einni töflu sem voru settar inn eða breyttar innan tímabils. Hægt er að þrengja leitina við ákveðna reiti. Notist sem grunnur fyrir lotusamstillingu: sækið breyttu auðkennin, kallið síðan Data.Records.Get fyrir hverja færslu og ChangeLog.Field.History fyrir dýpri rakningu.

Eyðingar eru ekki skilaðar — notið Deleted.RecordIds.Get fyrir eyddar færslur.

Beiðnasnið

{
  "specversion": "1.0",
  "type": "ChangeLog.Records.Delta",
  "source": "MyApp v1.0",
  "subject": "Customer",
  "data": "{\"tableName\":\"Customer\",\"fieldNumbers\":[2,3],\"startDateTime\":\"2026-03-01T00:00:00Z\",\"endDateTime\":\"2026-03-31T23:59:59Z\"}"
}

Inntakssvið

ReiturTegundKrafistLýsing
tableName / tableNumber / tableNo / tableIdTexti/HeiltalaTaflan sem á að fyrirspyrja. Notar subject til vara.
fieldNumbersHeiltala[]NeiÞrengir niðurstöður við breytingar á þessum reitanúmerum. Sleppið til að taka með alla rakta reiti.
startDateTimeDateTimeNeiNeðri mörk (meðtalin). Sjálfgildi 0DT (engin neðri mörk).
endDateTimeDateTimeNeiEfri mörk (meðtalin). Sjálfgildi er Date & Time skilaboðsins.

Svarsnið

{
  "status": "Success",
  "tableNo": 18,
  "tableName": "Customer",
  "fieldNumbers": [2, 3],
  "startDateTime": "2026-03-01T00:00:00.000Z",
  "endDateTime": "2026-03-31T23:59:59.000Z",
  "totalCount": 42,
  "systemIds": [
    "a1b2c3d4-...",
    "e5f6a7b8-..."
  ]
}

Villutilvik

VillaOrsök
Table ... not found.tableName / tableNumber leysist ekki upp í þekkta töflu
fieldNumbers must contain at least one integer when supplied.fieldNumbers var sent inn sem tómt fylki

ChangeLog Write Guard

ChangeLog Write Guard er reitur í Cloud Events Setup (reitur 17) sem stjórnar hvaða reitir Data.Records.Set má skrifa í. Hefur ekki áhrif á lesunaðgerðir.

StillingHeitiEnum-gildiHegðun
OpenOpen0Allir reitir mega vera skrifaðir. Sjálfgefið.
BlockedBlocked1Aðeins reitir á breytingaskrár Modification-rakningu mega vera skrifaðir.
Via forceVia force2Sama og Blocked; hægt að fara framhjá með force: true í beiðninni og ef kallari hefur CE Force Access

Virkjun varðar

Breyting í Blocked eða Via force krefst þess að BC-breytingaskráin sé virk:

trigger OnValidate()
begin
    if Rec."ChangeLog Write Guard" in [Blocked, "Via force"] then
        if not ChangeLogSetup.Get() or not ChangeLogSetup."Change Log Activated" then
            Error(ChangeLogNotEnabledErr);
end;

Notkun force framhjágöngu (Via force stilling eingöngu)

Feldu "force": true sem efsta-stigs lykil innan data JSON ásamt data-fylkinu:

{
  "specversion": "1.0",
  "type": "Data.Records.Set",
  "source": "MyApp v1.0",
  "subject": "Customer",
  "data": "{\"force\":true,\"data\":[{\"id\":\"...\",\"fields\":{\"Name\":\"Updated Name\"}}]}"
}

Kallari verður að hafa CE Force Access heimildasamstæðu (PermissionSet 65303).


© Origo – Cloud Events Base Extension