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

第三十章 开发Productions - ObjectScript Productions - 定义业务操作 - 调用适配器方法

第三十章 开发Productions - ObjectScript Productions - 定义业务操作 - 调用适配器方法

调用适配器方法

最常见的是,业务操作不包含用于与外部系统通信的逻辑。相反,业务操作使用处理此逻辑的出站适配器。一旦业务操作与出站适配器相关联,它就会调用适配器的方法来发送和接收数据。有关调用适配器方法的详细信息,请参阅从业务主机访问属性和方法。

向生产中的目标发送请求

尽管业务操作主要负责向特定的外部应用程序传递请求,但它也可以根据需要向其他业务操作或业务流程发送消息。要将消息发送到生产中的目标,请调用 SendRequestSync()SendRequestAsync()SendDeferredResponse()

Ens.BusinessOperation 定义了一个可以使用的附加方法:DeferResponse()

DeferResponse() 方法

此方法中返回一个 %Status,指示成功或失败。它提供了一个引用参数 token,它返回稍后调用 SendDeferredResponse() 所需的延迟响应传递令牌。例如:

   Set sc=..DeferResponse(.token)
   // Send the token out somewhere...
   Quit $$$O

挂起消息

如果希望业务操作将其当前正在进行的消息标记为具有暂停状态,请将业务操作属性 SuspendMessage 设置为整数值 1 (true)。通常,业务操作会对由于某种原因被外部系统拒绝的消息执行此操作。

IRISSuspended 消息置于特殊队列中,以便系统管理员可以诊断问题、解决问题,然后重新发送消息。系统管理员可以执行简单的重新发送(到原始目标)或可以将其发送到新的目的地。有关信息,请参阅监控制作。

以下示例方法来自将文档发送到外部系统的业务操作。如果从对即将发送的文档的 Validate() 调用返回错误,则该方法将 SuspendMessage 属性设置为 1

Method validateAndIndex(pDoc As MyX12.Document) As %Status
{
  If ""=..Validation||'$method($this,"OnValidate",pDoc,..Validation,.tSC) {
    Set tSC=##class(MyX12.Validator).Validate(pDoc,..Validation)
  }
  Set:'$D(tSC) tSC=$$$OK
  If $$$ISERR(tSC) {
    Set ..SuspendMessage=1
    Do ..SendAlert(##class(Ens.AlertRequest).%New($LB(
        ..%ConfigName,"Suspended document "_pDoc.%Id()_
        " because it failed validation using spec '"
        _..Validation_"' with error "_
        $$$StatusDisplayString(tSC))))
    Quit tSC
  }
  If ""'=..SearchTableClass {
    TRY {
      Set tSCStore=$classmethod(..SearchTableClass,"IndexDoc",pDoc)
      If $$$ISERR(tSCStore)
        $$$LOGWARNING("Failed to create SearchTable entries")
    }
    CATCH errobj {
      $$$LOGWARNING("Failed to invoke SearchTable class")
     }
  }
  Quit $$$OK
}
讨论 (0)1
登录或注册以继续