Программа ABAP, чтобы уведомить пользователей X количество дней, прежде чем учетная запись пользователя будет отключена - PullRequest
0 голосов
/ 04 марта 2019

В настоящее время я изучаю ABAP и пытаюсь сделать усовершенствование, но не могу понять, как строить поверх существующего кода.У меня есть программа, которая периодически запускается через фоновое задание, которое отключает учетные записи пользователей X количество дней (в этом случае 90 дней неактивного использования на основе USR02 ~ TRDAT).

Я хочу добавить усовершенствование для уведомления пользователя по его адресу электронной почты (результат использования usr02 ~ bname для совпадения с usr21 ~ bname для передачи usr21 ~ persnumber и usr21 ~ addrnumber в adr6, который будет указывать на adr6 ~smtp_addr пользователя, предоставляющий отношение usr02 ~ bname -> adr6 ~ smtp_addr) на основе даты последнего входа в систему: 30, 15, 7, 5, 3 и 1 день от порога неактивности 90 дней со ссылкой на SAPсистема, чтобы помочь им восстановить аккаунт с легкостью.

Я начинаю думать, что улучшение может быть не очень хорошей идеей, а скорее создавать новую программу и ежедневно планировать фоновую работу.Любое руководство или информация будет принята с благодарностью ...

Ответы [ 4 ]

0 голосов
/ 05 марта 2019

Я хочу прояснить вашу путаницу в отношении использования улучшений: вы хотели бы использовать улучшения в терминах «что-то» происходит или должно происходить в системе, и вы хотели бы изменить этот стандартный способ.

Что-то, назовем это событием или процессом, может быть, например, заказ размещен, какой-то пользователь входит в систему или материал был или будет изменен.

Изменением может быть уведомление другой системы о заказе или проверка вошедшего в систему пользователя с помощью дополнительных проверок, например, его версии GUI, и предупреждение его / ее, если не актуально.

Спроситьсами, от какого процесса в системе зависит выполнение вашей программы или кода.Должно ли что-то происходить до запуска программы?Нет, только по прошествии времени.

Даже если вы нашли улучшение, вы бы хотели использовать.Если этот процесс, использующий расширение, не будет запущен через 90 дней, ваши письма не будут отправлены, поскольку расширение никогда не будет вызвано.

edit : При этом подразумевается, что вы имеете в видуРасширение «построение на существующей программе» вместо «создания новой» было бы абсолютно неправильной терминологией для улучшения во вселенной sap.

Я бы расширил функциональность вашей существующей программы, так как вы ужепосчитайте, сколько дней осталось, и у вас останется только одна работа.

0 голосов
/ 05 марта 2019

Конструктивно я думаю, что лучше иметь отдельную программу для вычисления того, какие электронные письма нужно отправлять и когда, и отдельную программу для их фактической отправки.

Я бы скопировал вашу оригинальную программу вновый, и немного измените его так, чтобы вместо отключения пользователя он записывал в какую-то таблицу для каждого пользователя: 1) электронное письмо 2) дату отправки 3) сколько осталось дней (30, 15,7 и т. Д.) 4) статус, если электронное письмо было отправлено или нет.Первоначально вы можете даже создать несколько таких заданий для каждого периода (30, 15, 7 и т. Д.) И передать его в качестве параметра (который вы используете вместо 90).

Эта программа, которую вы ежедневно запускаете как задание ион заполняет эту таблицу «задачами» по электронной почте о том, что нужно отправить сегодня.Он просто добавляет новые строки, поэтому строки со вчерашнего дня должны оставаться там.

2-ая программа должна просто прочитать эту таблицу и отправить реальные электронные письма и обновить статусы.Вы также запускаете эту программу ежедневно.

Таким образом, у вас есть:

  • обзор: просто проверьте таблицу, чтобы увидеть, что происходит
  • control: если e-почтальщик умирает или зависает, вы можете перезапустить его, и он продолжит с того места, где остановился;со статусами вы избегаете отправки дублирующих писем
  • вы можете быть уверены, что не отправляете устаревшие электронные письма, если в своем почтовом скрипте вы игнорируете все задачи старше, чем, скажем, 2 дня
0 голосов
/ 05 марта 2019

Извлечение

CLASS cl_inactive_users_reader DEFINITION.
  PUBLIC SECTION.
    TYPES:
      BEGIN OF ts_inactive_user,
        user_name          TYPE syst_uname,
        days_of_inactivity TYPE int1,
      END OF ts_inactive_user.
    TYPES tt_inactive_users TYPE STANDARD TABLE OF ts_inactive_user WITH EMPTY KEY.
    CLASS-METHODS read_inactive_users
      IMPORTING
        min_days_of_inactivity TYPE int1
      RETURNING
        VALUE(result)          TYPE tt_inactive_users.
ENDCLASS.

Затем рефакторинг

REPORT block_inactive_users.

DATA(inactive_users) = cl_inactive_users_readers=>read_inactive_users( 90 ).
LOOP AT inactive_users INTO DATA(inactive_user).
  " block user
ENDLOOP.

И добавление

REPORT warn_inactive_users.

DATA(inactive_users) = cl_inactive_users_readers=>read_inactive_users( 60 ).
LOOP AT inactive_users INTO DATA(inactive_user).
  CASE inactive_user-days_of_inactivity.
    " choose urgency
  ENDCASE.
  " send e-mail
ENDLOOP.

и запуск обоих отчетов ежедневно.

Несоздать большой шарик грязи, втиснув новые функции в существующий код.

0 голосов
/ 04 марта 2019

Из SAP вики :

Концепция расширения позволяет добавлять собственные функции в стандартные бизнес-приложения SAP без необходимости изменения исходных приложений.Чтобы изменить стандартное поведение SAP в соответствии с требованиями клиента, мы можем использовать инфраструктуру расширения.

Согласно вашему описанию, это не похоже на вариант использования для расширения.Это не вмешательство в существующий процесс.Исходный процесс и ваше новое требование - это два разных процесса с некоторой взаимной логической частью - выбором дней бездействия пользователей.Они не должны полагаться друг на друга.

...