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.

  • Для шага записи переменной "[3] lastRun" используйте это: Запишите этот запуск в последний запуск

Вы можете управлять переменной lastRun в средстве просмотра DataStore: Просмотр хранилища данных

Не путайте ярлык sap_global_store, это не уровень видимости глобальной переменной.

Переменная thisRun не является точной датой начала процесса. Реальный - msg.properties.CamelCreatedTimestamp, но CamelCreatedTimestamp требует небольшого количества сценариев кунг-фу.

Другие вопросы по тегам