SAP HCI PI - Как сохранить редактируемую переменную вне потока интеграции?
Я создал поток интеграции, который запрашивает базу данных и каждый час передает результаты в базу данных SAP HANA. В исходной таблице базы данных, которую я реплицирую в SAP HANA, есть поле с отметкой времени, в которую были изменены данные каждой записи. Чтобы повысить производительность, вместо выбора каждой записи в исходной базе данных каждый раз я хочу отправить запрос, чтобы получить результаты только тех записей, которые были изменены или созданы за последний час. Для этого мне нужна переменная вне iFlow, которую я могу вызвать и обновить с отметкой времени, когда iFlow запускался в последний раз, и использовать ее в запросе.
Событие запуска iFlow - это событие запуска таймера, настроенное на ежечасное выполнение, и я попытался сохранить эту переменную с помощью блока "Запись переменных" и установить для него значение Global Scope. Но когда потоки интеграции заканчиваются и запускаются через час, они сбрасывают эту переменную.
Как мне лучше это сделать?
Спасибо.
1 ответ
Для большинства IFlow локальная область является предпочтительной. Глобальная область нужна только для случаев, когда более чем один IFlow должен иметь доступ к одной переменной.
Вот мой совет:
Объедините всю необходимую функциональность в подпроцесс - удобно многократно использовать вашу задачу (добавляя другие стартовые события). Итак, поместите событие Timer в процесс интеграции верхнего уровня и вызовите необходимые подпроцессы:
Для получения lastRun (dateTime предыдущего запуска) и thisRun (текущее datetime) используйте следующее: Хороший формат: ${date:now:yyyy-MM-dd'T'HH:mm:ss.SSSXXX}, соответствует ISO8601.
Вы можете управлять переменной lastRun в средстве просмотра DataStore:
Не путайте ярлык sap_global_store, это не уровень видимости глобальной переменной.
Переменная thisRun не является точной датой начала процесса. Реальный - msg.properties.CamelCreatedTimestamp, но CamelCreatedTimestamp требует небольшого количества сценариев кунг-фу.