首页 > 解决方案 > ABAP 程序在用户帐户被禁用前 X 天通知用户

问题描述

我目前正在学习 ABAP 并尝试进行增强,但对如何在现有代码之上进行构建感到困惑。我有一个程序通过后台作业定期运行,该作业禁用用户帐户 X 天(在本例中,基于 USR02~TRDAT 的非活动使用天数为 90 天)。

我想添加一个增强功能以​​通过他们的电子邮件地址通知用户(结果 usr02~bname 与 usr21~bname 匹配以将 usr21~persnumber 和 usr21~addrnumber 传递给 adr6,这将指向用户的 adr6~smtp_addr,提供usr02~bname -> adr6~smtp_addr 关系)基于他们的最后一次登录日期是距离 90 天不活动阈值还有 30、15、7、5、3 和 1 天,并带有指向 SAP 系统的链接以帮助他们重新激活轻松记账。

我开始认为增强可能不是一个好主意,而是创建一个新程序并每天安排后台作业。任何指导或信息将不胜感激......

标签: abap

解决方案


提炼

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.

并每天运行这两个报告。

不要通过将新功能挤入现有代码中来制造大泥球。


推荐阅读