首页 > 其他分享 >什么是 SAP CRM Attachment 创建的 Internal mode

什么是 SAP CRM Attachment 创建的 Internal mode

时间:2024-02-04 10:03:30浏览次数:19  
标签:sy Attachment sales uname Internal ls 权限 order 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 获取当前用户的用户名,然后根据不同的用户名来判断用户的权限级别,最后根据权限级别执行相应的操作。这样就能够根据不同用户的需求来提供个性化的功能和权限控制,提高系统的安全性和灵活性。

标签:sy,Attachment,sales,uname,Internal,ls,权限,order,mode
From: https://blog.51cto.com/jerrywangsap/9576789

相关文章

  • Distribute tensorflow model training on a kubernetes cluster
    [ERRRO:AttributeError:module'tensorflow'hasnoattribute'app'](base)maye@maye-Inspiron-5547:~/github_repository/tensorflow_ecosystem/distribution_strategy$kubectldescribepoddist-strat-example-worker-0-w6rsbName:......
  • Vue中v-model的原理
    在Vue中,v-model是一个非常强大且常用的指令,它能够让我们轻松地处理表单输入和应用状态之间的双向绑定。它不仅简化了代码编写的过程,还提供了一种高效的方式来管理表单数据。理解v-model的原理对于构建复杂的Vue应用来说是非常重要的。在本文中,我们将深入探讨v-model的实现原理,并通......
  • java: Compilation failed: internal java compiler error
    idea启动项目后出现 java:Compilationfailed:internaljavacompilererror错误第一种情况:idea的JDK版本和项目配置的不同。解决方法:查看项目中配置的jdk版本,再查看 idea配置的版本项目配置的:在idea中要查看三个地方的配置 1、File---->Setting------>javacompile......
  • 手把手教你如何创建并上传modelscope模型
    参考来源:https://modelscope.cn/docs/模型的创建与文件上传1.注册modelscope相关账号(略)2.创建对应的模型3.填写模型的相关资料4.创建审核通过了之后,下载对应的模型文件夹5.拷贝对应的上传脚本,可以根据上面的页面复制使用modelscope的SDK脚本6.需要获取用户特......
  • A Literature Survey about Why Is Prompt Tuning for Vision-Language Models Robust
    I.SummaryOverviewBackground:Avision-languagemodelcanbeadaptedtoanewclassificationtaskthroughfew-shotprompttuning.Wefindthatsuchaprompttuningprocessishighlyrobusttolabelnoises.Interest:Studyingthekeyreasonscontributing......
  • 【侯捷C++面向对象笔记】补充4-object model
    关键词:虚函数表,动态绑定,多态每个对象都维护自己的虚表指针,指向类的虚函数表。(所以对象的size比其包含的所有数据size多4,即虚指针大小)➡️动态绑定:(多态的实现原理)通过指针p找到对象c的vptr通过vptr找到classC的vtbl在vtbl中找到第n个虚函数并调用➡️子类调用父类函数隐......
  • 如何用潜类别混合效应模型(Latent Class Mixed Model ,LCMM)分析老年痴呆年龄数据|附
    全文下载链接:http://tecdat.cn/?p=24647最近我们被客户要求撰写关于LCMM的研究报告,包括一些图形和统计输出。线性混合模型假设N个受试者的群体是同质的,并且在群体水平上由独特的曲线Xi(t)β描述。背景和定义相比之下,潜在类别混合模型在于假设人口是异质的,并且由G潜在类......
  • Django 中使用ModelForm生成HTML标签
    在Django中,使用ModelForm来生成HTML表单标签是一种常见且高效的做法。ModelForm可以自动根据模型的字段生成对应的表单字段,这大大简化了表单的创建和处理过程。以下是如何在Django中使用ModelForm来生成HTML标签的基本步骤:步骤1:创建ModelForm首先,你需要为你的模型......
  • 动态绑定组件时 v-model:value 的使用
    //requireimportcomponentsconstfiles=require.context("@/components/control",true,/\index.vue$/);//console.log('files:',files.keys())//files:['./cascader/index.vue','./control/cascader/index.vue',......
  • Vue模板语法——v-model 双向数据绑定
    双向数据绑定单向数据绑定是什么?数据模型(Module)和视图(View)之间的单向绑定。需要我们先写好模板,然后把模板和数据(可能来自后台)整合到一起形成HTML代码,然后把这段HTML代码插入到文档流里面。简单的来说就是DOM操作html元素。单向数据绑定的缺点:一旦HTML代码生成好后,就没有办......