1、文档说明

1.1、内容回顾

之前发表过相关文章《VA01/VA02/VA03 销售订单根据定价和步骤校验权限隐藏价格》,本篇文章对上一篇文章做补充说明。

第一篇文章是通过拥有权限,则隐藏价格的模式,即对需要隐藏价格的用户,配置权限对象,使其通过权限校验,然后隐藏价格;没有配置权限对象的用户,权限校验不通过,则不隐藏价格。

1.2、问题说明

此处存在两个问题:(如果项目忽略这两个问题,则还可以参照第一篇文章的方式实现)

1.对于自定义权限对象,如果将其添加到SAP_ALL中,会导致拥有SAP_ALL权限的用户,也校验通过,并且看不到价格。(主要问题)

2.该方法较反常规,属于拥有权限,但是不能查看价格的反向控制(当然这点不是关键问题)

因此,在实际项目中,为了防止正式机拥有ALL权限的用户无法查看价格,则实施没有权限,隐藏价格,有权限,则查看价格的方式,如此也更能符合思维习惯。

2、实现方式

2.1、权限分配

可以查看所有价格的用户,配置定价过程字段为ZK01,配置步骤编号字段为 *

只能查看部分价格的用户,配置定价过程字段为ZK01,配置步骤编号字段为401 - 800,0-400步骤编号的价格则看不到

2.2、仅修改权限判断(存在问题)

想要实现没有权限,则隐藏价格,可能直接更改权限的IF判断就可以实现,本来是IF = 0(有权限)隐藏,更改为IF <> 0(无权限)隐藏。

2.2.1、存在的问题

在原文中,关于条件页签里面的价格控制可以这么实现,但是对于抬头和条件页签上部的这几个价格字段(步骤编号属于0-400)的控制,是只校验了定价过程,

因为此增强点处没有步骤编号字段,按照原逻辑,此处校验成功了,就可以隐藏价格了。

但是改成当前逻辑,校验成功了,就可以显示价格了,那么只要配置定价过程的用户,就都可以看到,其中也包括配置了定价过程但限制查看价格的用户

因此,只修改IF判断,抬头价格控制不住。

2.3、根据用户权限值判断

针对以上两处增强点的修改,通过用户权限值进行判断,因为只会存在两种情况:

1.用户维护了定价过程ZK01,步骤编号为*

2.用户维护了定价过程ZK01,步骤编号为401-800

所以只用判断步骤编号是*,则抬头这些价格要显示。如果是范围值,则肯定不显示。

2.3.1、获取用户维护的权限对象值

通过函数GET_AUTH_VALUES获取当前用户已经配置的权限对象Z_KONH_KLS维护的值

"--------------------@斌将军--------------------
"获取用户权限对象的值
CALL FUNCTION 'GET_AUTH_VALUES'
EXPORTING
object1 = 'Z_KONH_KLS'
user = sy-uname
tcode = sy-tcode
* optimize =
TABLES
values = gt_us335
EXCEPTIONS
user_doesnt_exist = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
"--------------------@斌将军--------------------

2.3.2、参考代码

因为这些增强点是会反复调用,所以定义全局内表gt_us335,如果已经获取过权限值,就不再重复获取,提高代码效率

程序MV45AFZZ→USEREXIT_FIELD_MODIFICATION

