Follow-up to the preview bump to 2.0.301.4181-preview, and a narrowing of #842.
UA-.NETStandard#4390 completed
OPC UA Part 11: all 37 released UACore 1.05 Historical Access profiles, structured and
annotation history, event history with insert/replace/update/delete, transactional and bulk
update dispatch, tri-state Historizing, and a client surface for all of it. The bump PR
did what was needed to keep the samples compiling and correct against the new interfaces.
What it did not do is demonstrate what those interfaces now carry.
What the bump PR changed
IHistorianDataProvider, IHistorianEventProvider, IHistorianTransactionalProvider,
IHistorianBulkInsertProvider and IHistorianAnnotationProvider all changed shape:
IList<T> became ArrayOf<T>, and an update answers a HistorianUpdateOutcome<T> -
one status per entry plus the values the operation displaced, for the audit trail.
HistorianNodeCapabilities is now a gate as well as an advertisement: the dispatcher
refuses an operation the provider does not claim, and the diagnostics node manager rolls
the event flags up (they used to be set by hand in
HistoricalEvents/Server/HistoricalEventsCapabilities.cs, which the bump PR reduced to
the EventNotifier update).
HistorianEventRecord gained QualifiedFields, keyed by the whole select-clause
identity rather than by the browse path alone. WellReportHistorianProvider now fills
both.
What is not demonstrated
- Old values. Every sample provider returns an empty
OldValues. Both stores
overwrite in place, so reporting what a replace or a delete displaced means keeping a
copy - which is exactly the thing a reader wants to see done once.
- Structured data history.
IHistorianStructuredDataProvider and
IHistorianStructuredDataKeySelector have no sample at all: same-timestamp values
distinguished by a key inside the structure, with its own read and update families.
- Modified history with
ModificationInfo. ArchiveHistorianProvider serves
ReadModifiedAsync, but no client in this repository reads it, and
HistoryClient now exposes the modification info beside the value.
- Event history from the client.
HistoryClient gained event reads and event
insert/replace/update/delete. The HistoricalEvents client does none of it - the tier
1.5 fixtures are the only thing exercising the server side.
- Aggregate filters derived from per-node capabilities, and the rejection of an
unsupported processed aggregate before the provider is reached.
- Tri-state
Historizing - set, clear, or leave to the provider.
Items 1 and 4 are the cheap ones. Item 2 is a sample of its own.
Related: #842 lists the Part 11 gaps that predate #4390 (automatic value capture,
UseInMemory(), the HistoricalDataConfiguration installer, provider routing other than
per namespace). Those are still open and are not repeated here.
Follow-up to the preview bump to
2.0.301.4181-preview, and a narrowing of #842.UA-.NETStandard#4390 completed
OPC UA Part 11: all 37 released UACore 1.05 Historical Access profiles, structured and
annotation history, event history with insert/replace/update/delete, transactional and bulk
update dispatch, tri-state
Historizing, and a client surface for all of it. The bump PRdid what was needed to keep the samples compiling and correct against the new interfaces.
What it did not do is demonstrate what those interfaces now carry.
What the bump PR changed
IHistorianDataProvider,IHistorianEventProvider,IHistorianTransactionalProvider,IHistorianBulkInsertProviderandIHistorianAnnotationProviderall changed shape:IList<T>becameArrayOf<T>, and an update answers aHistorianUpdateOutcome<T>-one status per entry plus the values the operation displaced, for the audit trail.
HistorianNodeCapabilitiesis now a gate as well as an advertisement: the dispatcherrefuses an operation the provider does not claim, and the diagnostics node manager rolls
the event flags up (they used to be set by hand in
HistoricalEvents/Server/HistoricalEventsCapabilities.cs, which the bump PR reduced tothe EventNotifier update).
HistorianEventRecordgainedQualifiedFields, keyed by the whole select-clauseidentity rather than by the browse path alone.
WellReportHistorianProvidernow fillsboth.
What is not demonstrated
OldValues. Both storesoverwrite in place, so reporting what a replace or a delete displaced means keeping a
copy - which is exactly the thing a reader wants to see done once.
IHistorianStructuredDataProviderandIHistorianStructuredDataKeySelectorhave no sample at all: same-timestamp valuesdistinguished by a key inside the structure, with its own read and update families.
ModificationInfo.ArchiveHistorianProviderservesReadModifiedAsync, but no client in this repository reads it, andHistoryClientnow exposes the modification info beside the value.HistoryClientgained event reads and eventinsert/replace/update/delete. The
HistoricalEventsclient does none of it - the tier1.5 fixtures are the only thing exercising the server side.
unsupported processed aggregate before the provider is reached.
Historizing- set, clear, or leave to the provider.Items 1 and 4 are the cheap ones. Item 2 is a sample of its own.
Related: #842 lists the Part 11 gaps that predate #4390 (automatic value capture,
UseInMemory(), theHistoricalDataConfigurationinstaller, provider routing other thanper namespace). Those are still open and are not repeated here.