HL7 FHIR Release 3 (STU)在事务包中引入了条件引用的概念:
在构建捆绑包时,客户端可能不知道资源的逻辑 ID,但它可能知道标识信息——例如标识符。当从 v2 消息构建事务时,通常会出现这种情况。客户端可以使用搜索将该标识符解析为逻辑 id,但这意味着对逻辑 id 的解析不会发生在与提交相同的事务中(以及使客户端显着复杂化)。因此,在事务中(并且仅在事务中),对资源的引用可能会被描述如何找到正确引用的搜索 URI 替换:
<Bundle xmlns="http://hl7.org/fhir">
<id value="20160113160203" />
<type value="transaction" />
<entry>
<fullUrl value="urn:uuid:c72aa430-2ddc-456e-7a09-dea8264671d8" />
<resource>
<Observation>
<subject>
<reference value="Patient?identifier=12345" />
</subject>
<!-- rest of resource omitted -->
</Observation>
</resource>
<request>
<method value="POST" />
</request>
</entry>
</Bundle>
搜索 URI 是相对于服务器的 [base] 路径的,并且总是以资源类型开头:
[type]:?parameters....
只允许过滤参数;控制资源返回的参数都不相关。处理事务时,服务器应:
- 检查搜索 URI 的所有引用
- 对于搜索 URI,使用搜索来定位匹配的资源
- 如果没有匹配,或者有多个匹配,则交易失败,并返回错误给用户
- 如果有一个匹配项,则服务器将搜索 URI 替换为对匹配资源的引用
...引用自2.21.0.17.2 事务处理规则
我发现条件引用的这个概念非常有用,我想在我的 HAPI FHIR 客户端/服务器应用程序中使用它。好像不支持。服务器拒绝此类事务包 si 并显示以下错误消息:
客户:
HTTP 400 错误请求:在
path[Observation.subject]
- 不包含资源类型 -找到无效的资源引用Patient?identifier=12345
Exception in thread "main" ca.uhn.fhir.rest.server.exceptions.InvalidRequestException: HTTP 400 Bad Request: Invalid resource reference found at path[Observation.subject] - Does not contain resource type - Patient?identifier=12345
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at ca.uhn.fhir.rest.server.exceptions.BaseServerResponseException.newInstance(BaseServerResponseException.java:307)
at ca.uhn.fhir.rest.client.BaseClient.invokeClient(BaseClient.java:290)
at ca.uhn.fhir.rest.client.GenericClient$BaseClientExecutable.invoke(GenericClient.java:637)
at ca.uhn.fhir.rest.client.GenericClient$TransactionExecutable.execute(GenericClient.java:2209)
服务器日志:
WARN cufrsiExceptionHandlingInterceptor [ExceptionHandlingInterceptor.java:135] REST 处理期间失败:ca.uhn.fhir.rest.server.exceptions.InvalidRequestException:在
path[Observation.subject]
- 不包含资源类型 -找到无效的资源引用Patient?identifier=12345
所以我的问题是:
是否可以对 HAPI FHIR JPA 服务器使用条件引用?
或者如果不可能,是否有解决方法?如果引用目标不存在,我可以使用相同的条件操作来解决引用或失败吗?