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

时间:2019-09-28 18:15:27

标签: hl7-fhir

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

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

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

  

帮助程序类可用于规范元数据,最值得注意的是   结构定义和差异生成

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

  • 获取源患者
  • 获取目标患者
  • 对于每个更改的属性(在源和目标之间进行深层比较),使用源属性更新目标

1 个答案:

答案 0 :(得分:0)

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