2

我创建了一个集成流,它每小时查询一个数据库并将结果插入到 SAP HANA 数据库中。我在 SAP HANA 中复制的初始数据库表有一个字段,其中包含更改每个条目数据的时间戳。为了提高性能,我不想每次都选择原始数据库中的每个条目,而是想发送一个查询以仅检索在过去一小时内更改或创建的条目的结果。为此,我需要 iFlow 之外的一个变量,我可以调用该变量并使用 iFlow 上次运行时间的时间戳进行更新,并在查询中使用它。

iFlow 启动事件是设置为每小时运行的计时器启动事件,我尝试使用“写入变量”块存储此变量并将其设置为全局范围。但是当集成流程结束并在一小时后运行时,它会重置此变量。

我如何做到这一点的更好方法?

谢谢你。

4

1 回答 1

4

对于大多数 IFlow,Local 范围更可取。仅当多个 IFlow 必须访问一个变量时才需要全局范围。

以下是我的建议:

  • 将所有必需的功能组合到子流程中——以多种方式重用您的任务很方便(添加其他启动事件)。因此,将 Timer 事件放入顶层集成流程并调用所需的子流程:定时器示例

  • 要获取 lastRun(上一次运行的日期时间)和 thisRun(当​​前日期时间),请使用以下内容: 内容修饰符 良好的格式是 ${date:now:yyyy-MM-dd'T'HH:mm:ss.SSSXXX},它是符合 ISO8601 的.

  • 对于写入变量步骤“[3] lastRun”,请使用: 将 thisRun 写入 lastRun

您可以在 DataStore 查看器中管理 lastRun 变量:数据存储查看器

不要混淆 sap_global_store 标签,它不是全局变量可见级别。

“thisRun”变量不是进程开始的精确日期时间。真正的一个是 msg.properties.CamelCreatedTimestamp,但 CamelCreatedTimestamp 需要一些小脚本功夫。

于 2017-10-18T16:01:22.503 回答