文章目录
- 第二十八章 开发Productions - ObjectScript Productions - 定义业务操作
- 介绍
- 关键原则
- 定义业务操作类
第二十八章 开发Productions - ObjectScript Productions - 定义业务操作
本页介绍如何定义业务操作类。
提示: IRIS
提供使用特定出站适配器的专用业务操作类,其中之一可能适合需要。如果是这样,则不需要编程。有关部分列表,请参阅 Introducing Interoperability Productions
中的连接选项。
介绍
业务操作负责将请求从 IRIS
发送到外部应用程序或系统。下图显示了它是如何工作的:
请注意,此图仅显示数据的输入流,而不是可选响应。
业务操作负责以下活动:
- 等待来自业务服务或业务流程的请求。
- 通过消息映射将请求分派到业务操作中的特定方法。业务操作类中的每个方法代表外部应用程序中的特定操作。
- 将请求对象转换为关联出站适配器可用的形式,并要求出站适配器向外部应用程序发送请求。
- 如果请求,返回一个响应对象给调用者。
每个业务操作都包含一个消息映射,该消息映射指定要执行的外部操作,具体取决于它收到的请求消息的类型。消息映射包含一个或多个条目,每个条目对应于关联出站适配器的一次调用。
关键原则
按照惯例,业务操作是一种非常具体的操作,它包含很少的逻辑,并且可以执行它所要求的操作,而无需调用进一步的操作或以任何方式进行分支。当生产设计需要逻辑时,这包含在业务流程中。
许多产品提供了大量极其简单的业务操作。在这些情况下,业务流程包含确定何时应调用每个操作的逻辑。
定义业务操作类
创建一个业务操作类,定义一个类如下:
- 业务操作类必须在(或子类)中扩展
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
方法。