【问题标题】:ABAP Program to notify Users X amount of days before user account will be disabledABAP 程序在用户帐户被禁用前 X 天通知用户
【发布时间】:2019-03-04 20:08:53
【问题描述】:

我目前正在学习 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


【解决方案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.

每天运行这两个报告。

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

【讨论】:

  • 嘿弗洛里安,我设法让用户选择完美地工作 - 或者至少我希望它如何......不幸的是我在电子邮件部分苦苦挣扎......@ 987654321@ 我现在创建了一个表 IT_USERS 存储所有用户 SAP ID 和电子邮件地址(如果维护)。我现在正试图掌握能够向他们发送电子邮件并通过 SOST 进行验证的概念......
  • 有几个类允许发送电子邮件。 cl_sut_job_utilities=>send_emails 是我最近使用的那个。它实际上是 ABAP 单元测试框架(“sut”)的一部分,通常用于从夜间构建发送单元测试结果。
【解决方案2】:

来自 SAP wiki

增强概念允许您将自己的功能添加到 SAP 的标准业务应用程序中,而无需修改原始应用程序。要根据客户要求修改标准 SAP 行为,我们可以使用增强框架。

根据您的描述,这听起来不像是增强的用例。这不是对现有流程的干预。原始流程和您的新要求是两个不同的流程,具有一些相互的逻辑部分 - 选择用户不活动的天数。两者不应该相互依赖。

【讨论】:

    【解决方案3】:

    在结构上,我认为最好有一个单独的程序来计算需要发送哪些电子邮件以及何时发送,以及一个单独的程序来实际发送它们。

    我会将您的原始程序复制到一个新程序中,并对其进行一些修改,以便它不会禁用用户,而是为每个用户记录到某个表中:1)一封电子邮件 2)发送日期3) 还剩多少天(30、15、7 等) 4) 电子邮件是否已发送的状态。最初,您甚至可以为每个周期(30、15、7 等)拥有多个此类作业,并将其作为参数传递(您在内部使用而不是 90)。

    这个程序是你每天作为工作运行的,它会用今天需要发送的电子邮件“任务”填充该表。它只是添加了新行,所以昨天的行应该保留在那里。

    第二个程序应该只是读取该表并发送实际的电子邮件并更新状态。你也每天运行那个程序。

    这样你就有了:

    • 概述:只需查看表格即可了解情况
    • 控制:如果电子邮件死机或挂起,您可以重新启动它,它会从上次中断的地方继续;避免发送重复邮件的状态
    • 如果您在邮件脚本中忽略所有早于 2 天的任务,您可以确保不会发送过时的电子邮件

    【讨论】:

      【解决方案4】:

      我想澄清您对使用增强功能的困惑: 您可能希望在系统中发生或将要发生的“某事”方面使用增强功能,并且您希望更改这种标准方式。

      我们称之为事件或过程可以是例如下订单、某个用户正在登录系统或材料已经或将要更改。

      更改可能是通知另一个系统订单或使用其他检查(例如他的 GUI 版本)检查登录用户,如果不是最新的,则警告他/她。

      问问自己,程序或代码的执行依赖于系统上的哪个进程。在程序执行之前是否需要发生任何事情?不,只是经过的时间。

      即使您找到了增强功能,您也想使用。如果使用增强功能的这个过程在 90 天内没有运行,您的邮件将不会被发送,因为增强功能永远不会被调用。

      编辑:话虽如此,假设您的意思是增强“基于现有程序”而不是“创建新程序”,这绝对不是 sap 世界中增强的正确术语。

      我会扩展您现有程序的功能,因为您已经计算出还剩多少天,而您只需维护一项工作。

      【讨论】:

        猜你喜欢
        • 2016-05-03
        • 2017-06-15
        • 1970-01-01
        • 1970-01-01
        • 2022-10-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-15
        相关资源
        最近更新 更多