文章
· 六月 9, 2022 阅读大约需 2 分钟

InterSystems 最佳实践系列之自定义业务服务 Business Services

业务服务Business Service/BS是能够支持我们从外部数据来源获取数据强大的组件,在在大多数情况下,内置的现成组件就已经可以完成这项工作,但有时候我们还是需要写编码来自定义业务服务。在这样做的时候,有一些最佳实践供大家参考。

 
  1. 精益求精--业务服务的代码应该是最小化处理。这是由于如果在业务服务中发生任何错误,将不发送任何消息,从而将不创建任何跟踪。这使得它很难进行故障排除。相反,要尽可能快地完成Ensemble消息,并将其传递给适当的目标。有些人认为,如果有一个流进来,Ensemble消息应该包括一个流属性,然后由一个业务流程来解析这个流。(见文档中的例子3)还有人说,只要包括良好的错误检查,最小的处理就可以了。在这两种情况下,请记住,数据转换是存在的,可以在业务流程中使用,以便对该数据做进一步的翻译。这些转换不应该被从业务服务中调用。(参见文档中的示例1)。
  2. 可配置的目标:--在大多数情况下,业务服务的代码应该是一个可配置的目标,而不是将其硬编码到业务服务中。要做到这一点,你可以在业务服务类中创建一个名为TargetConfigNames的属性,其类型为Ens.DataType.ConfigName,使用SETTINGS参数并将此设置放在配置页上。

虽然这个属性不需要被命名为TargetConfigNames--但使用该名称与HL7组件中使用的内置设置相一致,这样做可以保持组件内的一致性。使用上面的代码只允许你选择一个目标。如果你需要向多个组件发送消息,有一些选项可以使这个设置成为多选的。请参考文档中的添加和删除设置,以了解更多关于如何做的内容。

你可以用下面的代码对该方法进行编码以处理多个目标:

For iTarget=1:1:$L(..TargetConfigNames, ",") {
     Set tOneTarget=$ZStrip($P(..TargetConfigNames,",",iTarget),"<>W")
      Continue:""=tOneTarget
     $$$sysTRACE("Sending input Stream ...")
     set tSC = ..SendRequestAsync(tOneTarget, pRequest)
}

 

欢迎分享更多最佳实践!

讨论 (0)1
登录或注册以继续