FHIR Chat · Forge 19.4 for STU3 · tooling

Stream: tooling

Topic: Forge 19.4 for STU3


view this post on Zulip Michel Rutten (Sep 27 2018 at 11:40):

Forge 19.4 for STU3 is now available for download from https://simplifier.net/forge.

This release introduces a revamped user interface.

Change log: https://simplifier.net/organization/firely/news/57

If you find a new issue or would like to submit a feature request, please contact us at forge@fire.ly.

Happy profiling!

view this post on Zulip Patrick Werner (Oct 19 2018 at 22:48):

I just tried to open the profile folder from this repository (downloaded everything as zip and expanded it):
https://simplifier.net/terminologiatfcdraft/
When i use "open profile folder" i don't see profiles, if i click refresh i get the error:

2018-10-20T00:43:05
Forge Forge 19.4.1 for HL7 FHIR STU3
Version: Version 19.4.1.0 (ClickOnce)
FHIR Version: FHIR .NET API library for 3.0.1
--------------------------------------------------
InvalidOperationException in System:
This operation is not supported for a relative URI.
   at System.Uri.MakeRelativeUri(Uri uri)
   at Hl7.Fhir.Model.ModelInfo.IsCoreModelTypeUri(Uri uri)
   at Forge.ViewModels.ArtifactSummaryVM..ctor(ArtifactSummary summary, String contentDirectory)
   at Forge.ViewModels.SessionDirectoryFolderVM.<>c__DisplayClass36_0.<GenerateFolderItems>b__2(ArtifactSummary s)
   at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
   at System.Collections.Generic.List`1.InsertRange(Int32 index, IEnumerable`1 collection)
   at Forge.ViewModels.SessionDirectoryFolderVM.GenerateFolderItems(IEnumerable`1 summaries)
   at Forge.ViewModels.SessionDirectoryFolderVM.LoadSummaries()
   at Forge.ViewModels.SessionDirectoryFolderVM.Refresh()
   at Forge.ViewModels.SessionVM.<>c.<onRefreshDirectory>b__267_0(SessionDirectoryFolderVM folder)
   at Forge.ViewModels.SessionVM.<>c__DisplayClass194_0`1.<executeFolderCommand>b__0()
   at Forge.Common.UIServices.ExecuteOnUIThread(Action action)
   at Forge.ViewModels.SessionVM.executeCommand(Action action)

view this post on Zulip Michel Rutten (Oct 22 2018 at 09:52):

Hi @Patrick Werner, thank you for reporting this issue!
We've received a similar error report from another customer. Apparently, the current Forge release does not like/handle profiles with a relative canonical url. If your directory contains one or more of such profiles, then Forge will complain. Workaround is to (manually) update relative canonical url's to absolute form.
I'll definitely try and fix this in the next release.

view this post on Zulip Maximilian Reith (Oct 24 2018 at 09:07):

Hi @Michel Rutten,
i profiled some structuredefinitions and saved them together with their snapshots. I updated Forge and now i receive failures when opening the resources(not all, but nearly). The position of the faults are weird...

2018-10-24T10:35:12
Forge Forge 19.4.1 for HL7 FHIR STU3
Version: Version 19.4.1.0 (ClickOnce)
FHIR Version: FHIR .NET API library for 3.0.1


FormatException in Hl7.Fhir.Support:
The attribute 'value' in element 'meaningWhenMissing' has an empty value, which is not allowed. (at line 0, 0)
bei Hl7.Fhir.Utility.ExceptionSourceExtensions.NotifyOrThrow(ExceptionNotificationHandler handler, Object source, ExceptionNotification args)
bei Hl7.Fhir.Serialization.PocoBuilder.<>c__DisplayClass9_0.<buildInternal>b__1(Object o, ExceptionNotification a)
bei Hl7.Fhir.Utility.ExceptionSourceExtensions.ExceptionInterceptor.<>c__DisplayClass3_0.<.ctor>g__nestedHandler|0(Object s, ExceptionNotification a)
bei Hl7.Fhir.Utility.ExceptionSourceExtensions.NotifyOrThrow(ExceptionNotificationHandler handler, Object source, ExceptionNotification args)
bei Hl7.Fhir.ElementModel.Adapters.ElementNavToSourceNodeAdapter.<.ctor>b__1_0(Object o, ExceptionNotification a)
bei Hl7.Fhir.Utility.ExceptionSourceExtensions.NotifyOrThrow(ExceptionNotificationHandler handler, Object source, ExceptionNotification args)
bei Hl7.Fhir.ElementModel.Adapters.SourceNodeToElementNavAdapter.<.ctor>b__4_0(Object o, ExceptionNotification a)
bei Hl7.Fhir.Utility.ExceptionSourceExtensions.NotifyOrThrow(IExceptionSource ies, Object source, ExceptionNotification args)
bei Hl7.Fhir.Serialization.FhirXmlNode.raiseFormatError(Object source, IExceptionSource ies, String message, XObject position)
bei Hl7.Fhir.Serialization.FhirXmlNode.verifyXObject(XObject node, XNamespace[] AllowedExternalNamespaces, Object source, IExceptionSource ies)
bei Hl7.Fhir.Serialization.FhirXmlNode.<enumerateChildren>d__33.MoveNext()
bei Hl7.Fhir.Serialization.FhirXmlNode.<Children>d__32.MoveNext()
bei System.Collections.Generic.List1..ctor(IEnumerable1 collection)
bei System.Linq.Enumerable.ToListTSource
bei Hl7.Fhir.Serialization.ComplexTypeReader.Deserialize(ClassMapping mapping, Base existing)
bei Hl7.Fhir.Serialization.DispatchingReader.Deserialize(PropertyMapping prop, String memberName, Object existing)
bei Hl7.Fhir.Serialization.ComplexTypeReader.read(ClassMapping mapping, IEnumerable1 members, Base existing) bei Hl7.Fhir.Serialization.ComplexTypeReader.Deserialize(ClassMapping mapping, Base existing) bei Hl7.Fhir.Serialization.DispatchingReader.Deserialize(PropertyMapping prop, String memberName, Object existing) bei Hl7.Fhir.Serialization.RepeatingElementReader.Deserialize(PropertyMapping prop, String memberName, IList existing) bei Hl7.Fhir.Serialization.DispatchingReader.Deserialize(PropertyMapping prop, String memberName, Object existing) bei Hl7.Fhir.Serialization.ComplexTypeReader.read(ClassMapping mapping, IEnumerable1 members, Base existing)
bei Hl7.Fhir.Serialization.ComplexTypeReader.Deserialize(ClassMapping mapping, Base existing)
bei Hl7.Fhir.Serialization.DispatchingReader.Deserialize(PropertyMapping prop, String memberName, Object existing)
bei Hl7.Fhir.Serialization.ComplexTypeReader.read(ClassMapping mapping, IEnumerable1 members, Base existing) bei Hl7.Fhir.Serialization.ComplexTypeReader.Deserialize(ClassMapping mapping, Base existing) bei Hl7.Fhir.Serialization.ResourceReader.Deserialize(Resource existing) bei Hl7.Fhir.Serialization.PocoBuilder.<>c__DisplayClass9_0.<buildInternal>g__build|0() bei Hl7.Fhir.Serialization.PocoBuilder.buildInternal(ISourceNode source, Type typeToBuild) bei Hl7.Fhir.Serialization.PocoBuilder.BuildFrom(ISourceNode source, Type dataType) bei Hl7.Fhir.ElementModel.PocoBuilderExtensions.ToPoco(IElementNavigator navigator, Type pocoType, PocoBuilderSettings settings) bei Hl7.Fhir.ElementModel.PocoBuilderExtensions.ToPoco[T](IElementNavigator navigator, PocoBuilderSettings settings) bei Hl7.Fhir.Serialization.BaseFhirParser.Parse[T](IElementNavigator nav) bei Hl7.Fhir.Specification.Source.DirectorySource.loadResourceInternal[T](ArtifactSummary summary) bei Hl7.Fhir.Specification.Source.DirectorySource.ResolveByCanonicalUri(String uri) bei Hl7.Fhir.Specification.Source.CachedResolver.InternalResolveByCanonicalUri(String url) bei Hl7.Fhir.Specification.Source.CachedResolver.<.ctor>b__3_1(String id) bei Hl7.Fhir.Specification.Source.CachedResolver.Cache1.Get(String identifier, CachedResolverLoadingStrategy strategy)
bei Hl7.Fhir.Specification.Source.CachedResolver.ResolveByCanonicalUri(String url)
bei Hl7.Fhir.Specification.Source.MultiResolver.ResolveByCanonicalUri(String uri)
bei Forge.ViewModels.ElementTypeMatcher.findCandidateBaseTypesForTargetProfile(IEnumerable1 candidates, String targetProfileUri) bei Forge.ViewModels.ElementTypeMatcher.findBaseForReferenceType(IEnumerable1 baseTypes, TypeRefComponent type)
bei Forge.ViewModels.ElementTypeMatcher.FindBaseType(IList1 baseTypes, TypeRefComponent type) bei Forge.ViewModels.TypeStorageHandler.<CreateItems>d__19.MoveNext() bei Forge.ViewModels.MultipleValueProperty1.set_StorageHandler(IStorageHandler value)
bei Forge.ViewModels.TypeProperty.set_StorageHandler(IStorageHandler value)
bei Forge.ViewModels.DefinitionVM.setModelElement(ElementDefinition definition, IElementsStorageHandler elementsStorageHandler)
bei Forge.ViewModels.DefinitionVM.initialize(Base modelElement, Base baseElement, IElementsStorageHandler elementsStorageHandler)
bei Forge.ViewModels.ElementsStorageHandler.get_Value()
bei Forge.ViewModels.SingleValueProperty1.set_StorageHandler(IStorageHandler value) bei Forge.ViewModels.RestrictingElementDefinitionVM.set_StorageHandler(IStorageHandler value) bei Forge.ViewModels.RestrictingElementDefinitionVM..ctor(MultipleValueProperty1 owner, ElementsStorageHandler storageHandler)
bei Forge.ViewModels.ElementsStorageHandler.<CreateItems>d__76.MoveNext()
bei Forge.ViewModels.MultipleValueProperty`1.set_StorageHandler(IStorageHandler value)
bei Forge.ViewModels.ProfileVM.set_ModelElement(Base value)
bei Forge.ViewModels.ProfileVM.Initialize(Base modelElement, Base baseElement)
bei Forge.ViewModels.ProfileVM..ctor(ISessionNode owner, StructureDefinition model, StructureDefinition baseModel)
bei Forge.ViewModels.SessionItemVM.CreateResourceVM(ISessionFolder parentFolder, SessionItemVM owner, Resource model)
bei Forge.ViewModels.SessionItemVM..ctor(ISessionFolder owner, Resource model)
bei Forge.ViewModels.SessionFolderVM.Open(Resource model)
bei Forge.ViewModels.SessionDirectoryFolderVM.openArtifact(ArtifactSummaryVM summaryVM, Boolean asCopy)
bei Forge.ViewModels.SessionDirectoryFolderVM.Open(ArtifactSummaryVM summaryVM, Boolean asCopy)
bei Forge.ViewModels.SessionVM.<>c.<onOpenDirectoryItem>b__262_0(SessionDirectoryFolderVM folder, ArtifactSummaryVM selItem)
bei Forge.ViewModels.SessionVM.<>c__DisplayClass202_0.<executeDirectoryItemCommand>b__0()
bei Forge.Common.UIServices.ExecuteOnUIThread(Action action)
bei Forge.ViewModels.SessionVM.executeCommand(Action action)

2018-10-24T10:39:00
Forge Forge 19.4.1 for HL7 FHIR STU3
Version: Version 19.4.1.0 (ClickOnce)
FHIR Version: FHIR .NET API library for 3.0.1


FormatException in Hl7.Fhir.Support:
The attribute 'value' in element 'comment' has an empty value, which is not allowed. (at line 0, 0)
bei Hl7.Fhir.Utility.ExceptionSourceExtensions.NotifyOrThrow(ExceptionNotificationHandler handler, Object source, ExceptionNotification args)
bei Hl7.Fhir.Serialization.PocoBuilder.<>c__DisplayClass9_0.<buildInternal>b__1(Object o, ExceptionNotification a)
bei Hl7.Fhir.Utility.ExceptionSourceExtensions.ExceptionInterceptor.<>c__DisplayClass3_0.<.ctor>g__nestedHandler|0(Object s, ExceptionNotification a)
bei Hl7.Fhir.Utility.ExceptionSourceExtensions.NotifyOrThrow(ExceptionNotificationHandler handler, Object source, ExceptionNotification args)
bei Hl7.Fhir.ElementModel.Adapters.ElementNavToSourceNodeAdapter.<.ctor>b__1_0(Object o, ExceptionNotification a)
bei Hl7.Fhir.Utility.ExceptionSourceExtensions.NotifyOrThrow(ExceptionNotificationHandler handler, Object source, ExceptionNotification args)
bei Hl7.Fhir.ElementModel.Adapters.SourceNodeToElementNavAdapter.<.ctor>b__4_0(Object o, ExceptionNotification a)
bei Hl7.Fhir.Utility.ExceptionSourceExtensions.NotifyOrThrow(IExceptionSource ies, Object source, ExceptionNotification args)
bei Hl7.Fhir.Serialization.FhirXmlNode.raiseFormatError(Object source, IExceptionSource ies, String message, XObject position)
bei Hl7.Fhir.Serialization.FhirXmlNode.verifyXObject(XObject node, XNamespace[] AllowedExternalNamespaces, Object source, IExceptionSource ies)

view this post on Zulip Michel Rutten (Oct 24 2018 at 09:14):

Hi @Maximilian Fechteler, according to the error message, apparently your profiles contain empty values, e.g. <meaningWhenMissing value=""/>, which are disallowed by FHIR:
http://hl7.org/fhir/formats.html

"This value attribute/property can never be empty. Either it is absent, or it is present with at least one character of non-whitespace content"

The current Forge release is based on a new (de-)serialization layer, which is more flexible but also more strict in reporting errors. Forge Error reporting could use a bit of work to make it more user friendly (TODO).
As a workaround, I suggest you manually edit the profiles (via text editor) and remove the illegal empty value attributes.

Hope this helps!

Cheers, Michel

view this post on Zulip Maximilian Reith (Oct 24 2018 at 09:20):

but at line 0.0 is no meaningWhenMissing and the only existing element is not empty <meaningWhenMissing value="If missing, this task should be performed with normal priority" />

view this post on Zulip Maximilian Reith (Oct 24 2018 at 09:22):

all resources could get opened properly before the update occurs

view this post on Zulip Maximilian Reith (Oct 24 2018 at 09:26):

in some cases no meaningWhenMissing is present at all

view this post on Zulip Michel Rutten (Oct 24 2018 at 09:38):

Hi @Maximilian Fechteler, looks like you found another issue. Can you share your set of profiles with me, for debugging purposes? Then I will try to reproduce the issue on my machine.

view this post on Zulip Michel Rutten (Oct 24 2018 at 09:41):

BTW Could be that one or more referenced external profiles/extensions introduce empty value(s), instead of your own profile.

view this post on Zulip Maximilian Reith (Oct 24 2018 at 10:18):

Hey @Michel Rutten, you can have all of it ;-)
ftp://ftp.kbv.de/ita-update/291d-Schnittstellen/PVS-Archivierungs-_Wechsel-Schnittstelle/FHIR-Definition-SST-AW.zip

nearly every profile has an issue (comment or meaningWhenMisssing bug)
profile: 74_PR_AW_Leistungsanfrage_Psychotherapie has no meaningWhenMissing element
fault is in every case at 0,0

view this post on Zulip Maximilian Reith (Oct 24 2018 at 10:24):

could you provide an earlier version of forge?

view this post on Zulip Michel Rutten (Oct 24 2018 at 11:09):

Hi @Maximilian Fechteler, thank you for the link, I will try to reproduce the issue.
Forge always automatically updates to the latest version. Commercial customers also have access to historic versions.

view this post on Zulip Michel Rutten (Oct 24 2018 at 15:26):

I @Maximilian Fechteler, I investigated the issue. Indeed, many of the profiles contain (illegal) empty value attributes:
<someElement value=" "/>
This triggers exceptions during de-serialization.
Note: syntax errors can originate from the profile you're currently trying to open, but also from externally referenced profiles, such as an extension definitions. Unfortunately, the error message does not (yet) report the name or url of the invalid profile...

As a workaround, you could remove all elements with empty values from all profiles in the working folder. Quite tedious to do this manually, preferably create a simple xslt or script to process and correct all your profiles.

The new de-serialization logic in the API exposes some internal configuration options that control behavior for dealing with invalid input such as empty value attributes. In a future Forge update, I want to leverage/expose relevant configuration options in the UI. Once this is in place, you will be able to open profiles with (minor) errors and correct them in the application.
We will also try to improve API error reporting, to clearly indicate the invalid target profile to the end user.

view this post on Zulip Maximilian Reith (Oct 25 2018 at 08:34):

Hi @Michel Rutten, thank you for the fast response. But all of these <someElement value=" "/> Elemetns are in the snapshot part, so i think you may have to improve the automated snapshot generation.

view this post on Zulip Michel Rutten (Oct 25 2018 at 08:42):

Actually, it's more subtle. The new (de-)serializer logic in the API now by default aborts on any syntax error in the input. There is a provision for clients to override the default behavior, however I haven't leveraged that in Forge yet (TODO).
The existing snapshots may have been generated by a previous version of the .NET FHIR API, or another system.
Anyway, I'm working on improving this for the next update.
BTW Forge always re-generates every snapshot component on demand. So you could safely delete all the snapshot components from the input files.

view this post on Zulip Maximilian Reith (Oct 25 2018 at 09:02):

yes i generated these profiles with forge 19.1.0900 and i will update the snapshots in the next release. Thanks a lot...

view this post on Zulip Michel Rutten (Oct 25 2018 at 09:11):

No problem. This is an annoying but temporary tooling issue that we're going to address ASAP.


Last updated: Apr 12 2022 at 19:14 UTC