abap - 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 系统的链接以帮助他们重新激活轻松记账。
我开始认为增强可能不是一个好主意,而是创建一个新程序并每天安排后台作业。任何指导或信息将不胜感激......
解决方案
提炼
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.
并每天运行这两个报告。
不要通过将新功能挤入现有代码中来制造大泥球。
推荐阅读
- docker - Docker IPv6 多个服务在不同容器中的同一端口上
- coordinates - 在 godot 3d 中获取节点位置的最佳方法
- ios - atos 符号化只显示另一个地址
- php - 用刷新的数据在 div 中提交第二个表单
- android - 动态改变 ListView 项目大小 kotlin
- excel - VBA复制行 - >粘贴行与列+1
- google-sheets - 列数据添加到另一个工作表作为行数据与选定的信息
- azure-devops - Azure DevOps - CI Build 在没有提交时随机启动并失败 [GitLab Repo/Other Git]
- javascript - 在 Javascript 中,如何从另一个 javascript 文件中导入数组?
- javafx - 窗格上的 javafx 事件传播