"--------------------@斌将军--------------------
FORM userexit_field_modification.
ENHANCEMENT 1 ZSD007_VA01_PRICE. "active version
IF sy-tcode = 'VA01' OR sy-tcode = 'VA02' OR sy-tcode = 'VA03'.
IF screen-name = 'KOMV-KBETR'
OR screen-name = 'VBAK-NETWR'"抬头 净值
OR screen-name = 'VBAK-WAERK'"抬头 货币
OR screen-name = 'VBAP-NETPR'"项目 净价
OR screen-name = 'VBAP-NETWR'."项目 净值 IF gt_us335 IS INITIAL.
"获取用户权限对象的值
CALL FUNCTION 'GET_AUTH_VALUES'
EXPORTING
object1 = 'Z_KONH_KLS'
user = sy-uname
tcode = sy-tcode
* optimize =
TABLES
values = gt_us335
EXCEPTIONS
user_doesnt_exist = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF. SORT gt_us335 BY object field lowval highval.
DELETE ADJACENT DUPLICATES FROM gt_us335 COMPARING object field lowval highval.
"抛内存到LV69AF01
FREE zcl_sd_memory_id=>sd005.
CLEAR:gv_sd007_hide_price.
READ TABLE gt_us335 WITH KEY field = 'ZSTUNR' lowval = '*' TRANSPORTING NO FIELDS.
IF sy-subrc NE 0.
gv_sd007_hide_price = 'X'."不显示
EXPORT gv_sd007_hide_price TO MEMORY ID zcl_sd_memory_id=>sd005.
ENDIF.
ENDIF. IF gv_sd007_hide_price = 'X'.
screen-active = 0.
MODIFY SCREEN.
ENDIF.
ENDIF.
ENDIF.
ENDENHANCEMENT.
"--------------------@斌将军--------------------

程序LV69AF01→TCTRL_KONDITIONEN_INIT

