3

在SAP S/4HANA Cloud中通过自定义逻辑实现审批中的采购订单不可更改

 1 year ago
source link: https://blogs.sap.com/2022/10/21/%e5%9c%a8sap-s-4hana-cloud%e4%b8%ad%e9%80%9a%e8%bf%87%e8%87%aa%e5%ae%9a%e4%b9%89%e9%80%bb%e8%be%91%e5%ae%9e%e7%8e%b0%e5%ae%a1%e6%89%b9%e4%b8%ad%e7%9a%84%e9%87%87%e8%b4%ad%e8%ae%a2%e5%8d%95%e4%b8%8d/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
October 21, 2022

在SAP S/4HANA Cloud中通过自定义逻辑实现审批中的采购订单不可更改

问题背景:

有客户提出需求,采购订单在触发审批后,如果在审批中的状态,希望采购订单不可被更改。

解决方案:

尝试通过自定义逻辑,写一个 Badi 来满足需求。

分析步骤:

1.首先,我们需要在 SAP S/4HANA Cloud 系统的应用 – 自定义逻辑里,新增增强实施。根据业务场景,选择下图中的业务上下文以及业务加载项描述,填写好实施描述以及实施标识

%u65B0%u589E%u589E%u5F3A%u63AA%u65BD

新增增强措施

2.在自定义逻辑新增增强实施完成后,我们需要找到一个字段来获取采购订单的审批状态,需要在CDS Views里找到这样的一个字段。I_PurchaseOrderAPI01 这个 CDS View 包含了采购订单的基本信息。根据字段描述,有两个字段可以帮助我们检查采购订单的审批状态。分别是 ReleaseIsNotCompleted PurchasingProcessingStatus

ReleaseIsNotCompleted 字段用来表示“审批尚未完全生效”,有两种情况,为空或者为“X”。但前者表示的情况包括订单未审批、审批完成,后者表示的情况包括订单审批中、审批不通过等。所以单独使用这个字段无法判断订单是否处于审批中。 PurchasingProcessingStatus 字段表示“采购凭证处理状态”,类型为 CHAR ,长度为2,通过一个两位的状态码来标识采购订单。标识码有如下几种:

02未审批

03审批中

05审批完成

08审批不通过

因此,我们可以在 Badi 里使用 PurchasingProcessingStatus 字段来获取采购订单的审批状态,实现需求。

3.根据以上分析过程,实现 Badi ,具体代码如下。

if purchaseorder-purchasingprocessingstatus is not initial or purchaseorder-purchasingprocessingstatus is initial.
  select single * from I_PurchaseOrderAPI01 with privileged access
    where purchaseorder = @purchaseorder-purchaseorder
    into @data(Is_status_approval) .
  if Is_status_approval-purchasingprocessingstatus EQ '03'.
    append value #(  messagetype = 'E' messagevariable1 = '正在审批中,无法更改。' ) to messages.
  endif.
endif.

4.尝试编辑一个处于审批中状态的订单,进入编辑后,左下角会显示一条错误信息,无法对该订单的修改进行保存。

2-35.png

结语

如果您对本文有任何的建议和想法,欢迎在评论区提出,期待与您一起交流。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK