Программа ABAP для уведомления пользователей за X дней до отключения учетной записи пользователя

#abap

#abap

Вопрос:

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

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

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

Комментарии:

1. Куда вы пытаетесь поместить улучшение?

Ответ №1:

Извлечь

 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.
  

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

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

Комментарии:

1. Эй, Флориан, мне удалось заставить пользовательский выбор работать идеально — или, по крайней мере, так, как мне бы хотелось… К сожалению, у меня проблемы с электронной почтой … pastebin.com/JfdCJCdb Теперь у меня есть таблица, созданная IT_USERS, в которой хранятся идентификаторы всех пользователей SAP и адреса электронной почты (если они поддерживаются). Сейчас я пытаюсь понять концепцию возможности отправлять им электронные письма и проверять их через SOST…

2. Существует пара классов, которые позволяют отправлять электронные письма. cl_sut_job_utilities=>send_emails это та, которую я недавно использовал. На самом деле это часть фрейма модульного тестирования ABAP («sut») и обычно используется для отправки результатов модульного тестирования из ночных сборок.

Ответ №2:

Из SAP wiki:

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

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

Ответ №3:

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

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

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

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

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

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

Ответ №4:

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

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

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

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

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

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

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