什么是 SAP CRM Attachment 创建的 Internal mode

简介: 什么是 SAP CRM Attachment 创建的 Internal mode

我近日工作中,使用 SAP CRM Attachment API,创建 attachment 实例时,遇到了一个问题:

ls_prop-name = 'DESCRIPTION'.
  ls_prop-value = 'created by Tool'.
  APPEND ls_prop TO lt_prop.
  ls_prop-name = 'CREATED_BY'.
  ls_prop-value = XXX - some one else other than sy-uname
  APPEND ls_prop TO lt_prop.
  CALL METHOD cl_crm_documents=>create_with_table
      EXPORTING
        business_object     = ls_bo
        properties          = lt_pro
        properties_attr     = lt_properties_attr
        file_access_info    = lt_file_info
        file_content_binary = lt_file_content
        raw_mode            = 'X'
      IMPORTING
        loio                = ls_loio
        phio                = ls_phio
        error               = ls_error.

执行上述代码后,遇到了一个错误消息:

Characteristic of class CRM_L_DOC is not valid

该错误消息对应的 message class 为 SKWF_SDOKERRS, id 为 030, 错误参数为 CRM_L_DOC:

单步调试进去,发现这是因为如果内部模式处于非活动状态(inactive),内容管理代码将“CREATED_BY”字段视为只读(受保护字段)。

使用 where use list, 查找所有使用了 internal_mode 的代码,然后发现下面这个 Function Module SDOK_INTERNAL_MODE_ACCESS 可以开启 internal mode:

需要传递 02 参数进去,02 参数代表 Internal Mode Active, 这个值定义在 ABAP Domain SDOK_INTRN 上:

在我的程序中调用该 FM 后,错误消失,并且可以创建附件。

值得一提的是,我仍然无法指定 created_by 字段,我发现它总是在第298行填充为 sy-uname.

sy-uname 在 SAP ABAP 编程语言中是一个系统变量,用于获取当前用户的用户名。它是系统提供的一种便捷方式,能够帮助开发人员在编写代码时获取当前用户的信息,以便根据不同用户的需求执行不同的逻辑或提供个性化的功能。

在 ABAP 中,sy-uname 变量可以被用于访问当前登录用户的用户名。这在很多场景下都是非常有用的,比如在开发涉及权限管理的应用程序时,可以根据不同的用户来限制其对特定数据或功能的访问权限。同时,在系统日志记录、审计跟踪等功能中,也经常需要记录下当前操作是由哪个用户执行的,这时候就可以使用 sy-uname 来获取用户名信息。

举例来说,假设我们正在开发一个销售订单管理系统,在这个系统中,不同的销售代表可能有不同的权限,比如一些高级销售代表能够修改订单价格,而一些普通销售代表只能查看订单信息而不能修改。在这种情况下,我们可以使用 sy-uname 来获取当前用户的用户名,然后根据用户名来判断该用户的权限级别,从而控制其对订单的操作权限。

DATA: lv_username TYPE sy-uname.
" 获取当前用户的用户名
lv_username = sy-uname.
" 根据用户名来判断用户权限
IF lv_username = 'ADMIN'.
  " 管理员权限,可以修改订单价格
  MODIFY sales_order SET price = 100 WHERE order_id = '123'.
ELSEIF lv_username = 'SALES1'.
  " 普通销售代表权限,只能查看订单信息
  SELECT * FROM sales_order INTO TABLE @DATA(lt_sales_order) WHERE sales_rep = lv_username.
  " 显示订单信息
  LOOP AT lt_sales_order INTO DATA(ls_sales_order).
    WRITE: / ls_sales_order-order_id, ls_sales_order-customer_name, ls_sales_order-order_amount.
  ENDLOOP.
ELSE.
  " 其他用户,无权限操作
  WRITE: / '您无权操作订单信息。'.
ENDIF.

在上面的例子中,我们首先使用 sy-uname 获取当前用户的用户名,然后根据不同的用户名来判断用户的权限级别,最后根据权限级别执行相应的操作。这样就能够根据不同用户的需求来提供个性化的功能和权限控制,提高系统的安全性和灵活性。

相关文章
|
23天前
|
人工智能 搜索推荐 Serverless
使用金庸的著作,来测试阿里通义千问最新开放的长文档处理功能
使用金庸的著作,来测试阿里通义千问最新开放的长文档处理功能
52 7
使用金庸的著作,来测试阿里通义千问最新开放的长文档处理功能
|
1月前
|
中间件
什么是 SAP CRM 系统里的 Initial Download
什么是 SAP CRM 系统里的 Initial Download
23 0
|
19天前
|
存储
使用 ABAP 代码打印出 SAP CRM 系统里所有维护了 Sales Area 的 business partner id
使用 ABAP 代码打印出 SAP CRM 系统里所有维护了 Sales Area 的 business partner id
19 0
|
23天前
|
数据库
SAP CRM产品主数据无法根据产品描述字段进行搜索的原因
SAP CRM产品主数据无法根据产品描述字段进行搜索的原因
16 5
|
23天前
|
Web App开发 开发者 存储
介绍一个 webp 格式转 png 格式的软件:XNConvert
介绍一个 webp 格式转 png 格式的软件:XNConvert
25 6
介绍一个 webp 格式转 png 格式的软件:XNConvert
|
23天前
什么是 SAP ABAP 里的 Subscreen
什么是 SAP ABAP 里的 Subscreen
16 1
什么是 SAP ABAP 里的 Subscreen
|
1月前
|
中间件
如何在 SAP CRM 系统调试 Product Initial Download
如何在 SAP CRM 系统调试 Product Initial Download
15 0
|
1月前
|
中间件
什么是 SAP CRM Initial Download
什么是 SAP CRM Initial Download
20 0
|
1月前
|
存储 数据管理 数据处理
SAP CRM 里 Attachment 搜索的实现逻辑介绍
SAP CRM 里 Attachment 搜索的实现逻辑介绍
21 0
|
2月前
|
存储 数据库 容器
深入介绍 SAP CRM 附件存储的底层实现机制
深入介绍 SAP CRM 附件存储的底层实现机制
30 0