美文网首页
第二十八章 开发Productions - ObjectScri

第二十八章 开发Productions - ObjectScri

作者: Cache技术分享 | 来源:发表于2023-06-07 08:01 被阅读0次

第二十八章 开发Productions - ObjectScript Productions - 定义业务操作

本页介绍如何定义业务操作类。

提示: IRIS 提供使用特定出站适配器的专用业务操作类,其中之一可能适合需要。如果是这样,则不需要编程。有关部分列表,请参阅 Introducing Interoperability Productions 中的连接选项。

介绍

业务操作负责将请求从 IRIS 发送到外部应用程序或系统。下图显示了它是如何工作的:

image.png

请注意,此图仅显示数据的输入流,而不是可选响应。

业务操作负责以下活动:

  • 等待来自业务服务或业务流程的请求。
  • 通过消息映射将请求分派到业务操作中的特定方法。业务操作类中的每个方法代表外部应用程序中的特定操作。
  • 将请求对象转换为关联出站适配器可用的形式,并要求出站适配器向外部应用程序发送请求。
  • 如果请求,返回一个响应对象给调用者。

每个业务操作都包含一个消息映射,该消息映射指定要执行的外部操作,具体取决于它收到的请求消息的类型。消息映射包含一个或多个条目,每个条目对应于关联出站适配器的一次调用。

关键原则

按照惯例,业务操作是一种非常具体的操作,它包含很少的逻辑,并且可以执行它所要求的操作,而无需调用进一步的操作或以任何方式进行分支。当生产设计需要逻辑时,这包含在业务流程中。

许多产品提供了大量极其简单的业务操作。在这些情况下,业务流程包含确定何时应调用每个操作的逻辑。

定义业务操作类

创建一个业务操作类,定义一个类如下:

  • 业务操作类必须在(或子类)中扩展 Ens.BusinessOperation
  • 在类中,ADAPTER 参数通常应等于此业务服务要使用的适配器类的名称。

或者可以定义一个没有关联的出站适配器类的业务操作。在这种情况下,业务操作本身必须包含与外部应用程序通信所需的逻辑。

  • 在类中,INVOCATION 参数必须指定要使用的调用样式,它必须是以下之一。

    • Queue队列意味着消息在一个后台作业中创建并放置在队列中,此时原始作业被释放。稍后,当处理消息时,将为该任务分配不同的后台作业。这是最常见的设置。
    • InProc 意味着消息将在创建它的同一个作业中被制定、发送和传递。在将消息传递到目标之前,该作业将不会在发件人的池中再次可用。这只适用于特殊情况。

类应该定义一个至少包含一个条目的消息映射。消息映射是具有以下结构的 XData 块条目:

XData MessageMap
{
<MapItems>
  <MapItem MessageType="messageclass">
    <Method>methodname</Method>
  </MapItem>
  ...
</MapItems>
}
  • 类必须定义消息映射中命名的所有方法。这些方法称为消息处理程序。每个消息处理程序都应具有以下签名:
Method Sample(pReq As RequestClass, Output pResp As ResponseClass) As %Status

这里Sample是方法名,RequestClass是请求消息类名,ResponseClass是响应消息类名。一般来说,这些方法会引用你业务运行的Adapter属性的属性和方法。有关详细信息,请参阅定义消息处理程序方法。

  • 类可以添加或删除设置。请参阅添加和删除设置。
  • 类可以实现任何或所有启动和拆卸方法。请参阅覆盖启动和停止行为。

IRIS 是一个集成平台,可以与许多其他异构设备进行通信;因此,它不会使属性值依赖于服务器平台、时区、时间格式或其他可能适用的本地化问题。相反, 建议在生产实施中处理此类情况。如果产品需要对属性值进行不同的初始设置,请在业务操作的 OnInit() 方法中设置该值。请参阅覆盖启动和停止行为。

  • 类可以包含完成自身内部工作的方法。

以下示例显示了需要的一般结构:

Class MyProduction.NewOperation Extends Ens.BusinessOperation
{
Parameter ADAPTER = "MyProduction.MyOutboundAdapter";

Parameter INVOCATION = "Queue";

Method SampleCall(pRequest As Ens.Request, Output pResponse As Ens.Response) As %Status
{
  Quit $$$ERROR($$$NotImplemented)
}

XData MessageMap
{
<MapItems>
  <MapItem MessageType="Ens.Request">
    <Method>SampleCall</Method>
  </MapItem>
</MapItems>
}
}

消息映射的操作很简单。当业务操作收到传入请求时,它会从消息映射的顶部开始搜索每个 MapItem,直到找到第一个其 MessageType 属性与传入消息类型匹配的映射项。然后调用与此 MapItem 关联的操作方法。

有关消息映射的一些注意事项:

  • 消息映射从上到下查找;一旦找到匹配项,就不再执行搜索。
  • 如果传入的请求对象是给定 MessageType 的子类,则将其视为匹配项。如果要过滤掉子类,请务必将它们放在消息映射中的任何超类之上。
  • 如果传入请求与任何 MapItem 条目都不匹配,则会调用 OnMessage 方法。

相关文章

网友评论

      本文标题:第二十八章 开发Productions - ObjectScri

      本文链接:https://www.haomeiwen.com/subject/drenedtx.html