如何使用 FhirDotNet 获取相同类型的两个资源之间不同的属性列表
How to use FhirDotNet to get list of properties that are different between two resources of the same type
我正在使用 Fhir-dotnet API 与我们的 Fhir 服务器交互,以将患者记录与我们的后端患者存储库同步。我有两个患者资源实例:一个代表我们源存储库中的版本,一个代表 Fhir 中的患者。我想将 patient 源存储库版本的一部分更改应用到 Patient 的 Fhir 版本,并尝试使用 CopyTo() 方法,但这也会删除仅存在于 Fhir 版本 patient 中的所有数据。
理想情况下,我只想更新 Patient 的 Fhir 版本中的那些属性,其中我在 Patient 的源存储库版本中有数据(在 Patient 的源版本中为非空的字段)并保留任何数据仅存在于 Fhir 存储库中。由于他们使用他们的移动应用程序与 API 交互而添加到 Fhir 版本的患者的任何数据都应该单独保留(除非他们更新了我也在尝试的 属性同步)。
由于 CopyTo() 似乎是从一种资源到另一种资源的完全替换(不是附加副本并忽略源中为空的字段),我需要能够比较两个相同类型的资源和获取它们之间 属性 变化的列表。似乎有一些基础 类 在 IsMatch() 下使用 IDeepCopy 和 IDeepComparison 来支持这一点,我还在 GitHub 注释部分注意到支持检测差异。
Helper classes to work with the specification metadata, most notably
StructureDefinition and generation of differentials
所以我的问题是 Fhir DOTNET API 中是否存在 类 可以为我提供相同资源类型的两个实例之间的更改列表,如果有,是什么类 他们会举一个可能的例子吗?如果没有,那么是否存在一种现有模式,我可以使用它来为我提供相同类型的两个实例之间不同的属性列表,这些属性可用于在它们之间分配值。似乎必须进行大量反射才能生成真实属性列表,而不仅仅是名称值对字符串列表。如果Fhir.NETAPI中不支持这个,那么我想写类似下面的伪代码...
- 获取源患者
- 获取目标患者
- 对于每个更改 属性(源和目标之间的深度比较),用源更新目标 属性
您可以在任何元素上使用 NamedChildren()
函数来按名称获取子元素。有了这个列表,你就可以用IsExactly()
的方式来一一比较了!当然,您必须处理 FHIR 的嵌套组(如 Patient.contact),这可能需要不同的处理方式。
我正在使用 Fhir-dotnet API 与我们的 Fhir 服务器交互,以将患者记录与我们的后端患者存储库同步。我有两个患者资源实例:一个代表我们源存储库中的版本,一个代表 Fhir 中的患者。我想将 patient 源存储库版本的一部分更改应用到 Patient 的 Fhir 版本,并尝试使用 CopyTo() 方法,但这也会删除仅存在于 Fhir 版本 patient 中的所有数据。
理想情况下,我只想更新 Patient 的 Fhir 版本中的那些属性,其中我在 Patient 的源存储库版本中有数据(在 Patient 的源版本中为非空的字段)并保留任何数据仅存在于 Fhir 存储库中。由于他们使用他们的移动应用程序与 API 交互而添加到 Fhir 版本的患者的任何数据都应该单独保留(除非他们更新了我也在尝试的 属性同步)。
由于 CopyTo() 似乎是从一种资源到另一种资源的完全替换(不是附加副本并忽略源中为空的字段),我需要能够比较两个相同类型的资源和获取它们之间 属性 变化的列表。似乎有一些基础 类 在 IsMatch() 下使用 IDeepCopy 和 IDeepComparison 来支持这一点,我还在 GitHub 注释部分注意到支持检测差异。
Helper classes to work with the specification metadata, most notably StructureDefinition and generation of differentials
所以我的问题是 Fhir DOTNET API 中是否存在 类 可以为我提供相同资源类型的两个实例之间的更改列表,如果有,是什么类 他们会举一个可能的例子吗?如果没有,那么是否存在一种现有模式,我可以使用它来为我提供相同类型的两个实例之间不同的属性列表,这些属性可用于在它们之间分配值。似乎必须进行大量反射才能生成真实属性列表,而不仅仅是名称值对字符串列表。如果Fhir.NETAPI中不支持这个,那么我想写类似下面的伪代码...
- 获取源患者
- 获取目标患者
- 对于每个更改 属性(源和目标之间的深度比较),用源更新目标 属性
您可以在任何元素上使用 NamedChildren()
函数来按名称获取子元素。有了这个列表,你就可以用IsExactly()
的方式来一一比较了!当然,您必须处理 FHIR 的嵌套组(如 Patient.contact),这可能需要不同的处理方式。