我目前正在学习ABAP并试图进行增强,但对如何在现有代码之上进行构建时感到困惑。我有一个通过后台作业定期运行的程序,该程序可以禁用用户帐户x的数量(在这种情况下,基于USR02〜TRDAT的非活动用法90天)。
我想添加一个增强功能以通过其电子邮件地址通知用户(usr02〜bname的结果匹配usr21〜bname以通过usr21〜persnumber和usr21〜 addrnumber to adr6将指向ADR6〜SMTP_ADDR用户,提供usr02〜bname-> adr6〜smtp_addr关系),基于他们的上次登录日期为30、15、7、5、3和1天,距90天的不活动阈值,并链接到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.
每天运行两个报告。
不要通过将新功能挤入现有代码中来创建大泥球。
来自SAP Wiki:
增强概念使您可以在SAP的标准业务应用程序中添加自己的功能,而不必修改原始应用程序。为了根据客户要求修改标准SAP行为,我们可以使用增强框架。
根据您的描述,听起来不像是用于增强的用例。这不是对现有过程的干预。原始过程和您的新要求是两个不同的过程,其中有一定的逻辑部分 - 选择用户的不活动的天数。两者不应该互相依靠。
在结构上我认为最好有一个单独的程序来计算哪些电子邮件需要发送电子邮件,以及何时以及一个单独的程序来实际发送它们。
我会将您的原始程序复制到新程序,然后对其进行修改,以便将用户录制到每个用户的某个表中:1)电子邮件2)何时发送日期3)剩下多少天(30、15、7等)4)状态,如果发送了是否发送电子邮件。最初,您甚至可以在每个时期(30、15、7等)都有多个这样的工作,并将其作为参数(您在内部使用而不是90)。
。您每天作为一项工作运行的程序,并用电子邮件"任务"填充该表格,以发送今天需要发送的内容。它只是添加了新线条,所以昨天的线应该留在那里。
第二个程序应只读取该表并发送实际电子邮件并更新状态。您也每天运行该程序。
这样您就可以:
- 概述:只需检查表即可查看正在发生的事情
- 控制:如果电子邮件死亡或悬挂,您可以重新启动它,并且它将继续在其旁边的地方继续;您避免发送重复邮件的状态
- 如果您在邮件脚本中忽略了所有比2天 的任务,则可以确保您不会发送过时的电子邮件
我想澄清您对使用增强功能的困惑:您将需要根据"某事"发生或将在系统中发生增强功能,并且您想更改此标准方式。
某件事,让我们称之为事件或过程可能是下达订单,某个用户正在登录系统或将要更改材料。
更改可以通知另一个系统的订单或检查用户登录的用户其他支票,例如他的GUI版本,并警告他/她(如果不是最新的)。
问问自己,系统或代码执行系统的哪个过程取决于。执行程序之前需要发生什么吗?不,只有时间。
即使您找到了增强功能,也希望使用。如果使用增强的过程在90天内不会运行,则不会发送您的邮件,因为增强功能永远不会被调用。
edit :话虽如此,假设您是通过增强"在现有程序上构建"而不是"创建新的"而表示的意思,这绝对不是在SAP宇宙中增强的正确术语。
我将扩展您现有程序的功能,因为您已经计算了剩余的几天,并且您只能维护一项工作。