如何使用FhirDotNet获取相同类型的两个资源之间不同的属性列表

问题描述 投票:0回答:1

我正在使用Fhir-dotnet API与我们的Fhir服务器进行交互,以将患者记录与我们的后端患者存储库同步。我有两个Patient资源的实例:一个代表我们的源存储库中的版本,另一个代表Fhir中的患者。我想将患者的源存储库版本的更改子集应用于患者的Fhir版本,并尝试使用CopyTo()方法,但是这还会删除仅存在于患者的Fhir版本中的所有数据。

理想情况下,我只想更新Patient的Fhir版本中的属性,在这些版本中,我在Patient的源存储库版本中有数据(在Patient的源版本中非空的字段),而仅保留存在于Fhir存储库。由于他们使用移动应用程序与API进行交互而添加到Fhir版本的患者中的任何数据都将被保留(除非他们更新了我也在尝试同步的属性)。

因为CopyTo()似乎是从一种资源到另一种资源的完全替代(不是加法副本,并且忽略了soruce中为null的字段),所以我需要能够比较相同类型的两个资源并获得列表他们之间的财产变化。似乎有一些基础类使用IDeepCopy和IDeepComparison在IsMatch()下支持此功能,并且我在GitHub注释部分中也注意到了对检测差异的支持。

Helper类,用于处理规范元数据,最显着的是结构定义和差异的产生

因此,我的问题是Fhir DOTNET API中是否存在现有的类,可以为我提供相同资源类型的两个实例之间的更改列表,如果可以,那么可能的示例将是哪些类?如果不是,那么是否存在一种现有模式,可以用来向我提供属性列表,这些属性在两个相同类型的实例之间是不同的,可以用来在它们之间分配值。似乎必须进行大量反思才能生成真实属性列表,而不仅仅是名称值对字符串列表。如果Fhir.NET API不支持此功能,那么我想用类似于下面的伪代码来编写...

  • 获取源患者
  • 获取目标患者
  • 对于每个更改的属性(在源和目标之间进行深层比较),使用源属性更新目标
hl7-fhir
1个回答
0
投票

您可以在任何元素上使用NamedChildren()函数以按名称获取子级。使用此列表,您可以使用IsExactly()方法将它们一一比较!当然,您必须处理FHIR的嵌套组(例如Patient.contact),这可能需要不同的处理。

© www.soinside.com 2019 - 2024. All rights reserved.