"--------------------@斌将军--------------------
FORM tctrl_konditionen_init.
DATA: da_tfill LIKE sy-tabix. * Refresh table control if screen number has changed
STATICS: last_dynnr TYPE dynnr.
IF sy-dynnr NE last_dynnr AND gf_called_by_lord IS INITIAL.
last_dynnr = sy-dynnr.
REFRESH CONTROL 'tctrl_konditionen' FROM SCREEN sy-dynnr.
ENDIF. DESCRIBE TABLE xkomv LINES da_tfill. ...... """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"$\SE:(1)
*$*$-Start: (1)---------------------------------------------------------------------------------$*$*
ENHANCEMENT 6 ZSD007_SALES_PRICE. "active version
IF sy-tcode = 'VA01' OR sy-tcode = 'VA02' OR sy-tcode = 'VA03'.
DATA:gv_sd007_hide_price TYPE char1."X 不显示
LOOP AT SCREEN.
IF screen-name = 'KOMP-NETWR' "净值
OR screen-name = 'KOMK-WAERK' "货币
OR screen-name = 'KOMP-MWSBP'. "税收.
IMPORT gv_sd007_hide_price FROM MEMORY ID zcl_sd_memory_id=>sd005.
IF gv_sd007_hide_price = 'X'."不显示
screen-active = 0.
MODIFY SCREEN.
ENDIF.
ENDIF.
ENDLOOP.
ENDIF.
ENDENHANCEMENT.
ENDFORM. "tctrl_konditionen_init
"--------------------@斌将军--------------------

​条件页签列表里面的价格控制,和第一篇文章的一致,只用更改权限的IF判断即可,此处不再赘述

到此,通过权限配置,正向控制隐藏部分价格的增强就完成了

定期更文,欢迎关注

VA01/VA02/VA03 销售订单根据定价和步骤校验权限隐藏价格(二)的更多相关文章

  1. 【ABAP系列】SAP VA02修改销售订单的BAPI举例

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP VA02修改销售订单的B ...

  2. VA01销售订单批导问题解决

    1业务场景 事务代码:VA01创建销售订单,VA02修改销售订单 可以通过BAPI_SALESORDER_CREATEFROMDAT2批量创建 可以通过BAPI_SALESORDER_CHANGE批量 ...

  3. SAP IDOC 通过采购订单输出消息生成销售订单

    题记: 在网络上看到一篇类似的公众号文章,叫<通过IDoc逐步指导PO&SO集成>,个人觉得整个配置过程中还是少了一些重点配置,也少了说明整个功能的核心逻辑,那么,趁着这个机会,就 ...

  4. [SAP ABAP开发技术总结]SD销售订单定价过程

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  5. 销售订单-修改量-高级定价关联sql

    修改量消耗明细 --修改量消耗明细 SELECT t.name, t.comments, t.version_no, cux_rebate_pub.get_hou_name(p_organizatio ...

  6. SAP SD VA01 销售订单中的自动价格更新

    场景 :当用户使用假定物料" A"创建销售订单时,确定了价格,但随后用户意识到需要更改物料,因此他们更改了订单中的物料. 现在,它显示价格已经重新确定,但是在项目条件页面中时,他们 ...

  7. MV45AFZZ 销售订单的增强

    ***INCLUDE MV45AFZZ . *---------------------------------------------------------------------* * FORM ...

  8. 转载]SAP囚徒 - 通过销售订单领用到成本中心,FI替代

    转载]SAP囚徒 - 通过销售订单领用到成本中心,FI替代   原文地址:SAP囚徒 - 通过销售订单领用到成本中心,FI替代实现不同成本中心记账科目不同作者:SAP囚徒 物品领用通常是库存管理的范畴 ...

  9. SAP 销售订单中采购标识无法修改

    VA03中的销售订单第四个物料没有ZA选项, 错误提示:计划行类别ZA未定义 原因: MM03中的 MRP2---采购类型未被定义

  10. crm操作销售订单实体

    using System;     using Microsoft.Xrm.Sdk;     using Microsoft.Xrm.Sdk.Query;     using Microsoft.Cr ...

随机推荐

  1. 解密Linux中的通用块层:加速存储系统,提升系统性能

    通用块层 通用块层是Linux中的一个重要组件,用于管理不同块设备的统一接口,减少不同块设备的差异带来的影响.它位于文件系统和磁盘驱动之间,类似于Java中的适配器模式,让我们无需关注底层实现,只需提 ...

  2. Android 编译介绍

    一.需求 Android的源码非常的庞大,编译Android系统往往会占用我们很长的时间,我们需要了解下Android的编译规则,以期能提高我们的开发效率,达到程序员按时下班的伟大理想. 二.环境 平 ...

  3. vi命令使用详解

    vi命令使用详解 1. 三种工作模式 命令模式:通过命令对文件进行常规操作 打开文件时进入命令模式 (vi的入口) 通过命令对文件进行常规操作,如定位.翻页.复制.粘贴.删除等在图形界面下通过鼠标或快 ...

  4. Oracle CloudWorld 2022 - 使用Oracle MAA实现应用程序的连续可用性

    每每谈到Oracle MAA,大家条件反射般就会想到Oracle的RAC和ADG等核心选件,当然,这些技术有口皆碑,也的确是MAA的构建基础,但本文我们不再过多谈这些耳熟能详的技术,而是来跟大家探讨下 ...

  5. golang Context应用举例

    Context本质 golang标准库里Context实际上是一个接口(即一种编程规范. 一种约定). type Context interface { Deadline() (deadline ti ...

  6. Unity - UIWidgets 2. 控件组合

    UIWidgets没有提供完整文档, 称可以去看Flutter的文档 中文 \ 英文 控件(Control)在Flutter中称为"Widget", 一个界面的若干控件是通过wid ...

  7. 字符串匹配|kmp笔记

    很久之前学的了. 我很懒,不太喜欢画图. 做个笔记回忆一下: kmp 朴素比对字符串 所谓字符串匹配,是这样一种问题:"字符串 T 是否为字符串 S 的子串?如果是,它出现在 S 的哪些位置 ...

  8. 创建CI/CD流水线中的IaC前,需要考虑哪些事项?

    许多软件工程团队通常会遵循相似的方法来交付基础设施以支持软件开发生命周期.为了缩小基础设施配置方式与应用程序环境部署方式之间的差距,许多 DevOps 团队将其基础设施即代码(IaC)模块直接连接到其 ...

  9. 周藤 CSP-2023游记

    Day -inf~Day -2 基本上是考试状态,每天我都是自己取随机题目做,不过也保证了落实量 每场模拟赛发挥基本上是不是特别稳定,考得好的时候AK了,考不好的时候只有300分,反正同届差不多第一吧 ...

  10. k8s-1.23.6 安装部署文档(超详细)

    一.文档简介 作者:lanjiaxuan 邮箱:lanheader@163.com 博客地址:https://www.cnblogs.com/lanheader/ 更新时间:2022-09-09 二. ...