后台任务:系统如何生成 BOD
系统按以下步骤生成 BOD。
- 该应用程序使用其复制引擎生成每个 BOD。两个单独的过程可以触发 BOD 生成:
- 表生成:对触发 UpdateCollection 请求的表进行了更改。
- 函数生成:触发远程方法调用的系统中发生业务事件。
这其中的每个都被认为是一个 BOD 生成集成点。生成 BOD 的业务事件在“复制文档出站对照参考”表单中列出。
示例 1 - 表生成:向复制类别添加一个表名之后,对该表中的记录进行的任何更改都会触发 BOD 生成。如果这过于一刀切,也就是说,您不希望在该表中的任何内容发生变化时都生成 BOD,则可以使用“筛选器”属性定义一个筛选器以确定对表格进行的某个更改是否会触发 BOD 生成,从而限制 BOD 的生成。只包括与筛选器匹配的记录。还有三个复选框可以基于对表格进行的更改的类型来限制 BOD 的生成:“跳过插入”、“跳过更新”和“跳过删除”。所有这些操作都通过“复制类别”表单来执行。
示例 2 - 函数生成:这种技术应在简单的基于表格更新的触发器不足以满足需要时使用。例如,假设您想在创建新的采购单时触发一个 BOD。采购单是层级结构数据,可以有任意数量的行和下达,因此无法标识会触发 BOD 生成操作的单个表格,也没有办法知道何时插入了最后一个行或下达。
再比如说,如果希望在发生某个与表格更新完全无关的应用程序事件时触发 BOD 生成操作,您可以通过编程方式使用“函数”触发器触发 BOD 更新。“复制类别”表单中指定的“函数”名称不需要对应于实际的存储过程,而且很可能事实上也是如此。实际上只会将一个参数传递到其中一个复制存储过程中,该参数会最终触发 BOD 生成。这个存储过程名为 RemoteMethodForReplicationTargetSp。您也可以从触发器、其他 SP 或 IDO 扩展分类中调用这个存储过程。
下面来说明上面提及的采购单触发器:用户运行“采购单报告”以创建一个新的采购单。作为所执行的逻辑的一部分,对存储过程 TriggerPurchaseOrderSyncSp 进行了远程方法调用,从而触发了 BOD 生成复制逻辑。
通过远程方法调用的存储过程,并不是数据库中的实际存储过程。此调用不一定传递参数。如果该调用确实传递了参数,则“复制文档”表单将按以下顺序引用这些参数,即 “P1” 引用第一个参数,“P2” 引用第二个参数,以此类推。以下代码片断显示由远程方法调用传递至 TriggerPurchaseOrderSyncSp 的两个参数:
EXEC @Severity = dbo.RemoteMethodForReplicationTargetsSp @IdoName = 'SL.ESBSLPos' , @MethodName = 'TriggerPurchaseOrderSyncSp' , @Infobar = @Infobar OUTPUT , @Parm1Value = @PoPoNum , @Parm2Value = @Infobar
- 在“复制类别”表单中,每个类别都包含复制系统特定区域时所需的所有表格和函数。名为 “ESB” 的类别包含所定义的全部远程方法调用,或者包含“复制文档”所引用的“对象名称”,这些名称用于需要 Infor BOD 格式 XML 的其他应用程序的集成点。例如,TriggerPurchaseOrderSyncSp 将在 ESB 类别中列出。
对于通用 XML 文档(也就是用于需要非 Infor BOD 格式 XML 的应用程序的文档),您将需要创建一个单独的复制类别并在其中包含相应的远程方法调用或对象名称。
- 如果本地站点和类别设为 ESB 的 Infor ESB 站点间存在“复制规则”,则无论何时,只要在本地站点发生有关集成点的业务事件或表格更改,系统就会在“复制”表中添加一个分录。
对于通用 XML 文档,您需要在本地站点和为该应用程序定义的站点之间创建一条复制规则。必须在被指定为使用 HTTP 传输协议的内联网中设置该站点。
- 复制器从复制表中提取行,并将其放到 MSMQ 中。
- ReplQListener 从 MSMQ 中提取行并决定这些行是为其他支持 BOD 的应用程序绑定的行。然后为业务事件或表更改生成 BOD。如上所述,这些参数由事件进行了传递。
在上面的示例 2 中,用户运行的“采购单报告”调用了 TriggerPurchaseOrderSyncSp 参数。因为定义此 Sp 的类别存在规则,所以系统将建立一个复制文档。该文档查找到一个 PurchaseOrder.Sync 复制对照参考,其中的“应用至”方法为 TriggerPurchaseOrderSyncSp,所以文档检索到 PurchaseOrder 复制文档模板并建立 BOD XML 文档,在此期间使用了“复制文档出站对照参考”表单以及“复制文档”、“复制文档元素”和“复制文档属性”表单中定义的元素和属性信息。
并且在此例中,采购单编号作为第一个参数 (P1) 传递。复制文档将该信息用于筛选器 (PoNum=FP(P1)),使得生成的 BOD 包含只用于指定采购单的数据。
- ReplQueueListener 将生成的 BOD XML 放在“复制文档发件箱”中。
通用 XML 文档不会到达发件箱,而是被发送到为非处理性复制定义的内联网 URL。