-
Notifications
You must be signed in to change notification settings - Fork 345
Breaking changes in 5.0
- When you serialize a FHIR resource with the option
summary != SummaryType.False
then we add now 2 Meta tags in the resource: one for the context STU3 and one for the context R4 and higher.
This version of the SDK no longer supports .NET Framework 4.5.2. The following framework are supported:
- .NET 6.0
- NetStandard 2.0
- The constructor of previously abstract class
BaseFhirClient
is now public and requires aModelInspector
andfhirVersion
. The nullable parameterIStructureDefinitionSummaryProvider
has been removed. - The classes
BundleToEntryRequest
,TypedEntryResponseToBundle
,EntryRequest
,EntryRequestHeaders
,EntryResponse
,TypedEntryResponse
,EntryToTypedEntryExtensions
,EntryToHttpExtensions
,HttpToEntryExtensions
andTypedEntryResponseToBundle
have been made internal. They exposed internal details about the FhirClient and should never have been public. - The default parameter
IStructureDefinitionSummaryProvider provider
of all the constructors ofFhirClient
have been removed. - We have added nullability annotations to
BaseFhirClient
andFhirClient
, which means you may get compiler errors about the fact that most functions on these classes return a nullable resource, which may have gone unhandled until now. These functions return null when the operation resulted in anOperationOutcome
instead of the expected resource type. In such cases, checkLastResult
for the OperationOutcome. - The constructor of classes
BaseFhirParser
andBaseFhirSerializer
requires aModelInspector
. - The protected methods
BaseFhirParser.MakeElementStack
are not static anymore. -
ModelInfo.ConformanceResources
andModelInfo.ConformanceResourceTypes
have been removed. -
ModelInfo.FhirCoreProfileBaseUri
has been removed. Use nowCanonical.FHIR_CORE_PROFILE_BASE_URI
. - Obsolete members
ModelInfo.IsProfiledQuantity
andModelInfoExtensions.GetCollectionName
have been removed. - Partial class `ModelInfo' is not static anymore.
-
ValidationSettings.XsdSchemaCollection
is now of typeXmlSchemaSet
instead ofSchemaCollection
. -
SchemaCollection(IArtifactSource)
is marked as obsolete, and the constructor will now get the schema from the embedded resource, disregarding theIArtifactSource
argument completely. - Interface
IConformanceSource
is now derived fromICommonConformanceSource
. AndIConformanceSource.FindCodeSystemByValueSet(string)
has been moved to this new interfaceICommonConformanceSource
. - Obsolete extension methods of
ResourceResolverExtensions
has been removed:FindExtensionDefinition
,FindStructureDefinition
,FindStructureDefinitionForCoreType
andFindValueSet
. - The constructor of
ProfileAssertion
andProfilePreprocessor
require now aModelInspector
as a parameter. - The public method of
ProfileAssertion.SetDeclaredType
has been removed. - The overloaded methods
Validate
of the classValidator
with the parameterITypedElement
requires now aModelInspector
as a parameter. - The public method of
Validator.IsBindeableFhirType
has been removed. - The type of property
TranslateParameters.ConceptMap
has been changed fromConceptMap
toResource
. - The type of the parameter
conceptMap
inTranslateParameters
has been changed fromConceptMap
toResource
. - The public method
ElementDefinitionExtensions.PrimaryTypeCode
has been changed toGetTypeCode()
and the return type is nowstring?
. - The
FindConceptMaps()
andFindConceptMapsAsync()
methods inFhirPackageSource
andCommonFhirPackageSource
will now return an empty list, not null when no items are found (this was the original intention of the interface, but was implemented incorrrectly). - FhirPath's
ExpressionVisitor
has been simplified, it no longer requires aSymbolTable
arguments toAccept
and theVisit
methods. - The public class
SemVersion
has been made internal. If you want to keep using this functionality we recommend to use the externalSemver
NuGet package. - The public class
ProfileReference
has been removed. All functionality has been moved toCanonical
. - UriParamList.FromUri has been removed - it always returned null
- The regex pattern for Base64Binary was updated.
- The regex pattern for FhirDateTime, Instant, Time was updated.
- the regex pattern for Markdown was updated.
- CodeSystemContentMode has been moved out of the CodeSystem class and is now a top-level enum (it is re-used in TerminologyCapabilities).
The FhirClient is one of the oldest parts of the SDK and is showing its age (both on the public interface and inside). We have started a gradual renovation process, which includes the following:
- Adding support for CancellationTokens (done)
- Better alignment with HttpMessageHandler/HttpMessageContent and testability (scheduled for 5.1)
- Making it possible to mock the FhirClient (done - we have made all its methods are now virtual).
- Making it possible to switch to another (read: the newer) serializer.
These members have been removed, you can use the FhirClient.Settings
property or the settings argument in the constructor instead:
VerifyFhirVersion
PreferredFormat
UseFormatParam
Timeout
ReturnFullResource
PreferredReturn
PreferredParameterHandling
PreferCompressedResponses
CompressRequestBody
ParserSettings
-
OnBeforeRequest
: add aHttpClientEventHandler
or anotherHttpMessageHandler
to the constructor to use this functionality -
OnAfterResponseRequest
: add aHttpClientEventHandler
or anotherHttpMessageHandler
to the constructor to use this functionality
Some classes were exposed that are blocking us from refactoring the client, while at the same time they don't provide a lot of functionality for general use:
- BaseFhirClient's property HttpClientRequester Requester { get; init; } went from protected to internal.
- Its protected constructor has been replaced by multiple public constructor.
- BaseFhirClient is no longer abstract.
- BundleToEntryRequest, EntryRequest, EntryRequestHeaders, EntryResponse and TypedEntryResponse are now internal.
- Extension classes EntryToTypedEntryExtensions, HttpToEntryExtensions and TypedEntryResponseToBundle are now internal
- WebRequestExtensions has been removed (all methods were already internal)
-
Hl7.Fhir.Model.ElementDefinitionExtensions.GetDeclaredProfiles(TypeRefComponent)
. UseElementDefinition.TypeRefComponent.GetTypeProfile()
instead. -
Hl7.Fhir.ElementModel.ElementNode.Clone()
. UseHl7.Fhir.ElementModel.ElementNode.ShallowCopy()
instead. -
Hl7.Fhir.ElementModel.Types.DateTime.FromDateTime(DateTimeOffset)
. UseHl7.Fhir.ElementModel.Types.DateTime.FromDateTimeOffset(DateTimeOffset)
instead. -
Hl7.Fhir.Serialization.FhirXmlSerializationSettings.SkipUnknownElements
. UseHl7.Fhir.Serialization.FhirXmlSerializationSettings.IgnoreUnknownElements
instead. -
Hl7.Fhir.Serialization.ParserSettings.Default
. UseHl7.Fhir.Serialization.ParserSettings.CreateDefault()
instead. -
Hl7.Fhir.Support.DateExtensions.ToFhirDateTime(DateTime)
. UseHl7.Fhir.Support.DateExtensions.ToFhirDateTime(DateTimeOffset)
instead. -
Hl7.Fhir.Support.DateExtensions.ToFhirDateTime(DateTime?)
. UseHl7.Fhir.Support.DateExtensions.ToFhirDateTime(DateTimeOffset?)
instead. -
Hl7.Fhir.Specification.Source.OriginInformation
. UseHl7.Fhir.Specification.Source.OriginAnnotation
instead. -
Hl7.Fhir.Specification.Snapshot.SnapshotGeneratorSettings.Default
. Use ``Hl7.Fhir.Specification.Snapshot.SnapshotGeneratorSettings.CreateDefault()` instead. -
Hl7.Fhir.Specification.Source.ConformanceSummaryProperties.GetConformanceStatus(IArtifactSummaryPropertyBag)
. UseHl7.Fhir.Specification.Source.ConformanceSummaryProperties.GetPublicationStatus(IArtifactSummaryPropertyBag)
instead. -
Hl7.Fhir.Specification.Source.DirectorySource(bool)
. UseHl7.Fhir.Specification.Source.DirectorySource(DirectorySourceSettings)
instead. -
Hl7.Fhir.Specification.Source.DirectorySource(string, bool)
. UseHl7.Fhir.Specification.Source.DirectorySource(DirectorySourceSettings)
instead. -
Hl7.Fhir.Introspection.ClassMapping.AddMappingForType(Type. FhirRelease, ClassMapping)
. -
Hl7.Fhir.Introspection.ClassMapping.DeclaredType
. -
Hl7.Fhir.Introspection.ClassMapping.Create(Type)
. UseHl7.Fhir.Introspection.ClassMapping.TryCreate(Type, ClassMapping, FhirRelease)
instead. -
Hl7.Fhir.Introspection.ClassMapping.IsMappableType(Type)
. UseHl7.Fhir.Introspection.ClassMapping.TryCreate(Type, ClassMapping, FhirRelease)
instead. -
Hl7.Fhir.Introspection.FhirVersionDependentExtensions.AppliesToVersion(IFhirVersionDependent, FhirRelease)
. UseHl7.Fhir.Introspection.FhirVersionDependentExtensions.AppliesToRelease(Attribute, FhirRelease)
instead. -
Hl7.Fhir.Introspection.PropertyMapping.ElementType
. UseHl7.Fhir.Introspection.PropertyMapping.ImplementingType
instead. -
Hl7.Fhir.Introspection.PropertyMapping.IsResourceChoice
. -
Hl7.Fhir.Introspection.PropertyMapping.Create(PropertyInfo, ClassMapping, FhirRelease)
. UseHl7.Fhir.Introspection.PropertyMapping.TryCreate(PropertyInfo, out PropertyMapping?, ClassMapping, FhirRelease)
instead. -
Hl7.Fhir.Model.Date.ToDateTime()
. UseHl7.Fhir.Model.Date.ToDateTimeOffset()
instead. -
Hl7.Fhir.Model.FhirDateTime.FhirDateTime(DateTime)
. UseHl7.Fhir.Model.FhirDateTime.FhirDateTime(DateTimeOffset)
instead. -
Hl7.Fhir.Model.FhirDateTime.FhirDateTime(int, int, int, int, int, int)
. UseHl7.Fhir.Model.FhirDateTime.FhirDateTime(int, int, int, int, int, int, TimeSpan)
instead. -
Hl7.Fhir.Model.FhirDateTime.ToDateTimeOffset(TimeSpan?)
. UseHl7.Fhir.Model.FhirDateTime.ToDateTimeOffset(TimeSpan)
instead. -
Hl7.Fhir.Model.FhirDateTime.ToDateTime()
. UseHl7.Fhir.Model.FhirDateTime.ToDateTimeOffset(TimeSpan)
instead. -
Hl7.Fhir.Model.XHtml.IsValidValue(string)
. UseHl7.Fhir.Model.XHtml.IsValidNarrativeXhtml(string)
instead (or IsValidXml if that is more appropriate). -
Hl7.Fhir.Rest.EntryToHttpExtensions.ToHttpWebRequest(EntryRequest, Uri, FhirClientSettings)
. UseHl7.Fhir.Rest.EntryToHttpExtensions.ToHttpRequestMessage(EntryRequest, Uri, FhirClientSettings)
instead. -
Hl7.Fhir.Rest.SearchParams.FromParameters(object)
. UseParameters.ToSearchParameters()
method instead. -
Hl7.Fhir.Rest.ResourceIdentity.Endpoint
. UseHl7.Fhir.Rest.ResourceIdentity.BaseUri
instead. -
Hl7.Fhir.Specification.Terminology.ValueSetExpanderSettings.Default
. UseHl7.Fhir.Specification.Terminology.ValueSetExpanderSettings.CreateDefault()
instead. -
Hl7.Fhir.Support.Issue.PROFILE_INCOMPLETE_BINDING
. This issue will not be raised by the validator anymore. Use 'PROFILE_ELEMENTDEF_INCORRECT' instead. -
Hl7.Fhir.Utility.FhirReleaseParser.TryFhirReleaseFromMimeVersion(string, out FhirRelease?)
. UseHl7.Fhir.Utility.FhirReleaseParser.TryGetFhirReleaseFromMimeVersion(string, out FhirRelease?)
instead. -
Hl7.Fhir.Utility.FhirReleaseParser.TryFhirReleaseFromCorePackageName(string, out FhirRelease?)
. UseHl7.Fhir.Utility.FhirReleaseParser.TryGetFhirReleaseFromCorePackageName(string, out FhirRelease?)
instead. -
Hl7.Fhir.Utility.ObjectListExtensions
. This class has been removed. -
Hl7.FhirPath.EvaluationContext.Default
. UseHl7.FhirPath.EvaluationContext.CreateDefault() instead.
ResourceReferenceNotFoundException
OperationValidCodeExtensions
FhirPackageSource
CommonFhirPackageSource
- Methods ConceptMap.SourceAsString() and ConceptMap.TargetAsString() are removed
- The class Hl7.Fhir.Model.Attachment moved to the library Base.
- Hl7.Fhir.Model.Attachment.UrlElement is now of type FhirUri instead of FhirUrl.
- DomainResource.modifierExtension is a summary element now.
- Hl7.Fhir.Model.Signature
- Cardinality of Signature.type is now 0..* (was 1..*)
- Cardinality of Signature.when is now 0..1 (was 1..1)
- Cardinality of Signature.who is now 0..1 (was 1..1)
- The type of
CapabilityStatement.Type
has been changed tostring?
(wasResourceType?
) - The type of
CapabilityStatement.TypeElement
has been changed toCode
(wasCode<Hl7.Fhir.Model.ResourceType>
) - The
AllowedTypes
attribute has been removed from the following properties:ElementDefinition.Value
ElementDefinition.DefaultValue
ElementDefinition.Pattern
ElementDefinition.Fixed
- Enum
ElementDefinition.ConstraintSeverity
has been moved toTemplate-Bindings.cs
. - Description of
Money
values has been corrected (diacritics) - The class Hl7.Fhir.Model.RelatedArtifact has been moved to Conformance library
- ElementDefinition.constraint.Requirements is now of type Markdown instead of string.
- ElementDefinition.constraint.RequirementElement has been removed.
- ElementDefinition.binding.Description is now of type Markdown instead of string.
- ElementDefinition.binding.DescriptionElement has been removed.
- ElementDefinition.mapping.Comment is now of type Markdown instead of string.
- ElementDefinition.mapping.CommentElement has been removed.
- RelatedArtifact.UrlElement has been removed from the spec. The property is still available in RelatedArtifact, but should not be used in R5.
- The enum value ElementDefinition.DiscriminatorType.Pattern has been deprecated for R5. Do not use this enum value for R5.
- ElementDefinition.constraint.xpath has been removed from the spec. The property is still available in ElementDefinition, but should not be used in R5.
- ValueSet.scope.focus has been removed from the spec. The property is still available in ValueSet, but should not be used in R5.
- Obsolete NamingSystem Purpose/Experimental/ExperimentalElement properties have been removed.
Over the last year we have discovered that we have generated enum
names that were not capitalized. This has been corrected. This means the following enums have had their names capitalized:
- (R3) Sequence.qualityType, Sequence.repositoryType
- (R4 and higher) MolecularSequence.orientationType, qualityType, repositoryType, sequenceType, strandType,
- (R4 and higher) medicationRequestIntent, medicationRequestStatus
- (R4 and higher) v3-ConfidentialityClassification has been renamed to ConfidentialityClassification
- (R4 and higher) VerificationResult.status
- (R4 and higher) messageheader_response_request has been renamed to MessageHeaderResponseRequest
The names of the following valuesets clashed with properties within the classes, which meant we had properties which names ended with an underscore. This has been corrected for the following valuesets:
- ["http://hl7.org/fhir/ValueSet/characteristic-combination"] = "CharacteristicCombinationCode",
- ["http://hl7.org/fhir/ValueSet/claim-use"] = "ClaimUseCode",
- ["http://hl7.org/fhir/ValueSet/content-type"] = "ContentTypeCode",
- ["http://hl7.org/fhir/ValueSet/exposure-state"] = "ExposureStateCode",
- ["http://hl7.org/fhir/ValueSet/verificationresult-status"] = "StatusCode",
- ["http://terminology.hl7.org/ValueSet/v3-Confidentiality"] = "ConfidentialityCode",
- ["http://hl7.org/fhir/ValueSet/variable-type"] = "VariableTypeCode",
- ["http://hl7.org/fhir/ValueSet/group-measure"] = "GroupMeasureCode"